velog에서 이전한 글 입니다.
23.5.2 ~ 23.5.19 사전 캠프 기간의 TIL 기록이다.
TIL: Today I Learned
static import
import static java.lang.System.out;
import static java.lang.Math.*;
out.println(random());
import는 패키지명을 생략하고 import static은 static 멤버를 호출할 때 클래스명을 생략한다.
예외처리
public class Main {
public static void main(String[] args) {
int input = 0;
while (true) {
try {
System.out.println("1~100사이 값을 입력하세요");
input = new Scanner(System.in).nextInt();
System.out.println(input);
} catch ( InputMismatchException e){
System.out.println("Exception");
System.out.println(e.getMessage());
System.out.println(e.getStackTrace());
}
}
}
}
결과
a
Exception
null
[Ljava.lang.StackTraceElement;@4fca772d
e.getMessage()는 null이 나온다.
Scanner.nextInt()에서 throw InputMismatchException(NumberFormatException.msg)를 하는데 Number..예외를 발생시키는 메서드가 e.msg를 null로 주나보다. (이유가 있겠지?)
예외들은 Throwable 클래스까지 올라간다.
public class Main {
public static void main(String[] args) {
int input = 0;
while (true) {
try {
System.out.println("1~100사이 값을 입력하세요");
input = new Scanner(System.in).nextInt();
System.out.println(input);
} catch ( CustomException e) { //CustomException is never thrown in the corresponding try block
System.out.println("Exception");
System.out.println(e.getMessage());
System.out.println(e.getStackTrace());
}
}
}
}
class CustomException extends Exception{
CustomException(String msg){
super(msg);
System.out.println(msg);
}
}
사용자 정의 예외를 쓰려면 try에서 throw new 사용자정의(); 가 있어야한다.
기본적으로 거의 상위 부모인 Exception으로 우선 처리하고 InputMismatchException처럼 관련 Exception 정의된 거 있나 확인하고 없으면 사용자 정의 예외 만들고 로직에서 정의한 예외 던지게 하자.
deep copy
public class Main {
public static void main(String[] args) {
int[][] arr = {{1, 2, 6}, {3, 4, 5}, {1, 1, 1}};
// int[][] arr2 = Arrays.copyOf(arr, arr.length);
int[][] arr2 = new int[arr.length][arr.length];
for(int i=0; i<arr2.length; i++){
arr2[i] = Arrays.copyOf(arr[i], arr[i].length);
}
arr2[2][2] = 3;
arr2[0] = new int[]{3,3,3};
System.out.println(Arrays.deepToString(arr));
System.out.println(Arrays.deepToString(arr2));
}
}
결과
[[1, 2, 6], [3, 4, 5], [1, 1, 1]]
[[3, 3, 3], [3, 4, 5], [1, 1, 3]]
//주석으로 하면 얕은 복사
[[1, 2, 6], [3, 4, 5], [1, 1, 3]]
[[3, 3, 3], [3, 4, 5], [1, 1, 3]]
알고리즘에 쓸만한 deep copy method 있는지 찾아보자.
'Language > Java' 카테고리의 다른 글
자바) List/ Stack/ Arrays Comparator/ Comparable Iterator (23-05-09) (0) | 2023.07.13 |
---|---|
자바) lang/ Object/ StringBuffer/ equals (23-05-08) (0) | 2023.07.13 |
자바) 변수 초기화/ 제어자/ 다형성/ 인터페이스/ 익명클래스 (23-05-04) (0) | 2023.07.13 |
자바) Wrapper/ 표현식/ 이름붙은 반복문 (23-05-04) (0) | 2023.07.13 |
자바) JDK/ JVM/ Runtime Data Areas (23-05-02) (0) | 2023.07.13 |