A. java知多少(36)內部類及其實例化
在 Java 中,允許在一個類(或方法、語句塊)的內部定義另一個類,稱為內部類(Inner Class),有時也稱為嵌套類(Nested Class)。
內部類和外層封裝它的類之間存在邏輯上的所屬關系,一般只用在定義它的類或語句塊之內,實現一些沒有通用意義的功能邏輯,在外部引用它時必須給出完整的名稱。
使用內部類的主要原因有:
內部類可以訪問外部類中的數據,包括私有的數據。
內部類可以對同一個包中的其他類隱藏起來。
當想要定義一個回調函數且不想編寫大量代碼時,使用匿名(anonymous)內部類比較便捷。
減少類的命名沖突。
請看下面的例子:
1 public class Outer {
2 private int size;
3 public class Inner {
4 private int counter = 10;
5 public void doStuff() {
6 size++;
7 }
8 }
9 public static void main(String args[]) {
10 Outer outer = new Outer();
11 Inner inner = outer.new Inner();
12 inner.doStuff();
13 System.out.println(outer.size);
14 System.out.println(inner.counter);
15 // 編譯錯誤,外部類不能訪問內部類的變數
16 System.out.println(counter);
17 }
18 }
這段代碼定義了一個外部類 Outer,它包含了一個內部類 Inner。將錯誤語句注釋掉,編譯,會生成兩個 .class 文件:Outer.class 和 Outer$Inner.class。也就是說,內部類會被編譯成獨立的位元組碼文件。
內部類是一種編譯器現象,與虛擬機無關。編譯器將會把內部類翻譯成用 $ 符號分隔外部類名與內部類名的常規類文件,而虛擬機則對此一無所知。
注意:必須先有外部類的對象才能生成內部類的對象,因為內部類需要訪問外部類中的成員變數,成員變數必須實例化才有意義。
內部類是 Java 1.1 的新增特性,有些程序員認為這是一個值得稱贊的進步,但是內部類的語法很復雜,嚴重破壞了良好的代碼結構, 違背了Java要比C++更加簡單的設計理念。
內部類看似增加了—些優美有趣,實屬沒必要的特性,這是不是也讓Java開始走上了許多語言飽受折磨的毀滅性道路呢?本教程並不打算就這個問題給予一個肯定的答案。
B. Java中什麼叫實例化
就是從一個模版中得出一個實際的例子。比如:從一張汽車設計圖,設計出一輛真正的汽車。這個就叫做實例化。我們可以理解這個設計圖是一個類,一個模板。你new了之後的那個就是真正的實例了。
對象是虛無的,不實際的,抽象的(比如汽車設計圖,裡面的汽車不能真的開);
實例是實實在在的,個體的,具體的(根據設計圖可以設計出不同顏色的汽車,而這個汽車是真正存在的,可以拿來開動的)。
C. Java實例化的幾種方式
1、用new語句創建對象復,這是最常見制的創建對象的方法。
2、通過工廠方法返回對象,如:String str = String.valueOf(23);
3、運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()實例方法。如:Object obj = Class.forName("java.lang.Object").newInstance();
4、調用對象的clone()方法。
5、通過I/O流(包括反序列化),如運用反序列化手段,調用java.io.ObjectInputStream對象的 readObject()方法。
D. 如何理解java中的實例化
Java中的實例化,其實理解起來也挺簡單,其實就是創建對象,例如:Car car = new Car();
通常把這條語句的動作稱之為創建一個對象,也就是所謂的實例化過程。
在這句話中,Car是一個"汽車類",這個"類"可以理解成是一個"工廠里的模具",然後我們可以根據這個"模具"來創造出"一個具體的產品",這個"具體的產品",也就是所謂的"實例化對象"。所謂的實例化,就是根據"類",來創造出一個具體的對象。
E. 剛剛學習java 菜鳥一隻 什麼是實例化對象 什麼是實例化變數 誰能舉例子說明下
實例化對象就有,實例化變數確實沒聽過,是初始化變數么?
例如有一個類
class student{
int num;
String name;
public student(int num,String name){ //構造器不懂的話去看一下
int num;
String name;
}
public static void main(String args[]){
student stu=new student(100,"張三");//new 一個對象的過程就可以看成是一個實例化對象的過程
}
}
F. JAVA中棧的變數怎麼實例化
- -!
Exception in thread "main" java.lang.NullPointerException這個錯誤的意思上說找不到MAIN方法。因為程序的入口是MAIN方法,就是說你要是沒有MAIN方法程序就不知道從哪開始運行。你需要寫個MAIN方法調用其他的方法。
G. JAVA實例化是什麼意思
簡單說,就是產生一個CLASS的對象,把抽象的東西具體話,把泛指的東西變成一個個例
H. java中的實例化和引用變數有什麼區別
區別如下:
實例化就是另外分配一個空間來存儲要實例化的類,引用變數沒有另外回創建一個空間,只是答多了一個變數指向那個空間而已,比如,
String str1 = "aaaa"; //實例化一個變數str1,創建了一個空間來存放"aaaa".
String str2 = str1; //引用變數, 把str2也指向存放"aaaa"的那個空間。
這樣就可以用str1或者str2對"aaaa"的內容進行改變,不過String 類型的內容不能改變,改變了內容只是 另外創建一個空間存放新的內容,然後把變數名指向新的空間而已。
I. 請問java中實例化和初始化區別是什麼
初始化一次,實例化多次,你這么記就沒問題了!
比方一個類,第一次被使用的時候,靜態的資源,包括變數,方法,靜態代碼塊,會進行初始化。
實在記不住,這么想好了,第一次使用,才叫初始化,對吧,那麼初始化最先載入的,當然是靜態的資源。
比如,一個類,有靜態變數,static int a=1;這個靜態變數,就會被初始化,當你第二次調用該類的時候,不必重新給a開辟內存,直接調用已有的。
而實例化,則是一個類new一次,就產生一個實例,比方一個類A。
A a1=new A();
A a2=new A();
a1和a2,就叫做A的實例。創建A對象實例的過程,就叫做實例化。
J. java為什麼要實例化實例化的對象和引用用變數在用法上有什麼區別
因為只有實例化之後,才能將這個對象放到內存中,然後才能在規定的范圍內來調用。
當然,這不包括靜態對象,靜態對象是可以直接調用的。
再有,每次實例化其實都是一個新建的過程
例如Object a = new Object();這句話,你可以寫無數次,只要每次起到名字不同,就會在內存中創建無數個Object對象,這樣在調用其中任意一個的時候互不幹擾。
其實簡單的說,對象的引用和變數引用差不多,都是內存地址的引用,如果你是新手可以先認為是一樣的,以後學的多了,你會更加理解二者的區別