java的代码通过编译生成类,也就是.Class文件。
1.java里面任何class都要装载在虚拟机上才能运行,而静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了,而且以后不会再走这段静态代码了。
package cc.openhome;
public class ConsolePlayer implements Player {
@Override
public void play(String video) {
// TODO Auto-generated method stub
System.out.println("zheng zai bo fan"+video);
}
}
package cc.openhome;
/*
* 不知道类的名称,得到class对象然后再newINstance;
* Class clz = Class.forName("Stringname");
* Object obj = clz.newInstance;
* 所谓反射机制;
* 例如:想采用影片链接库来播放,但是制造链接库的人没有,就可以先写个接口放着
*
*/
public interface Player {
void play(String video);
}
package cc.openhome;
/*
* Class.forName()主要功能
Class.forName(xxx.xx.xx)返回的是一个类,
Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
*/
import java.util.Scanner;
public class MediaMaster {
/*
* 执行本类;指定cc.openhome.PlayerImpl = cc.openhome.ConsolePlayer
*/
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
// TODO Auto-generated method stub
String playImpl =System.getProperty("cc.openhome.ConsolePlayer");
Player player = (Player) Class.forName(playImpl).newInstance();
System.out.println("shu ru ni xiang kan d ying pian");
player.play(new Scanner(System.in).nextLine());
}
}
Class.forName(xxx.xx.xx)的作用就是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码段。
而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的 Driver类的代码都必须类似如下:
public class MyJDBCDriver implements Driver {
static {
DriverManager.registerDriver(new MyJDBCDriver());
}
}
2.代码:
3.