일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 쿼리실행순서
- 중복컬럼dto매핑
- port&adapter architecture
- 컬럼명중복
- IntelliJ
- Flush
- 플러그인 로컬 테스트
- 로컬에서 플러그인 추가
- Java
- dto매핑우선순위
- intellij 플러그인 만들기
- group by group by rollup 차이
- 쓰기지연sql저장소 쿼리실행순서
- java 로 intellij 플러그인
- ls -lgaf
- JPA
- 쓰기지연저장소
- hibernate 쿼리실행 순서
- 포트앤어댑터 아키텍처
- plugin local
- Kafka
- 자바
- error 2002 (hy000): can't connect to local mysql server through socket '/tmp/mysql.sock' (2)
- intellij 플러그인 개발
- 스트림
- 오라클쿼리테스트사이트
- sql 테스트 사이트
- Stream
- 쿼리테스트사이트
- Oracle
- Today
- Total
개린이 탈출기
[자바퀴즈] 정적메서드, try-finally return 본문
회사 개발자 분께서 재밌고 간단한 자바 퀴즈를 내셨다.
너무 재밌어서 온 세상 사람들이 알았으면 해서 짧게 글을 남긴다.
문제 1. null 값의 메서드를 부를 수 있을까!?
문제 코드는 다음과 같다.
class MyClass {
static void guessMe() {
System.out.println("Did you get the right answer?");
}
}
public class Main {
public static void main(String[] args) {
MyClass myClass = null;
myClass.guessMe();
// 위 코드는 실행될까요?
}
}
부끄럽지만 나는 NullPointer Exception 이 발생할거라 생각했다...
static이라도 null 을 참조하니까 안될거라는 생각을 했는데 틀린 생각이었다!
myClass 는 비록 값이 null 이더라도 MyClass 라는 클래스라는 메타정보는 가지고 있다!
따라서 null 이라 인스턴스주소가 없더라도 guessMe라는 정적 메서드를 MyClass의 클래스 메서드로 호출하기 때문에
애초에 null을 참고하지 않으므로 NPE가 발생할 리가 없었던 것이다!!!
정답
Did you get the right answer?
문제 2. try return ? finally return
문제는 다음과 같다.
public class Main {
public static void main(String[] args) {
System.out.println(test1());
// return은 어디서 될까욥!?
}
static String test1() {
try{
System.out.println("I'm here try!");
return "execute until try";
} finally {
System.out.println("I'm here finally");
return "execute until finally";
}
}
}
나는.. 또 틀렸다... 내가 예상한 답은
I'm here try!
execute until try.
허허 정답이 아니다!
finally 블록은 항상 실행된다는 점을 잊어선 안된다!
따라서 try가 모두 실행된 뒤, finally 블록이 실행되며 이때, return 값은 덮어 씌울 수 있다.
그리고 갑자기 다음과 같은 생각이 들었다.
그러면 try 블록의 return 뒤의 라인도 모두 실행되나? 라는 바보같은 생각을 잠깐 했다...ㅎㅎ
당연히 불가능하다. 애초에 컴파일러 에러가 발생한다.
아무튼 finally 의 return은 기존 return 값을 덮을 수 있다.
그러나 만일 예외가 발생하는 경우, finally의 return이 예외를 무시하고 값을 반환할 수 있기 때문이다.
정답
I'm here try!
I'm here finally
execute until finally
분명히 어려운 문제가 아니고 당연한 문제인데, 아직까지도 헷갈리는걸 보면 개념을 100% 정확히 이해하지 못했기 때문일 것이다.
앞으로 더 정진하자,,,!
'에러 해결 목록' 카테고리의 다른 글
[IntelliJ] 플러그인 최초 실행 시, ClassNotFoundException 예외 발생 (0) | 2025.05.02 |
---|---|
[IntelliJ] 인텔리제이가 프로젝트를 잘 인식하지 못할 때 (0) | 2025.04.21 |
[Java] Stream 을 이용한 정렬 중 null 값이 존재할 때! (Compartor.nulls-) (3) | 2024.11.26 |
[IntelliJ] properties 파일 한글 깨짐 현상 (인코딩) (0) | 2024.11.26 |
[JAVA] Unable to make protected final java.lang.Class 예외 해결 (1) | 2024.11.06 |