关于类的实例化,不用弄的那么细致,这里只说单一类,没有其他父类(排除Obejct)的情况。
要实例化一个类,需要加载class文件到jvm并且验证通过了是安全的字节码文件。

初始化大致上是按照如下步骤:

1.按代码从上到下的顺序进行的实例化操作
2.静态变量和静态代码块是同一优先级,在类加载的时候就会执行,哪怕没有实例化对象(就是包含main函数的类)也会执行,且只执行一次
----------------------实例化与否分界线--------------------------------------------------------------------------
3.实例化类的时候,普通代码块和普通变量赋值是同一优先级,按在代码中出现的顺序进行初始化,每次实例化对象都会执行
-----------------------其他分割线-----------------------------------------------------------------------------
4.嵌套类只有在用到的时候才会被加载到jvm,被加载之后才会按照静态变量/静态代码块相同优先级被初始化
5.内部类只有在用到的时候才会被加载,内部类没有静态代码块~


import java.util.Random;

public class ClassInitTest {

    private int a = getIntNormal();
private static int b = getIntStatic(); {
System.out.println("普通代码块1" + new Random().nextInt());
} static {
System.out.println("静态代码块代码块1" + new Random().nextInt());
} class Inner{
{
System.out.println("Inner class............");
}
} private static int c = getIntStatic(); static {
System.out.println("静态代码块代码块2" + new Random().nextInt());
} private int d = getIntNormal(); {
System.out.println("普通代码块2" + new Random().nextInt());
} private static int getIntStatic() {
System.out.println("hello getIntStatic()");
return new Random().nextInt();
} private int getIntNormal() {
System.out.println("hello getIntNormal()");
return new Random().nextInt();
} public static void main(String[] args) { System.out.println("\n\nmain方法执行,接下来main睡5秒后开始创建实例\n\n"); try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
} new ClassInitTest();
new ClassInitTest(); }
}

java#类的实例化顺序的更多相关文章

  1. java类的实例化顺序

    1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行 4 ...

  2. Java的类的实例化顺序

    Java的类的实例化顺序 父类的静态数据 子类的静态数据 父类的成员变量 父类的构造方法 子类的成员变量 子类的构造方法

  3. 图示Java类的初始化顺序

    Java类的初始化顺序   在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行.   以下为代码验证阶段,一共三个类 ...

  4. 创建java类并实例化类对象

    创建java类并实例化类对象例一1.面向对象的编程关注于类的设计2.设计类实际上就是设计类的成员3.基本的类的成员,属性(成员变量)&方法 面向对象思想的落地法则一:1.设计类,并设计类的成员 ...

  5. Java类的实例化的初始化过程

    A a = new A(); new 创建对象过程: 1.类加载     代码验证 2.给对象在内存(堆)中分配空间(给属性赋值): 3.属性赋默认值: byte,short.int,long -&g ...

  6. Java类的初始化顺序 (静态变量、静态初始化块、变量、初始...

    很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...

  7. java类的初始化顺序

    在java中,当我们new一个对象时,对象中的成员,初始化块以及构造方法的加载是有一定的顺序的,看下面一副图: 一.单类(无基类)下的初始化顺序: public class Parent { stat ...

  8. 创建Java类并实例化深入理解

    package com.sanguosha.java; import java.util.Scanner;//导入包 public class TestPerson { public static v ...

  9. 创建Java类并实例化的基本过程

    package com.sanguosha.java; /* * 面向对象实现的过程 * 1.创建类并设计类的成员(成员变量即属性and成员方法即方法) * 2.通过类来创建类的对象,也称类的实例化 ...

随机推荐

  1. Linux运维工程师简历项目经验

    如何做好一个合格的运工程师,运维工程师前景怎么样呢?就这些问题,与大家交流一下.首先对于运维工程师的要求是十分严苛的了,运维工程师不但要针对不同的问题做出响应,而且需要不断的补充自己的知识面,并不继提 ...

  2. C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...

  3. Windows API 常用函数---转载

    Windows API 常用函数 2014-10-15 14:21  xiashengwang  阅读(2105)  评论(0)  编辑  收藏 .Net中虽然类库很强的,但还是有些时候功能有限,掌握 ...

  4. ajax Ajax处理下载文件response没有反应

    参考:https://blog.csdn.net/wf632856695/article/details/52040034

  5. 微信小程序(基础)

    文档官网:https://developers.weixin.qq.com/miniprogram https://developers.weixin.qq.com/miniprogram/dev/f ...

  6. Spark教程——(6)Spark-shell基于Phoenix访问HBase数据

    package statistics import common.util.timeUtil import org.apache.spark.{SparkConf, SparkContext} imp ...

  7. kafka-console-consumer接收不到flume推送过来的消息

    原因和解决方法:需要先启动kafka,再启动flume,两者启动有先后顺序.

  8. emWin 模拟器环境搭建

    转载http://www.nxpic.org/module/forum/thread-609329-1-1.html 这个模拟器工程在Segger官网下载:https://www.segger.com ...

  9. CentOS 下 安装 nginx 执行配置命令 ./configure 报错

    CentOS 下 安装 nginx 执行配置命令 ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx 时提示以下错误: checkin ...

  10. 报错信息 Context []startup failed due to previous errors

    文章转自:http://blog.sina.com.cn/s/blog_49b4a1f10100q93e.html 框架搭建好后,启动服务器出现如下的信息: log4j:WARN No appende ...