`
m635674608
  • 浏览: 5041736 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

jvm 初始化之 <cinit> , <init>

    博客分类:
  • java
 
阅读更多
public class T2{
static{
   System.out.println("-----.static---");
   }
   static T2 t2 = new T2();
   C t =new C();
   static String str = "ff"; 
   
   public T2(){System.out.println("-----...");}
  public static void main(String[] ages){
   String a = "hi";
    String s = "'"+a+"'";
    String ni= T2.str;
   }
}
class C{
 static{System.out.println("----cccccc  static-...");}
}

   这个是test类。下面是字节码

{
static T2 t2;

C t;

static java.lang.String str;

public T2();<init>将相应的变量压入<init>方法中
  Code:
   Stack=3, Locals=1, Args_size=1
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   aload_0
   5:   new     #2; //class C
   8:   dup
   9:   invokespecial   #3; //Method C."<init>":()V
   12:  putfield        #4; //Field t:LC;
   15:  getstatic       #5; //Field java/lang/System.out:Ljava/io/PrintStream;
   18:  ldc     #6; //String -----...
   20:  invokevirtual   #7; //Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
   23:  return
  LineNumberTable:
   line 11: 0
   line 8: 4
   line 11: 15


public static void main(java.lang.String[]);
  Code:
   Stack=2, Locals=4, Args_size=1
   0:   ldc     #8; //String hi
   2:   astore_1
   3:   new     #9; //class java/lang/StringBuilder
   6:   dup
   7:   invokespecial   #10; //Method java/lang/StringBuilder."<init>":()V
   10:  ldc     #11; //String '
   12:  invokevirtual   #12; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   15:  aload_1
   16:  invokevirtual   #12; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   19:  ldc     #11; //String '
   21:  invokevirtual   #12; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   24:  invokevirtual   #13; //Method java/lang/StringBuilder.toString:()Ljava/l
ang/String;
   27:  astore_2
   28:  getstatic       #14; //Field str:Ljava/lang/String;
   31:  astore_3
   32:  return
  LineNumberTable:
   line 13: 0
   line 14: 3
   line 15: 28
   line 16: 32


static {};
  Code:
   Stack=2, Locals=0, Args_size=0
   0:   getstatic       #5; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:   ldc     #15; //String -----.static---
   5:   invokevirtual   #7; //Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
   8:   new     #16; //class T2
   11:  dup
   12:  invokespecial   #17; //Method "<init>":()V//调了T2<init>方法
   15:  putstatic       #18; //Field t2:LT2;
   18:  ldc     #19; //String ff
   20:  putstatic       #14; //Field str:Ljava/lang/String;
   23:  return
  LineNumberTable:
   line 5: 0
   line 7: 8
   line 9: 18


}

没注释static T2 t2 = new T2();//调了T2<init>方法
结果:-----.static---
----cccccc  static-...
-----...

{
C t;

static java.lang.String str;

public T2();<init>将相应的变量压入<init>方法中
  Code:
   Stack=3, Locals=1, Args_size=1
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   aload_0
   5:   new     #2; //class C
   8:   dup
   9:   invokespecial   #3; //Method C."<init>":()V
   12:  putfield        #4; //Field t:LC;
   15:  getstatic       #5; //Field java/lang/System.out:Ljava/io/PrintStream;
   18:  ldc     #6; //String -----...
   20:  invokevirtual   #7; //Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
   23:  return
  LineNumberTable:
   line 11: 0
   line 8: 4
   line 11: 15


public static void main(java.lang.String[]);
  Code:
   Stack=2, Locals=4, Args_size=1
   0:   ldc     #8; //String hi
   2:   astore_1
   3:   new     #9; //class java/lang/StringBuilder
   6:   dup
   7:   invokespecial   #10; //Method java/lang/StringBuilder."<init>":()V
   10:  ldc     #11; //String '
   12:  invokevirtual   #12; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   15:  aload_1
   16:  invokevirtual   #12; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   19:  ldc     #11; //String '
   21:  invokevirtual   #12; //Method java/lang/StringBuilder.append:(Ljava/lang
/String;)Ljava/lang/StringBuilder;
   24:  invokevirtual   #13; //Method java/lang/StringBuilder.toString:()Ljava/l
ang/String;
   27:  astore_2
   28:  getstatic       #14; //Field str:Ljava/lang/String;
   31:  astore_3
   32:  return
  LineNumberTable:
   line 13: 0
   line 14: 3
   line 15: 28
   line 16: 32


static {};
  Code:
   Stack=2, Locals=0, Args_size=0
   0:   getstatic       #5; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:   ldc     #15; //String -----.static---
   5:   invokevirtual   #7; //Method java/io/PrintStream.println:(Ljava/lang/Str
ing;)V
   8:   ldc     #16; //String ff
   10:  putstatic       #14; //Field str:Ljava/lang/String;
   13:  return
  LineNumberTable:
   line 5: 0
   line 9: 8


}


注释static T2 t2 = new T2(); 没有t2的<init>方法
结果:-----.static---

 

总结:当一个类初始化的时候,先调用<cinit>方法 ,如果在<cinit>方法中遇到<init>方法。则先调用完<init>方法。然后在继续执行<cinit>

分享到:
评论

相关推荐

    tomcat 启动:Address already in use: JVM_Bind <null>:8080

    然而,在启动 Tomcat 时,偶尔会遇到报错“Address already in use: JVM_Bind &lt;null&gt;:8080”,这意味着端口 8080 已经被占用。 为什么会出现这种情况?这通常是因为某个进程已经占用了端口 8080,阻止了 Tomcat 的...

    java.net.BindException: Address already in use: JVM_Bind :8088(端口冲突)

    在myeclipse中将html文件改成jsp文件时myeclipse卡住;将之前的任务关掉;再打开时多次部署项目的时候报错

    深入Java初始化.pdf

    Java初始化涉及类的静态和实例初始化,通过JVM内部的`&lt;clinit&gt;`和`&lt;init&gt;`方法实现。理解这两个方法的工作原理可以帮助开发者更好地掌握Java程序的生命周期管理,尤其是在处理静态变量、初始化块以及异常处理时。...

    Jive资料集

    系统设计&lt;br&gt; 1 jive设计思路 &lt;br&gt; 2 jive的工作内幕 &lt;br&gt; 3 Jive源代码研究 &lt;br&gt; 4 Jive中的设计模式 &lt;br&gt; 5 jive学习...2 RetroGuard的使用方法 &lt;br&gt;&lt;br&gt; JVM&lt;br&gt; 1 JVM之class文件结构 &lt;br&gt; 2 JVM 內的資料處理 &lt;br&gt;

    jive.chm

    &lt;br&gt;&lt;br&gt; 反编译&lt;br&gt; 1 反编译常用工具 &lt;br&gt;&lt;br&gt; 混淆&lt;br&gt; 1 Sun公司的混淆器JADE &lt;br&gt; 2 RetroGuard的使用方法 &lt;br&gt;&lt;br&gt; JVM&lt;br&gt; 1 JVM之class文件结构 &lt;br&gt; 2 JVM 內的資料處理 &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;MVC Framework...

    java反编译工具jad 1.5.8g(可以反编译jdk1.5,1.6)

    List of the command-line options.&lt;br&gt;&lt;br&gt;Jad accepts the following options:&lt;br&gt;&lt;br&gt; -a - annotate the output with JVM bytecodes (default: off)&lt;br&gt; -af - same as -a, but output fully qualified names ...

    aspectwerkz包

    &lt;options&gt; [-cp &lt;classpath&gt;]* &lt;target to transform&gt;+&lt;br&gt;&lt;br&gt; options (optional) standard JVM options, e.g. -cp or -D...&lt;br&gt; &lt;main class&gt; class to execute&lt;br&gt; -jar &lt;jar file&gt; jar file to execute&lt;br&gt; ...

    AIC的Java课程1-6章

    &lt;br&gt;第3章 面向过程(数组和方法) 4课时&lt;br&gt; 理解如何声明数组、构造数组、初始化数组以及使用数组中的各个元素。&lt;br&gt; 清楚数组作为对象处理,创建数组对象时指定数组大小。&lt;br&gt; 能够声明和操作多维数组...

    Java学习题答案

    &lt;br&gt; }&lt;br&gt;}&lt;br&gt;}&lt;br&gt;本题在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,&lt;br&gt;两个x都匹配,就象在同时import java.util和java.sql两个包时直接声明Date一样)&lt;br&gt;本题主要考察对接口和类的...

    JSTL详细标签库介绍

    &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt; &lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;关于java异常处理(讲义)--JSP中文网&lt;/TITLE&gt; &lt;META content="text/html; charset=gb2312" ...初始化对象方法init()&lt;BR&gt;B...

    groovy java maven 混合编程1

    &lt;groupId&gt;org.codehaus.gmavenplus&lt;/groupId&gt; &lt;artifactId&gt;gmavenplus-plugin&lt;/artifactId&gt; &lt;version&gt;1.7.1&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;goals&gt; &lt;goal&gt;addSources&lt;/goal&gt; &lt;goal&gt;addTestSources&lt;/...

    NutzBoot的maven插件

    &lt;groupId&gt;org.nutz.boot&lt;/groupId&gt; &lt;artifactId&gt;nutzboot-maven-plugin&lt;/artifactId&gt; &lt;version&gt;${nutzboot.version}&lt;/version&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt; 打包jar文件 mvn clean package nutzboot:shade ...

    JavaClass二进制文件加密专家

    &lt;br&gt;&lt;br&gt; 使用方法&lt;br&gt; 在要分发您的Java应用程序前,使用JavaClass文件加密专家对所有的Class文件或Jar文件进行加密,在您的系统运行参&lt;br&gt;数中加入以下内容:&lt;br&gt; 1.WEB应用程序&lt;br&gt; 在您使用的Java Web Server的...

    基于maven的scala与java相互调用的简单实例

    &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt; &lt;version&gt;3.8.1&lt;/version&gt; &lt;configuration&gt; &lt;source&gt;1.8&lt;/source&gt; &lt;target&gt;1.8&lt;/target&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;plugin&gt; &lt;groupId&gt;...

    Hadoop_Hbase集群安装部署手册

    &lt;value&gt;hdfs://master:9000&lt;/value&gt; &lt;/property&gt; &lt;property&gt; &lt;name&gt;hadoop.tmp.dir&lt;/name&gt; &lt;value&gt;/data/hadoop/tmp&lt;/value&gt; &lt;/property&gt; ``` - `hdfs-site.xml`: 配置HDFS的相关参数,如副本数量和名称节点...

    Ubuntu_Hadoop分布部署.docx

    &lt;value&gt;$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*&lt;/value&gt; &lt;/property&gt; &lt;/configuration&gt; 5. 配置`yarn-site.xml`文件。在`yarn-site.xml`文件中,添加...

    第三方服务接入到注册中心的几种方式

    &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-starter-eureka&lt;/artifactId&gt; &lt;/dependency&gt; ``` ...

    scala和java混合编译

    &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt; &lt;version&gt;3.8.1&lt;/version&gt; &lt;configuration&gt; &lt;source&gt;1.8&lt;/source&gt; &lt;target&gt;1.8&lt;/target&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt; ``` 对于Scala...

Global site tag (gtag.js) - Google Analytics