社区
Java
帖子详情
为什么.class不会引起类的初始化
duoyu5555
2015-05-13 01:25:03
如题,有个类是ClassA
为什么Class class_a=ClassA.class;
不会引起ClassA的初始化过程;
而改成Class class_a=Class.forName("package.ClassA");
则会引发初始化过程
...全文
311
7
打赏
收藏
为什么.class不会引起类的初始化
如题,有个类是ClassA 为什么Class class_a=ClassA.class; 不会引起ClassA的初始化过程; 而改成Class class_a=Class.forName("package.ClassA"); 则会引发初始化过程
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
DAVE-BLACK
2019-06-11
打赏
举报
回复
,class可以理解为告诉虚拟机这个类我要用。你赶紧看看有没有类模板供我使用
DAVE-BLACK
2019-06-11
打赏
举报
回复
.class是加载类模板。你可以用类模板.newinstance来构造对象。或者调用带参数的构造方法。详细的话参考反射
DAVE-BLACK
2019-06-11
打赏
举报
回复
.class是加载类模板。你可以用类模板.newinstance来构造对象。或者调用带参数的构造方法。详细的话参考反射
林蜗牛snail
2019-06-11
打赏
举报
回复
.class可能就相当于loadclass()? maybe,这块不是很懂
Leeycw96
2019-06-11
打赏
举报
回复
我个人的理解是:虽然ClassA.class看上去是调用了ClassA的类变量,应当是要初始化ClassA的,也就是要执行<clinit>,但是你可以直接去看.class文件关于这条语句的调用处,会发现该语句对应的指令不是invokestatic 所以这里是不会初始化ClassA,当然肯定是会加载ClassA的;至于Class.forName()为什么会初始化这个类,你可以去看下源码,最终底层会执行forName0()这个方法,而这个方法有个boolean参数initialize,默认为true,initialize就是初始化的意思,这么默认为true,所以是会初始化的,特别的一点是,Class类还提供了一个重载的forName()方法,可以指定boolean initialize,也就意味着你可以输入false,来让这个forName不执行初始化过程
S117
2015-05-13
打赏
举报
回复
这个要去看java虚拟机规范了
zapdos
2015-05-13
打赏
举报
回复
这个问题问的好,不过大概也就是实现问题而已 此外使用classloader来define一个class也是不会进行初始化的 所以我觉得forName其实也没必要初始化,可以留到使用时再初始化,不知道要初始化的原因是什么 等高手解答
类
的
初始化
1 本节要点 简介
类
的
初始化
步骤
类
的
初始化
的六大时机
class
对象获取的方式有哪些?会
不会
引起
初始化
?区别是什么?
类
的实例化都干了什么? 接口的
初始化
时机? 2
类
的
初始化
步骤 假如这个
类
还没有被加载和连接,那就先进行加载和连接。 假如
类
存在直接父
类
,并且这个父
类
还没有被
初始化
,那就先
初始化
直接父
类
。 假如
类
中存在
初始化
语句,那就依次执行这些
初始化
语句。 3
类
的
初始化
的六大时机 1、创建
类
的实例(new xxx
Class
()
Class
.newInstance() constructor.
class
对象及
类
的
初始化
过程
第十四章
类
型信息14.2 加载,链接,
初始化
具体详细 简洁明了 Java字节代码的表现形式是字节数组(byte[]),而Java
类
在JVM中的表现形式是java.lang.
Class
类
的对象。 这三个步骤中,对开发人员直接可见的是Java
类
的加载,通过使用Java
类
加载器(
class
loader)可以在运行时刻动态的加载一个Java
类
;而链接和
初始化
则是在使用Java
类
之前会发生的动作。
java
类
初始化
_Java
类
的
初始化
Java
类
的
初始化
我们知道一个
类
(
class
)要被使用必须经过装载,连接。
初始化
这种过程。以下先对这三阶段做一个简单的描写叙述。之后会结合一个简单的样例来说明java中
类
的
初始化
过程。在装载阶段,
类
装载器(Bootstrap
Class
Loader 或者用户自己定义的
Class
Loader) 把编译形成的
class
文件加载内存。创建
类
相关的
Class
对象,这个
Class
对象封装了我们要使用的
类
的
类
...
深入理解Java对象的创建过程:
类
的
初始化
与实例化
在Java中,一个对象在可以被使用之前必须要被正确地
初始化
,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关
类
型是否已经加载并
初始化
,如果没有,则JVM立即进行加载并调用
类
构造器完成
类
的
初始化
。在
类
初始化
过程中或
初始化
完毕后,根据具体情况才会去对
类
进行实例化。本文试图对JVM执行
类
初始化
和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程。
java 错误.
class
_“错误:预期为'.
class
'”是什么意思,我该如何解决
首先,这是一个编译错误。如果在运行时看到该消息,则可能是正在运行的代码具有编译错误。以下是错误的几个示例:double d = 1.9;int i = int d; // error here^int j = someFunction(int[] a); // error here^在这两种情况下,编译器错误消息均为error: '.
class
' expected。错误消息是什么意思,原因是什...
Java
51,397
社区成员
85,845
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章