`
m635674608
  • 浏览: 4937153 次
  • 性别: 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

    今天开机发布程序,启动项目,竟然报错说8080端口被占用,没关系 只要是把占用这个端口的进程杀掉即可

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

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

    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...

    resin 优化

    &lt;jvm-arg&gt;-Xms512m&lt;/jvm-arg&gt; &lt;jvm-arg&gt;-Xss128k&lt;/jvm-arg&gt; &lt;jvm-arg&gt;-Xmn184m&lt;/jvm-arg&gt; &lt;jvm-arg&gt;-XX:ParallelGCThreads=20&lt;/jvm-arg&gt; &lt;jvm-arg&gt;-XX:+UseConcMarkSweepGC&lt;/jvm-arg&gt; &lt;jvm-arg&gt;-XX:+UseParNewGC&lt;/...

    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; ...

    tomcat-5.5.23

    temp - Directory used by the JVM for temporary files (java.io.tmpdir)&lt;br&gt;&lt;br&gt;If you do not pass the "-Dcatalina.base=$CATALINA_BASE" argument to the&lt;br&gt;startup command, $CATALINA_BASE will default to ...

    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...

    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的...

    Eclipse 启动运行速度调优

    &lt;br&gt;运行参数如下:&lt;br&gt;eclipse.exe -vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=20M &lt;br&gt;&lt;br&gt;-------------- &lt;br&gt;&lt;br&gt;JVM 提供了各种用于调整内存分配和垃圾回收行为的标准开关和非标准...

    Windows服务启动调用Java App --附vc6源码

    install &lt;ServerName&gt;&lt;ShowName&gt;&lt;JarName&gt;[&lt;JVM&gt;] remove: service remove remove &lt;ServerName&gt; Example: -install -ServerName JNISvr -ShowName "JNI服务" -JarName App.jar -JVM "-Xms64m -Xmx256m\" -...

    xgboost windows依赖jar包 用于 spark等计算

    &lt;groupId&gt;ml.dmlc&lt;/groupId&gt; &lt;artifactId&gt;xgboost4j-spark&lt;/artifactId&gt; &lt;!--windows使用0.81-SNAPSHOT版本--&gt; &lt;!--version&gt;0.80&lt;/version--&gt; &lt;version&gt;0.81-SNAPSHOT&lt;/version&gt; &lt;/dependency&gt; ...

    java 6 jvm 参数选项大全

    Java 6 JVM 参数选项大全(中文版) ...-XX:&lt;option&gt;=&lt;number&gt;给选项设置一个数字类型值,可跟单位,例如32k,1024m,2g -XX:&lt;option&gt;=&lt;string&gt;给选项设置一个字符串值,例如 -XX:HeapDumpPath=./dump.core

    jad 最新版java反编译

    -l&lt;num&gt; - split strings into pieces of max &lt;num&gt; chars (splitstr) -lnc - output original line numbers as comments (lnc) -lradix&lt;num&gt;- display long integers using the specified radix -nl - split ...

    micrometer-jvm-extras:一组用于micrometer.io的其他JVM流程指标

    从JVM内部获取该信息用法&lt; dependency&gt; &lt; groupId&gt;io.github.mweirauch&lt;/ groupId&gt; &lt; artifactId&gt;micrometer-jvm-extras&lt;/ artifactId&gt; &lt; version&gt;x.y.z&lt;/ version&gt;&lt;/ dependency&gt; /* Plain Java */ final ...

Global site tag (gtag.js) - Google Analytics