자바, 다른 클래스에서 문자열 가져오기

조회수 1392회

문자 변수 선언하는 클래스와 출력하는 클래스를 따로 만들어서 관리하려고 합니다.

그런데 변수는 잘 가져오는데 문자열만 가져오려고 하면 문제입니다.

밑에 문제가 되는 부분만 간단하게 예제로 만들어서 첨부합니다.

감사합니다.

// 출력 담당 클래스

package test;

public class test {

test(){

    for (int i=0;i<var.size;i++)
    {

        System.out.println(var.txt[i]);

    }
}

public static void main(String[] args) {

 new test();

}

}

// 변수관리 클래스

package test;

public class var {

public final static int size = 5;
public static String txt[];

public var() {

    txt = new String[size];

    for (int i=0;i<size;i++)
    {
        txt[i] = new String();
        txt[i] = "abcd"+i;
    }   

}

}

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • Exception in thread "main" java.lang.NullPointerException
        at test.test.<init>(test.java:13)
        at test.test.main(test.java:18)
    

    var.txt의 값을 var() 생성자에서 할당해주도록 작성했는데, 정작 var() 생성자를 호출하지 않아 발생하는 문제입니다.

    var.txt에 접근하기 전에 var() 생성자를 명시적으로 호출하면 문제는 해결됩니다만:

        test() {
            new var(); // <-- 요기
            for (int i = 0; i < var.size; i++) {
                System.out.println(var.txt[i]);
            }
        }
    

    사실 static 멤버를 non-static 멤버가 초기화하는 것은 굉장히 이상한 코드입니다. 아래처럼 static 블록으로 초기화하세요:

    public class var {
        public final static int size = 5;
        public static String txt[];
    
        static { // <--
            txt = new String[size];
    
            for (int i = 0; i < size; i++) {
                txt[i] = new String();
                txt[i] = "abcd" + i;
            }
        }
    
        public var() {}
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)