java#类的实例化顺序
关于类的实例化,不用弄的那么细致,这里只说单一类,没有其他父类(排除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#类的实例化顺序的更多相关文章
- java类的实例化顺序
1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行 4 ...
- Java的类的实例化顺序
Java的类的实例化顺序 父类的静态数据 子类的静态数据 父类的成员变量 父类的构造方法 子类的成员变量 子类的构造方法
- 图示Java类的初始化顺序
Java类的初始化顺序 在开发中,知道Java类的初始化顺序才能让我们更加清楚地掌握程序的执行流程.先把结论贴出来,Java里,从图里的1~6,分别按顺序执行. 以下为代码验证阶段,一共三个类 ...
- 创建java类并实例化类对象
创建java类并实例化类对象例一1.面向对象的编程关注于类的设计2.设计类实际上就是设计类的成员3.基本的类的成员,属性(成员变量)&方法 面向对象思想的落地法则一:1.设计类,并设计类的成员 ...
- Java类的实例化的初始化过程
A a = new A(); new 创建对象过程: 1.类加载 代码验证 2.给对象在内存(堆)中分配空间(给属性赋值): 3.属性赋默认值: byte,short.int,long -&g ...
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始...
很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...
- java类的初始化顺序
在java中,当我们new一个对象时,对象中的成员,初始化块以及构造方法的加载是有一定的顺序的,看下面一副图: 一.单类(无基类)下的初始化顺序: public class Parent { stat ...
- 创建Java类并实例化深入理解
package com.sanguosha.java; import java.util.Scanner;//导入包 public class TestPerson { public static v ...
- 创建Java类并实例化的基本过程
package com.sanguosha.java; /* * 面向对象实现的过程 * 1.创建类并设计类的成员(成员变量即属性and成员方法即方法) * 2.通过类来创建类的对象,也称类的实例化 ...
随机推荐
- 前端学习 之 JavaScript基础
一. JavaScript简介 1. JavaScript的历史背景介绍 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版.这是历史上第一个比较成熟的网络浏览器,轰动一时 ...
- VS误删sln项目文件怎么办
以项目名为Test为例 打开Test/Test目录下的 Test.vcxproj 文件,试着运行一下,退出后提示保存sln文件,选择一个目录即可.
- 电影推荐算法---HHR计划
1,先看FM部分. 2,看看冷启动. 0,热门召回源. 1,男女召回源,年龄召回源,职业召回源,score最高. 2,男女年龄职业相互组合: 3,存入redis.天级别更新. 3,召回+排序先搞懂. ...
- 九 AOP的概述
AOP : 面向切面编程,解决OOP(面向对象编程)开发遇到的问题,是oop的延伸和扩展 AOP的优点:不修改源码的情况下,对程序进行校验,日志记录,性能控制,事务控制 SpringAOP底层的实现原 ...
- ApacheDbUtilsTest
ApacheDbUtilsTest package p1; import com.DataSourceUtil; import entity.Student; import org.apache.co ...
- Linux CentOS7 VMware 安装PHP5 、安装PHP7
一.安装PHP5 PHP官网www.php.net 当前主流版本为5.6/7.1 cd /usr/local/src/ wget http://cn2.php.net/distributions/ph ...
- OBST(最优二叉搜索树)
简述一下问题:假设有一颗词典二叉树,我们从中查找需要的单词,使用红黑树或平衡树这样的数据结构总是可以在O(lgN)时间内进行查找,但单词的出现频率是不同的,我们给每个单词加上一个搜索概率,然后通过这些 ...
- Windows的本地时间(LocalTime)、系统时间(SystemTime)、格林威治时间(UTC-Time)、文件时间(FileTime)之间的转换
今天处理了一个Bug,创建历史数据时脚本函数的起始时间不赋值或者赋0值时,计算引擎推给历史库的UTC时间为-288000000000,一开始以为是bug,经过分析后发现不赋值默认给起始时间赋0值,而此 ...
- 手搓SSM
相关资料,网上的资料很多,但是文章看不懂,看别人写好的代码比较好理解 ssm-example mysssm 整个流程和原理 一个入口类,入口类需要在tomcat启动的时候执行 通过扫描文件加把文件取出 ...
- springcloud-zuul进阶篇
一 前言 经过zuul初级篇(博客或者公主号springcloud专栏可以找到)的学习,读者都懂得如何简单的使用zuul进行路由网关配置,在进阶篇中你将获得zuul核心功能过滤器的基本使用,通过zuu ...