java

    자바 클래스 로드와 초기화(Loading and Initializing)

    어제 스터디를 하는데 같이 하시는 분이 질문을 주셨다. static 클래스에 관한 얘기였는데, 질문은 완전 다른 방향으로 흘러가서 당황했다. 우선 아래 문제를 풀어보자. 출력 결과를 예상할 수 있겠는가? class Main { public static void main(Strin[] args) { System.out.println(StaticTest.class); } } class StaticTest { public static String value = “init me!”; static { System.out.println(“init static!”); } } 출력 결과는 아무 것도 없다. (질문자와 나는 "init static!"이 출력 결과일 것이라고 생각하고 있었다. 지금 보면 너무 당연하지만, ..

    자바 static 초기화 순서

    자바에는 크게 클래스 변수와 인스턴스 변수가 존재한다. 클래스 변수는, 클래스 변수라는 이름답게 해당 클래스의 모든 객체들이 같은 값을 공유한다. (static키워드를 사용해서 static변수라고도 한다.) static 변수는 static 변수가 호출되거나, 해당 클래스가 인스턴스화 될 때, 초기화가 한 번 일어난다. 그리고 static 변수의 값을 초기화 하는 방법으로는 2가지가 있다. 1. 직접 값을 할당한다. 2. static 블록을 이용하여 값을 할당한다. 여기서는, 저 두 가지가 같이 사용되었을 경우에 우선순위가 어떻게 되는가에 대한 글이다. 문제를 풀어보자. public class Main { public static void main(String[] args) { System.out.prin..