前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java类的加载方式、类的初始化、类的执行方式

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

作者头像
葆宁
发布2019-04-18 16:16:08
1.2K0
发布2019-04-18 16:16:08
举报
文章被收录于专栏:FREE SOLOFREE SOLO

类加载器(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()方法的区别:

代码语言:javascript
复制
newInstance:弱类型,低效率,只能调用无参构造;
new:强类型,相对高效,能调用任何Public构造。

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

代码语言:javascript
复制
1 初始化,也就是new时候会初始化类

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

3 调用类的静态方法

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

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

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

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

代码语言:javascript
复制
1 system.exit();

2 正常执行完毕;

3 程序运行错误,报错

4 系统出现问题,虚拟机停止运行;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档