一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談java中類名.class, class.forName(), getClass()的區別

淺談java中類名.class, class.forName(), getClass()的區別

2020-10-05 14:43Java教程網 Java教程

下面小編就為大家帶來一篇淺談java中類名.class, class.forName(), getClass()的區別。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Class對象的生成方式如下:

1、類名.class   

說明: JVM將使用類裝載器, 將類裝入內存(前提是:類還沒有裝入內存),不做類的初始化工作.返回Class的對象

2、Class.forName("類名字符串")  (注:類名字符串是包名+類名) 

說明:裝入類,并做類的靜態初始化,返回Class的對象

3、實例對象.getClass() 

說明:對類進行靜態初始化、非靜態初始化;返回引用o運行時真正所指的對象(因為:子對象的引用可能會賦給父對象的引用變量中)所屬的類的Class的對象

通過下面的程序,來觀察一下Class對象的生成的原理。

java" id="highlighter_393594">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public class TestClass {
public static void main(String[] args)
{
 
try {
//測試.class
 
Class testTypeClass=TestClassType.class;
 
System.out.println("testTypeClass---"+testTypeClass);
 
 
//測試Class.forName()
 
Class testTypeForName=Class.forName("TestClassType");   
 
System.out.println("testTypeForName---"+testTypeForName);
 
 
//測試Object.getClass()
 
TestClassType testTypeGetClass= new TestClassType();
 
System.out.println("testTypeGetClass---"+testTypeGetClass.getClass());
 
 
 
} catch (ClassNotFoundException e) {
 
// TODO Auto-generated catch block
 
e.printStackTrace();
 
}
}
 
}
 
 class TestClassType{
 
//構造函數
 
public TestClassType(){
 
System.out.println("----構造函數---");
 
}
 
//靜態的參數初始化
 
static{
 
System.out.println("---靜態的參數初始化---");
 
}
 
//非靜態的參數初始化
 
{
 
System.out.println("----非靜態的參數初始化---");
 
}   
 
}

測試的結果如下:

testTypeClass---class TestClassType

---靜態的參數初始化---

testTypeForName---class TestClassType

----非靜態的參數初始化---

----構造函數---

testTypeGetClass---class TestClassType

根據結果可以發現,三種生成的Class對象一樣的。并且程序只打印一次“靜態的參數初始化”。

我們知道,靜態的方法屬性初始化,是在加載類的時候初始化。而非靜態方法屬性初始化,是new類實例對象的時候加載。

因此,這段程序說明,三種方式生成Class對象,其實只有一個Class對象。在生成Class對象的時候,首先判斷內存中是否已經加載。

所以,生成Class對象的過程其實是如此的:

當我們編寫一個新的java類時,JVM就會幫我們編譯成class對象,存放在同名的.class文件中。在運行時,當需要生成這個類的對象,JVM就會檢查此類是否已經裝載內存中。若是沒有裝載,則把.class文件裝入到內存中。若是裝載,則根據class文件生成實例對象。

以上這篇淺談java中類名.class, class.forName(), getClass()的區別就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人综合网 | 国产欧美日韩综合二区三区 | 久久棋牌评测 | 日本亚欧乱色视频在线观看 | 521色香蕉网在线观看免费 | 糖心vlog网页版 | 亚洲上最大成网人站4438 | 糖心vlog视频永久破解版 | 大东北chinesexxxx露脸 | 欧美日韩精品免费一区二区三区 | 国产美女做爰免费视频网址 | 国产视频分类 | 白发在线视频播放观看免费 | 亚洲精品一区二区三区在线看 | 婷婷综合亚洲 | 91精品天美精东蜜桃传媒免费 | 成人小视频在线免费观看 | 色中色破解版 | 国产综合久久久久久 | 国产欧美日韩不卡 | 免费观看全集 | vod国产成人精品视频 | 亚洲欧洲日产国码无码av | 99久9在线视频 | 欧美一区二区三区免费不卡 | 欧美聚众性派对hdsex | 亚洲国产天堂在线观看 | 欧美艳星kagneyiynn高清 | 久久两性视频 | 精品一区久久 | 美女扒开屁股让我桶免费 | 1717she精品视频在线观看 | 亚洲男人第一天堂 | 久久免费国产视频 | avtt天堂在线 | 韩国三级hd中文字幕李采潭 | 美女被免费视频 | 亚洲欧美日韩成人 | 我的好妈妈7中字在线观看韩国 | 熟睡中的麻麻大白屁股小说 | 色综合久久日韩国产 |