Java类的加载方式、类的初始化、类的执行方式

类加载器(ClassLoader),顾名思义,即加载类的东西。

在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘、网络或其他来源加载到内存中,并对字节码进行解析生成对应的Class对象,这就是类加载器的功能。我们可以利用类加载器,实现类的动态加载。

class的装载包括3个步骤:加载(loading),连接(link),初始化(initialize)

1、由new关键字创建一个类的实例
在由运行时刻用 new 方法载入
例:Person person = new Person();
2、使用Class.forName()
通过反射加载类型,并创建对象实例
例:Class clazz = Class.forName(“Person”);
Object person =clazz.newInstance();
3、使用某个ClassLoader实例的loadClass()方法
通过该 ClassLoader 实例的 loadClass() 方法载入。应用程序可以通过继承 ClassLoader 实现自己的类装载器。
例:Class clazz = classLoader.loadClass(“Person”);
Object person =clazz.newInstance();

区别:

1和2使用的类加载器是相同的,都是当前类加载器(即:this.getClass.getClassLoader)。
3由用户指定类加载器。如果需要在当前类路径以外寻找类,则只能采用第3种方式。即第3种方式加载的类与当前类分属不同的命名空间。

1是静态加载、2、3是动态加载

异常(exception)

静态加载的时候如果在运行环境中找不到要初始化的类,抛出的是NoClassDefFoundError,它在JAVA的异常体系中是一个Error;

动态态加载的时候如果在运行环境中找不到要初始化的类,抛出的是ClassNotFoundException,它在JAVA的异常体系中是一个checked异常。

从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用Class对象的newInstance()方法的时候,就必须保证:1.这个类已经加载;2.这个类已经连接了。

new关键字和newInstance()方法的区别:

newInstance:弱类型,低效率,只能调用无参构造;
new:强类型,相对高效,能调用任何Public构造。

初始化:只有在使用时类才会被初始化。

1 初始化,也就是new时候会初始化类

2 访问类或者接口中的静态变量或者对其赋值

3 调用类的静态方法

4 反射(Class.forName("com.geminno");)

5 初始化它的子类,父类也会初始化

6 虚拟机启动时被标明是启动类的类(java Test),直接用java.exe运行某个类;

程序执行结束的几种方式:

1 system.exit();

2 正常执行完毕;

3 程序运行错误,报错

4 系统出现问题,虚拟机停止运行;
全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务