필자는이 내부를 살펴 보지 않았지만 먼저 컴파일러가 컴파일 할 때 새로운 개체를 추가한다고 가정 해 보겠습니다. 그것은 모든 클래스가 다른 클래스의 내부 클래스라는 것을 의미합니다. 다른 클래스에서 선언되지 않았으므로 그렇지 않습니다. 그래서 : 아니오, 컴파일 할 때 이와 같은 것을 추가하지 않습니다.
사실이 문제를 해결해 보겠습니다.
public class Outer {
String strHello = "Hello ^^";
public void printHello() {
System.out.println(strHello);
}
public static void main(String[] args) {
// This will print: Hello ^^
Outer outer = new Outer();
outer.printHello();
// This will print: Hello ^^
new Outer().printHello();
}
}
나는 이전에 이런 코드를 본 것 같습니다. 이것은 단순히 인스턴스화 된 클래스의 메소드를 호출하는 것입니다. 점 표기법을 사용하여 변수 및 내부 클래스에 액세스 할 수도 있습니다. 위의 예제에서는 인스턴스 메서드에 사용했습니다. static
키워드를 사용하면 메소드와 변수를 공유 할 수 있으며 클래스의 모든 인스턴스 또는 별도의 클래스가됩니다.
public class Outer {
static String strHello = "Hello ^^";
public static void printHello() {
System.out.println(strHello);
}
static class StaticInner {
}
static class Inner {
}
public static void main(String[] args) {
// Prints: Hello ^^
Outer.printHello();
// Constructs a new Example.StaticInner
Outer.StaticInner inner = new Outer.StaticInner();
// Constructs a new Outer.Inner
Outer.Inner inner = new Example().new Inner();
// Constructs a new Outer.Inner
Example ex = new Example();
Outer.Inner inner = ex.new Inner();
}
}
위의 코드는 정적 내부 클래스를 사용하여 내부 생성자가 다른 생성자와 동일하다는 것을 보여줍니다. 그러나 다른 클래스에 있기 때문에 다른 (외부) 클래스를 통해 액세스해야합니다. 그것은 정적 내부 클래스가 아니므로 접근 수정 자 때문에 인스턴스에 액세스해야합니다.
가능한 [Java에서 \ someObject.new \'는 무엇을합니까?] (http://stackoverflow.com/questions/15724676/what-does-someobject-new-do-in-java) – Mikhail