国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java 靜態代碼塊

2019-11-06 09:10:11
字體:
來源:轉載
供稿:網友

在看書過程中,對靜態代碼塊的有些迷糊,只是知道靜態塊優先類構造函數執行,類第一次用 new 或者直接  [類.staticMethod]會觸發靜態塊的執行。但是

Class.forName("com.thq.statics.Static");上面這條語句會不會觸發靜態塊的執行呢?答案是肯定的,會觸發的(前提:在同一個類加載中只有第一次調用的時候起作用),上述方法在類加載器中查找并加載類

用例子說明:

1 、父類 只含有靜態代碼塊

 

package com.thq.statics;public class ParentStatics {	static{		System.out.PRintln("正在執行父類的靜態方法塊");	}}2、 子類

package com.thq.statics;public class Static extends ParentStatics {	static{		System.out.println("正在執行 子類的 static代碼塊");	}		public static void println(){		System.out.println("正在執行靜態方法:println() ");	}}

3、測試類

package com.thq.statics;public class StaticMain {	public static void main(String[] args) throws ClassNotFoundException {		Class.forName("com.thq.statics.Static");		Class.forName("com.thq.statics.Static");	}}

4.結果

綜上  Class.forName() 不管調用多少次,靜態塊只會執行一次,這也說明靜態塊,靜態方法,靜態變量 只屬于Class,而不是類實例。

Class.forName()  會去查找并加載類,所以在類加載的時候觸發靜態塊,先執行父類的靜態塊,再執行子類的。

注:執行一次,前提是在同一個類加載器中,這點很重要。

最后,jdbc 注冊 MySQL驅動器時,就采用靜態塊的形式

package com.thq.mybatis;import java.sql.SQLException;public class MysqlJdbc {	public static void main(String[] args) throws ClassNotFoundException, SQLException {		Class.forName("com.mysql.jdbc.Driver");		//java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver()); mysql 驅動已經幫我們做了哈。。。	}}

查看com.mysql.jdbc.Driver源碼 

在靜態塊中注冊mysql驅動器

完畢


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 喀什市| 石泉县| 彭泽县| 格尔木市| 囊谦县| 桃江县| 吉木萨尔县| 霍州市| 科技| 成安县| 乌拉特后旗| 庄浪县| 西青区| 彭阳县| 新化县| 句容市| 深州市| 云阳县| 双辽市| 鲁甸县| 阜南县| 仁寿县| 紫阳县| 交城县| 清水河县| 盐池县| 会泽县| 遂宁市| 钟山县| 鲁山县| 大丰市| 承德县| 贞丰县| 论坛| 电白县| 贡山| 滨海县| 怀来县| 怀来县| 瓮安县| 南皮县|