`
freesoftman
  • 浏览: 314443 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

<init>与<clinit>的区别

阅读更多

今天在看深入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>"

 

现在知道了吧, 一个是用于初始化静态的类变量, 一个是初始化实例变量!

分享到:
评论
1 楼 浪客剑心 2009-12-10  
谢谢啦 帮忙啦!!!

相关推荐

    apple越狱备份数据

    at com.semaphore.jna.md.MDLibrary.&lt;clinit&gt;(MDLibrary.java:39) at com.semaphore.jna.idevice.win.WinDeviceLibrary.addNotificationHandler(WinDeviceLibrary.java:61) at ...

    Java验证码Cage.zip

    Cage 是一个 Java 实现的验证码图片生成库,快速、小型和简单。 示例代码: public class QuickStart { ... &lt;artifactId&gt;cage&lt;/artifactId&gt;  &lt;version&gt;1.0&lt;/version&gt; &lt;/dependency&gt; 标签:Cage

    android 使用poi读取高版本excel

    at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.&lt;clinit&gt;(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) ...

    java-client:用于编写Appium测试的Java语言绑定,符合Mobile JSON Wire&W3C Webdriver Protocol

    Java客户端 这是用于编写Appium测试的Java语言绑定,符合 功能和其他有趣的信息 ... &lt; id&gt;jitpack.io&lt;/ id&gt; &lt; url&gt;https://jitpack.io&lt;/ url&gt; &lt;/ repository&gt; &lt;/ repositories&gt; 添加依赖项: &lt; depe

    Spring Boot 集成 MinIO(分布式对象存储系统)

    内容概要:首先带着读者安装MinIO,并帮助读者通过 Spring Boot 框架一步步完成 MinIO 集成,快速上手分布式对象存储系统。在手写MinIO 工具类的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能...

    hadoop2.6(hadoop.dll和winutils.exe)

    本人使用sts3.5、hadoop2.6.0连linux下的伪分布式环境 已测试通过 1、解压后winutils.exe放C:\Windows\System32目录下 另两个文件放windows开发机上hadoop2.6.0的bin目录下

    Hadoop2.6.0_win64_dll_winutils.exe

    at org.apache.hadoop.util.Shell.&lt;clinit&gt;(Shell.java:386) at org.apache.hadoop.util.StringUtils.&lt;clinit&gt;(StringUtils.java:79) at org.apache.hadoop.security.Groups.parseStaticMapping(Groups.java:116)

    jacob.jar1.19及使用方法

    at MsWordEdit.&lt;init&gt;(MsWordEdit.java:25) at MsWordEdit.main(MsWordEdit.java:642) 如果不清楚java.library.path,输出一下即可。代码如下 System.out.println(System.getProperty("java.library.path"));

    NetUtils.java

    网络工具类

    JDBCPool.java

    JDBC连接池 原子性:最小的单元,如果一个是失败了,则一切的操作将全部失败。 一致性:如果事务出现错误,则回到最原始的状态 隔离性:多个事务之间无法访问,只有当事务完成后才可以看到结果 ...

    详谈jvm--Java中init和clinit的区别

    下面小编就为大家带来一篇详谈jvm--Java中init和clinit的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JVMTI输出日志例子

    | &lt;clinit&gt; | ()V | 2013/6/13 8:38:46 | Exit Lcom/xxx/cc/test/Mtrace; | &lt;clinit&gt; | ()V | 2013/6/13 8:38:46 | CALL Lcom/xxx/cc/test/Mtrace; | ...

    window 本地执行 hadoop 缺失的hadoop.dll 和 winutils.exe 文件

    at org.apache.hadoop.util.Shell.&lt;clinit&gt;(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,&lt;clinit&gt;|-&gt; MLog clients using log4j logging. 2020-11-27 11:26:11|localhost-startStop-1|INFO |...

    17 - MethodVisitor生成静态方法 - 简书1

    背景图全茶杯多少钱只关注在.class件中,静态初始化法的名字是&lt;clinit&gt;,它表示class initialization method的缩写。标编码实现

    commons-logging.jar

    如果遇到java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.springframework.web.servlet.DispatcherServlet.&lt;clinit&gt;就下载这个包。就可以解决了。

    java俄罗斯方块源码-TetrisDemo:俄罗斯方块演示

    java俄罗斯方块源码 高软大作业:俄罗斯方块游戏的Java实现, 源文件在压缩包中的src文件夹中;使用MVC模式编写; 如果不能直接运行,请重新编译源代码;

    hadoop-3.0.0 win工具包 hadoop.dll winutils.exe

    util.Shell (Shell.java:&lt;clinit&gt;(694)) - Did not find winutils.exe: {} java.io.FileNotFoundException: Could not locate Hadoop executable: E:\hadoop-3.0.2\bin\winutils.exe -see ...

    hadoop-2.6.0 win工具包 hadoop.dll winutils.exe

    util.Shell (Shell.java:&lt;clinit&gt;(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-tool:Cloudinit 从 AWS CloudFormation 注入提取物

    clinit-cfn-工具Cloudinit 注入/提取到/从 AWS CloudFormation。 创建此工具的动机是使用与 CloudInit 用户数据文件集成的 CloudFormation 的非常烦人/困难的工作方式。 AWS CloudFormation 使用 JSON 格式,而 ...

Global site tag (gtag.js) - Google Analytics