国产探花免费观看_亚洲丰满少妇自慰呻吟_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驅動器

完畢


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南昌市| 嘉荫县| 安徽省| 松阳县| 拜泉县| 石泉县| 普陀区| 定州市| 昆明市| 抚顺市| 瓦房店市| 扎兰屯市| 黄陵县| 三江| 寿宁县| 湘阴县| 资中县| 龙胜| 浦北县| 晋江市| 通河县| 滦平县| 慈利县| 伊川县| 朝阳市| 米脂县| 万载县| 南阳市| 襄垣县| 泰和县| 札达县| 诸城市| 蓬溪县| 嘉峪关市| 汪清县| 澄城县| 安多县| 尼勒克县| 浠水县| 云南省| 岗巴县|