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.通过类来创建类的对象,也称类的实例化 ...
随机推荐
- Nessus忘记用户名和密码
以管理员身份运行cmd,切换到Nessus的安装目录,执行以下操作.
- php 随机生成汉字
function getChar($num) // $num为生成汉字的数量 { $b = ''; for ($i=0; $i<$num; $i++) { // 使用chr()函数拼接双字节汉字 ...
- UDP通讯代码
UDP客户端代码: import socket # 创建套接字 socket.AF_INET:IPV4 socket.SOCK_DGRAM:UDP协议 udp_client=socket.socket ...
- UITextField的快速基本使用代码块
概述 UITextField在界面中显示可编辑文本区域的对象. 您可以使用文本字段来使用屏幕键盘从用户收集基于文本的输入.键盘可以配置许多不同类型的输入,如纯文本,电子邮件,数字等等.文本字段使用目标 ...
- tensorflow简介、目录
目前工作为nlp相关的分类及数据治理,之前也使用tensorflow写过一些简单分类的代码,感受到深度学习确实用处较大,想更加系统和全面的学习下tensorflow的相关知识,于是我默默的打开了b站: ...
- 云账房获取2.76亿元D轮投资
财税管理SaaS服务商云帐房 南京云帐房网络科技有限公司正式成立于2015年3月,法定代表人为薛兴华. 2015年获得600万人民币天使轮融资,投资方为AA投资: 2016年5月份完成数千万人民币A轮 ...
- 实用类-<装箱与拆箱>
装箱:把基本数据类型装换为对应的对象类 作用:1.在需要使用对象类型的时候,装换成对应的对象类型(集合里面) 2.转换完成以后,拥有相应的属性和方法,方便咱们的数据操作 拆箱 Integer intO ...
- 2月送书福利:ASP.NET Core开发实战
大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...
- Eclipse中java代码注释变成乱码的问题
今天在查看曾经写过的代码时发生了一件很是让人头疼的事: 我写的所有注释全部都变成了了乱码,曾经刚入门时也是经常遇到类似的问题,解决起来很快,每天可能都会在工作空间里看到,但是随着时间的推移,写代码的规 ...
- LPS(最长回文子序列)
(注意:我发现最长回文子序列(Longest Palindromic Subsequence)问题与最长回文子串(Longest Palindromic Substring)不一样,子序列不要求下标一 ...