打字猴:1.700447882e+09
1700447882
1700447883 }
1700447884
1700447885 }
1700447886
1700447887 注意看Client类,我们并没有对Utils做任何初始化,只是通过forName方法加载了Utils类,但是却产生了一个“Do Something”的输出,这就是因为Utils类被加载后,JVM会自动初始化其static变量和static代码块,这是类加载机制所决定的。
1700447888
1700447889 对于此种动态加载,最经典的应用就是数据库驱动程序的加载片段,代码如下:
1700447890
1700447891 //加载驱动
1700447892
1700447893 Class.forName(“com.mysql.jdbc.Driver”);
1700447894
1700447895 String url=“jdbc:mysql://localhost:3306/db?user=&password=”;
1700447896
1700447897 Connection conn=DriverManager.getConnection(url);
1700447898
1700447899 Statement stmt=conn.createStatement();
1700447900
1700447901 ……
1700447902
1700447903 在没有Hibernate和Ibatis等ORM框架的情况下,基本上每个系统都会有这么一个JDBC连接类,然后提供诸如Query、Delete等的方法,大家有没有想过为什么要加上forName这句话呢?没有任何的输出呀,要它干什么用呢?事实上非常有用,我们看一下Driver类的源码:
1700447904
1700447905 public class Driver extends NonRegisteringDriver implements java.sql.Driver{
1700447906
1700447907 //静态代码块
1700447908
1700447909 static{
1700447910
1700447911 try{
1700447912
1700447913 //把自己注册到DriverManager中
1700447914
1700447915 java.sql.DriverManager.registerDriver(new Driver());
1700447916
1700447917 }catch(SQLException E){
1700447918
1700447919 //异常处理
1700447920
1700447921 }
1700447922
1700447923 }
1700447924
1700447925 //构造函数
1700447926
1700447927 public Driver()throws SQLException{
1700447928
1700447929 }
1700447930
1700447931 }
[ 上一页 ]  [ :1.700447882e+09 ]  [ 下一页 ]