LearnJava(四) | Java代码块执行顺序测试
最近笔试常常遇到考察Java代码块执行顺序的题目,网上查看博客错漏百出,特地自己测试了一下。
如有错漏,希望路过的大佬指出来,以便我进行更改。
先上代码吧!
public class ClassA { private static String a = print("A"); static { System.out.println(a+":A——静态块"); } { System.out.println("A——构造块"); } public ClassA() { System.out.println("A——默认构造方法"); } public ClassA(String name) { System.out.println("A——带参构造方法"); } public static String print(String className) { System.out.println(className+"——静态属性"); return className; } }
public class ClassB extends ClassA{ private static String b = print("B"); static { System.out.println(b+":B——静态块"); } { System.out.println("B——构造块"); } public ClassB() { System.out.println("B——默认构造方法"); } public ClassB(String name) { System.out.println("B——带参构造方法"); } }
public class ClassTest { public static void main(String[] args) { System.out.println("start"); ClassB laughter = new ClassB("laughter"); System.out.println("------------------"); ClassB Somnus = new ClassB(); } }
接下来是测试结果
总结
结合我查询的资料以及测试结果,可以得知执行顺序如下:
- main 函数作为入口,按行依次执行;
- 静态属性 > 静态方法声明 > 静态块;
- 动态属性 > 动态方法声明 > 构造块;
- 构造方法。
补充说明:
- 创建一个对象时,无论是否带参数,都会先调用它的父类(如果存在父类)的默认构造方法。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
初级Java面试
Java基本数据类型(8种) 整型:byte、short、int、long 对应字节(8 16 32 64) 浮点型:float、double 对应字节(32 64) Boolean型:boolean 对应字节(1) 字符型:char 对应字节(64) string、stringBuffer、stringBuilder string 若连接后得到的字符串在静态存储区中早已存在,那么使用“+”优于stringBuilder string能被继承吗? 不能,因为string被final修饰,string为常量,定义后不能修改 stringBuffer与stringBuilder的区别 stringBuffer(字符串常量)---线程安全 stringBuilder(字符串常量)---线程非安全 Array和ArrayList的区别 Array可以容纳基本类型和对象,而ArrayList只能容纳对象 Array是指定大小的,ArrayList是大小固定的 Array没有提供ArrayList那么多功能 适用与Array的场景 如果列表的大小已经指定,大部分情况是存储和遍历它们 对于遍历基本数...
- 下一篇
C++面向对象程序设计课程笔记(第三周)
第一节 this指针 1.C++程序到C程序的翻译 图1 从C++到C C++中的class在C语言中并不存在,因此可以用struct(结构体)来代替,成员变量也可以直接用域来代替,但是类中的成员函数却无法在C语言中直接表示,所以只能把SetPrice设置为全局函数。由于是全局函数,为了能让其使用结构体内的数据,故在SetPrice中增加了一个参数struct CCar *this,这样就可以在函数体中把p的值传递给结构体中的price,实现了跟成员函数一样的功能,同理,在main()中SetPrice函数执行也得把car的地址传递过去。 故,this的作用就是指向成员函数所作用的对象。 2.this指针作用 (1)非静态成员函数中可以直接使用this来代表指向该函数作用的对象的指针。 图2 this指针作用 在main()函数中,首先对对象c1执行了AddOne()函数,然后开始执行AddOne(),对c1中的real加1,然后执行对c1的Print()函数,这之后,返回一个this指针所指向对Complex对象(即c1)给c2。 对this指针再加深一个理解,如下例: class ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块