构造类的过程中各种代码的访问顺序
来源:互联网 发布:软件系统设计方案 编辑:程序博客网 时间:2024/05/18 00:58
构造类的过程中各种代码的访问顺序:
访问类时首先初始化静态变量、静态代码块;
类实例化时先定位到最终实例化使用的构造器,然后首先初始化普通变量、普通代码块,然后继续访问构造器进行实例化。
所以,此例中,先进入无参构造器,发现调用了另一个构造器进而进入被调用的构造器,在构造器继续进行初始化前先访问普通代码块,所以this(a)传入的参数是10而不是8。
同理,涉及到继承时,由于需要先初始化父类,所以顺序是:进入无参->进入有参->进入父类构造器->返回有参->范围普通代码块...
由于这样的访问顺序,所以构造器在调用其它构造器的代码必须是构造器内的首句代码。
(测试代码转载自网络)
public class TT { public static int a = 0; static { a = 10; System.out.println("静态代码块在执行a=" + a); } { a = 8; System.out.println("非静态代码块在执行a=" + a); } public TT() { this(a); // 调用另外一个构造方法 System.out.println("无参构造方法在执行a=" + a); } public TT(int n) { System.out.println("构造a: " + a); System.out.println("构造n: " + n); } public static void main(String[] args) { TT tsc = null; System.out.println("!!!!!!!!!!!!!!!!!!!!!"); tsc = new TT(); System.out.println(TT.a); }}
静态代码块在执行a=10
!!!!!!!!!!!!!!!!!!!!!
非静态代码块在执行a=8
构造a: 8
构造n: 10
无参构造方法在执行a=8
8
阅读全文
0 0
- 构造类的过程中各种代码的访问顺序
- 类中变量 代码块 构造方法 的加载顺序
- 关于类中静态块,静态方法,构造代码块,构造方法的执行顺序
- Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺序
- java中类的静态代码块、构造代码块、构造方法、静态成员的初始化顺序详解
- java中类的静态代码块、构造代码块、构造方法、静态成员的初始化顺序详解
- java 中代码块、构造函数的执行顺序
- java中各种代码块的加载顺序
- c++类中成员的构造顺序
- Java中类的构造顺序
- Java 中类的构造顺序
- Java 中类的构造顺序
- 类中构造函数的顺序
- 构造函数访问权限和基类构造函数,派生类的构造函数调用顺序
- 代码块的访问顺序
- Java中构造函数、构造代码块、静态代码块等的执行顺序问题
- JAVA中静态代码块,构造代码块,构造函数的加载顺序
- java中静态代码块,构造代码块,构造方法,main方法的执行顺序
- okhttp获取网络数据之轮播图效果实现
- ibatis配置多个数据源
- information_schema系统表——COLUMN_PRIVILEGES
- HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)
- centos7下sheepdog的简单使用
- 构造类的过程中各种代码的访问顺序
- 阿里云 CDN HTTPS 最佳实践——动态密钥套件(三)
- 数据科学与大数据技术(十一周)-课件and课后习题
- Win10 U盘安装教程
- Web开发之不用Tomcat服务器框架直接Socket通信
- 安全认证框架Shiro (二)- shiro过滤器工作原理
- linux系统上php执行apk签名的方法
- R语言shiny包,编写的指标相关性的实例
- 5. UE4的结构体及结构体数组