2017-09-16 9 views
1

현재 Java에서 정적 클래스를 배우는 C#에 익숙합니다. 아래 코드에서 staticClass 생성자가 이미 시작될 때 초기화되었다고 가정했습니다. 하지만 그렇지 않습니다. 디버그 커서가 main 메소드의 첫 번째 for 루프의 중단 점에 도달 할 때. "staticClass가로드되지 않았습니다."라는 오류가 발생합니다.정적 클래스가로드되지 않았습니다.

질문 : main 메서드를 실행하기 전에 정적 클래스 생성자를 실행하는 방법이 있습니까? 왜로드되지 않았습니까? 유사한 정적 클래스가 시작시 C#에로드됩니다. 하지만 자바에서? 이것이 작동하지 않는 코드라고 생각하십시오. 자바 전문가로서 어떻게이 코드를 다시 작성할 수 있습니까? 수정해야하므로.

public class Main { 

    public static class staticClass 
    { 
     public static int myArray[]; 

     public staticClass() 
     { 
      myArray=new int[10]; 
     } 

     public static int NextUnique() 
     { 
      int r=(int)(Math.random()*10); 
      return r; 
     } 
    } 
    //=new int[10]; 
    public static void main(String[] args) throws ClassNotFoundException { 

     for (int i=0;i<staticClass.myArray.length;i++) 
      staticClass.myArray[i]= staticClass.NextUnique(); 

     for(int i=0;i<staticClass.myArray.length;i++) { 
      String msg= MessageFormat.format("{0}. value= {1}",i,staticClass.myArray[i]); 
      System.out.println(msg); 
     } 
    } 
} 
+0

중첩 클래스는 다른 클래스에 중첩되어 있으며 해당 클래스 개인 멤버에 액세스 할 수 있다는 점을 제외하고는 tp 수준 클래스와 같습니다. 그것은 다른 클래스처럼 행동합니다. 그리고 생성자는 절대 호출하지 않으면 마술처럼 호출되지 않습니다. –

+0

다른 클래스에 클래스를 포함하고 싶지 않지만 이것이 자바에서 유일한 방법이라고 생각합니다. 정적 클래스는 단독/중첩 될 수 있습니까? –

+0

물론이 경우를 제외하고는 static 키워드가 필요하지 않습니다. Main 클래스처럼 최상위 클래스가됩니다. 나는 그것이 "유일한 길"이라는 것이 무슨 뜻인지 잘 모르겠습니다. 무엇을 할 수있는 유일한 방법은? –

답변

1

당신은이 목적을 위해 정적 정적 초기화 블록 (생성자)를 사용합니다. 대신

public staticClass() 
    { 
     myArray=new int[10]; 
    } 

사용

static 
    { 
     myArray=new int[10]; 
    } 

생성자의 현재 인스턴스 생성자입니다. 새로운 연산자를 사용할 때마다 작동합니다. static constructor in c#static initialization block (constructor) java

+0

정적 생성자가 아닙니다. 그것은 정적 초기화 블록입니다. Thre는 Java의 정적 생성자와 같은 것이 아닙니다. –

+1

@JBNizet C#을 작성한 사람은 그것을 정적 생성자로 알고 있습니다. 그것은 같은 방식으로 작동합니다. 나는 이미 링크를 추가했다. 그리고 질문자는 "나는 C#에 익숙하다"고 말했다. –

+0

아마 C#의 용어입니다. 그러나 Java에서는 그렇지 않습니다. 용어가 중요합니다. 생성자가 인스턴스를 생성합니다. –

1

당신은이 같은 배열을 초기화 할 수 있습니다

public static int myArray[] = new int[10]; 
+0

괜찮습니다. 고맙습니다. 그러나 질문의 ​​대답은 아닙니다. 질문은 이것입니다. 시작할 때 생성자가 실행되지 않는 이유는 무엇입니까? 정적 클래스가로드되지 않는 이유. –

+1

OK, JB Nizet은 그의 코멘트에서 간단한 답을주었습니다. 객체가 생성되지 않으면 생성자가 호출되지 않습니다. – JensS