我沒有看過這個內部,但我們先假設編譯器在編譯時添加一個對象來繼續新的操作。這意味着我們所有的班級都是另一班班級的內部班級。由於他們沒有在另一個班級內宣佈,所以情況並非如此。所以:不,它不會在編譯時添加這樣的內容。
其實,我們來分解一下。
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