今天在看深入Java虚拟机的class文件结构时,看到了这么一句话,
可能出现在class文件中的两种编译器产生的方法是:实例初始化方法(名为<init>)和类与接口初始化方法(名为<clinit>)。
这两种方法有什么区别呢?
首先:这两个方法一个是虚拟机在装载一个类初始化的时候调用的(clinit)。另一个是在类实例化时调用的(init)
首先说说类的初始化:
在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化语句给出的。一个类变量初始化语句是
变量声明后的等号和表达式:
class Example {
static int size = 3 * (int) (Math.random() * 5.0);
}
静态初始化语句是一个以static开头的语句块:
class Example{
static int size;
static {
size = 3 * (int) (Math.random() * 5.0);
}
}
所有的类变量初始化语句和类型的静态初始化语句都被Java编译器收集到了一起,放在一个特殊的方法中。这个方法就是<clinit>
我们在来看看<init>这个方法:
<init>方法是在一个类进行对象实例化时调用的。实例化一个类有四种途径:调用new操作符;调用Class或java.lang.reflect.Constructor对象的newInstance()方法;调用任何现有对象的clone()方法;通过java.io.ObjectInputStream类的getObject()方法反序列化。
Java编译器会为它的每一个类都至少生成一个实例初始化方法。在Class文件中,被称为"<init>"
现在知道了吧, 一个是用于初始化静态的类变量, 一个是初始化实例变量!
分享到:
相关推荐
at com.semaphore.jna.md.MDLibrary.<clinit>(MDLibrary.java:39) at com.semaphore.jna.idevice.win.WinDeviceLibrary.addNotificationHandler(WinDeviceLibrary.java:61) at ...
Cage 是一个 Java 实现的验证码图片生成库,快速、小型和简单。 示例代码: public class QuickStart { ... <artifactId>cage</artifactId> <version>1.0</version> </dependency> 标签:Cage
at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.<clinit>(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) ...
Java客户端 这是用于编写Appium测试的Java语言绑定,符合 功能和其他有趣的信息 ... < id>jitpack.io</ id> < url>https://jitpack.io</ url> </ repository> </ repositories> 添加依赖项: < depe
内容概要:首先带着读者安装MinIO,并帮助读者通过 Spring Boot 框架一步步完成 MinIO 集成,快速上手分布式对象存储系统。在手写MinIO 工具类的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能...
本人使用sts3.5、hadoop2.6.0连linux下的伪分布式环境 已测试通过 1、解压后winutils.exe放C:\Windows\System32目录下 另两个文件放windows开发机上hadoop2.6.0的bin目录下
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:386) at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:79) at org.apache.hadoop.security.Groups.parseStaticMapping(Groups.java:116)
at MsWordEdit.<init>(MsWordEdit.java:25) at MsWordEdit.main(MsWordEdit.java:642) 如果不清楚java.library.path,输出一下即可。代码如下 System.out.println(System.getProperty("java.library.path"));
网络工具类
JDBC连接池 原子性:最小的单元,如果一个是失败了,则一切的操作将全部失败。 一致性:如果事务出现错误,则回到最原始的状态 隔离性:多个事务之间无法访问,只有当事务完成后才可以看到结果 ...
下面小编就为大家带来一篇详谈jvm--Java中init和clinit的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
| <clinit> | ()V | 2013/6/13 8:38:46 | Exit Lcom/xxx/cc/test/Mtrace; | <clinit> | ()V | 2013/6/13 8:38:46 | CALL Lcom/xxx/cc/test/Mtrace; | ...
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:516) Exception in thread "main" java.lang.UnsatisfiedLinkError:''boolean org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(java.lang.String...
2020-11-27 11:26:11|localhost-startStop-1|INFO |com.mchange.v2.log.MLog,80,<clinit>|-> MLog clients using log4j logging. 2020-11-27 11:26:11|localhost-startStop-1|INFO |...
背景图全茶杯多少钱只关注在.class件中,静态初始化法的名字是<clinit>,它表示class initialization method的缩写。标编码实现
如果遇到java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.springframework.web.servlet.DispatcherServlet.<clinit>就下载这个包。就可以解决了。
java俄罗斯方块源码 高软大作业:俄罗斯方块游戏的Java实现, 源文件在压缩包中的src文件夹中;使用MVC模式编写; 如果不能直接运行,请重新编译源代码;
util.Shell (Shell.java:<clinit>(694)) - Did not find winutils.exe: {} java.io.FileNotFoundException: Could not locate Hadoop executable: E:\hadoop-3.0.2\bin\winutils.exe -see ...
util.Shell (Shell.java:<clinit>(694)) - Did not find winutils.exe: {} java.io.FileNotFoundException: Could not locate Hadoop executable: E:\hadoop-3.0.2\bin\winutils.exe -see ...
clinit-cfn-工具Cloudinit 注入/提取到/从 AWS CloudFormation。 创建此工具的动机是使用与 CloudInit 用户数据文件集成的 CloudFormation 的非常烦人/困难的工作方式。 AWS CloudFormation 使用 JSON 格式,而 ...