java

까먹은 것들 정리

잘할수있을거야 2021. 12. 25. 02:57

코틀린 하다가 자바 기본기가 흔들려 다시 머리식힐겸 정리해놓은 블로그가 있길래 정독중이다.

틀린 부분도 있는데 그냥 그러려니 하고 읽고 있다.

 

Java 프로그램이 여러 운영체제에서 돌아갈 수 있는 이유 -> Java 프로그램을 돌리는 JVM이 운영체제에 맞게 설계됨


JRE (Java Runtime Environment) : 자바 프로그램을 실행시킬 수 있는 환경

JDK (Java Development Kit) : 자바 개발 도구 + JRE


단항 부호 연산자 +변수, -변수의 산출 타입은 int


산술 연산자 

 

long 타입을 제외한 모든 정수형은 int 타입으로 계산된다.

나머지의 경우 두 피연산자 중 더 큰 타입으로 변환되어 계산된다.

 

문자열 덧셈의 경우


&&, &  (논리 and)

|| | (논리 or)

두개짜리는 앞조건만 평가한 뒤 평가 가능하면 뒤조건 평가하지 않음


switch문의 default는 없어도 된다.

switch문의 조건은 int, String, enum 값 또는 int, String, enum 으로 계산될 수 있는 표현식만 사용할 수 있다.

 

TestEnum.java

 

프로그램

public class TestProgram {

	public static void main(String[] args) {

		TestEnum what = TestEnum.VALUE1;

		switch (what) {

		case VALUE1:
			System.out.println(TestEnum.VALUE1.name());
			break;
		case VALUE2:
			System.out.println(TestEnum.VALUE2.name());
			break;
		case VALUE3:
			System.out.println(TestEnum.VALUE3.name());
			break;
		default:
			System.out.println("없는 값");

		}

	}

}


for each문

for(담겨있는타입 변수선언 : 배열 or Iterable구현객체) { 
	//TODO
}

 

배열

 

Iterable 구현 객체 

또는 메서드 iterator()로 -> Iterator 구현한 객체를 얻어와서 메서드 hasNext, next 로

public static void main(String[] args) {

	ArrayList<Integer> integerArrayList = new ArrayList<>(5);

	integerArrayList.add(1);
	integerArrayList.add(2);
	integerArrayList.add(3);
	integerArrayList.add(4);
	integerArrayList.add(5);

	// for(초기화; 조건문; 수행코드;){ 반복 }
	// 초기화 -> 조건문 비교 -> 반복 -> 수행코드 -> 조건문 비교 -> ...

	for (Iterator<Integer> iterator = integerArrayList.iterator(); iterator.hasNext();) {
		
		System.out.println(iterator.next().intValue());
	}

}


배열, String, 클래스, 인터페이스는 참조 타입

interface TestInterface {
}

class Person {
}

public class GenericTest3 {

	public static void main(String[] args) {

		// String
		String str = null;

		// 클래스
		Person person = null;

		// 인터페이스
		TestInterface testInterface = null;

		// 배열
		int[] ints = null;
		Object[] objs = null;
		String[] strings = null;
		Person[] persons = null;
	}
}

https://doohong.github.io/2018/03/04/java-string-pool/


배열 짜잘한 문법

 

1. 선언 , 초기화 문법

 

2. 배열의 조상 클래스는 Object 

public class ArrayCopyTest {

	public static void main(String[] args) {

		int[] ia = new int[3];
		System.out.println("this class: " + ia.getClass());
		System.out.println("super class: " + ia.getClass().getSuperclass());
		for (Class<?> c : ia.getClass().getInterfaces())
			System.out.println("Superinterface: " + c);
	}

}

 

3. 자동 up-casting , 타입체크후 down-casting

public class ArrayCopyTest {

	public static void main(String[] args) {

		int[] intArray = { 1, 2, 3, 4, 5 };
		
		Object obj = intArray; // (Object)intArray;
		
		if (obj instanceof int[]) {
			obj = (int[]) obj;
		}
		
	}

}

 

4. 다차원 배열

 

https://steemit.com/coding/@pooh1973/2

 

자바 2차원 배열 — Steemit

2차원 배열의 개념이해 2차원 정방형 배열 2차원 정방형 배열 연습 2차원 비 정방형 배열 -2차원 비 정방형 배열 연습 배열연습문재 // 정수형 2차원배열 score int[][] score = { {85, 60, 70}, {90, 95, 80}, {75,

steemit.com

 

5. 복사

 

int형 배열 복사의 경우

 

Arrays.copyOf(........) 

public static int[] copyOf(int[] original, int newLength) {
    int[] copy = new int[newLength];
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}

System.arraycopy(...)

public static native void arraycopy(Object src,  int  srcPos,
        Object dest, int destPos,
        int length);

 

배열을 쉽게 조작하도록 도와주는 Arrays 클래스의 배열복사 메서드는 System의 배열복사 메서드로 되어있다.

public class ArrayCopyTest {

	public static void main(String[] args) {

		int[] fromArray =  {0,1,2,3,4,5,6,7,8,9};
		int[] toArray = new int[20];
		
		System.arraycopy(fromArray, 0, toArray, 10, 10);
		//from의 0번부터 , toArray의 10번부터, 10개를 
		
		for(int value: toArray) {
			System.out.print(value+",");
		}
		
	}

}

 

ArrayStoreException

- from 배열타입이 to 배열타입에 담길 수 없는 경우

 

IndexOutOfBoundsException

- from 배열 인덱스 넘은 경우, to 배열 인덱스 넘은 경우, 옮기다가 to 배열 인덱스 넘어버려 못옮기는 경우

public class ArrayCopyTest {

	public static void main(String[] args) {

		String[] fromArray = new String[10];
		
		for (int i = 0; i < fromArray.length; i++) {
			fromArray[i] = new String(((Integer) i).toString());
		}

		Object[] toArray = new Object[10];

		System.arraycopy(fromArray, 0, toArray, 0, 10);

		for (Object value : toArray) {
			System.out.println(value.toString());
		}

	}

}

 

Object 배열에는 모든 클래스 타입 객체를 담을 수 (정확히는 객체 주소값을 가리킬 수) 있으므로 String 배열로 옮기면 예외

 

public class ArrayCopyTest {

	public static void main(String[] args) {

		Object[] fromArray = new Object[10];
		
		for (int i = 0; i < fromArray.length; i++) {
			fromArray[i] = new Object();
		}

		String[] toArray = new String[10];

		System.arraycopy(fromArray, 0, toArray, 0, 10);

		for (String value : toArray) {
			System.out.print(value.toString());
		}

	}

}
 java.lang.ArrayStoreException: arraycopy: element type mismatch: 
 can not cast one of the elements of java.lang.Object[] 
 to the type of the destination array, java.lang.String

 

객체 배열의 경우

깊은 복사 deep copy

얉은 복사 shallow copy 에 주의해야함


어노테이션

https://kyleyj.tistory.com/22?category=799619 

 

[Java]STEP1 - 10) 어노테이션(Annotation)

본 게시글은 도서 "이것이 자바다" 동영상 강의를 듣고 기록하는 TIL(Today I Learned) 입니다. 모든 저작권은 출판사 한빛미디어와 신용권님께 있음을 알립니다.👍 이번 게시물에서는 자바의 메타데

kyleyj.tistory.com


접근 제한자 범위 

 

Public > protected > default > private

 

protected 

같은 패키지에서 어디서나 사용 가능 + 다른 패키지의 경우 자손 클래스 내부만 사용가능

 

같은 패키지 사용 가능

package protectedmodifier;

public class Hello{
	
	protected void method() {
		System.out.println("sjdflakjd");
	}
}

class Hello2{
	void method() {
		new Hello().method(); //같은 패키지 사용가능
	}
}

 

다른 패키지 사용 불가

package anotherpackage;

import protectedmodifier.Hello;

class Hello2{
	void method() {
		new Hello().method(); //다른 패키지 사용 불가
	}
}

 

자손이면 패키지 상관없이 사용 가능하니 사용 가능 유무는 생략

protected 메서드 오버라이딩시 public 또는 protected ( 조상 메서드보다 같거나 넓은 범위로 사용해야함)

package protectedmodifier;

public class Hello{
	
	protected void method() {
		System.out.println("sjdflakjd");
	}
}

class ChildHello extends Hello{
	
	@Override
	void method() { //default 도 에러
		System.out.println("dfalsklkahds");
	}
	
}

https://kyleyj.tistory.com/25?category=799619 

 

[Java]STEP1 - 13) 인터페이스(Interface)

본 게시글은 도서 "이것이 자바다" 동영상 강의를 듣고 기록하는 TIL(Today I Learned) 입니다. 모든 저작권은 출판사 한빛미디어와 신용권님께 있음을 알립니다.👍 이번 게시글에서는 자바의 인터페

kyleyj.tistory.com

머리 식힐 때 여기부터 읽자.