Java静态代码块、代码块及构造函数执行顺序
根据以下程序进行分析
定义一个父类
package sas.LearnJava;
public class ExcuteOrderTest {
{
System.out.println("我是在父类开始的普通代码块!");
}
public ExcuteOrderTest() {
System.out.println("我是父类的无参构造函数!");
}
public void showSomething() {
System.out.println("我是父类中定义的方法!");
}
static {
System.out.println("我是在父类中静态的代码块!");
}
}
定义一个子类
package sas.LearnJava;
public class SubExcuteOrderTest extends ExcuteOrderTest {
static {
System.out.println("我是在子类中的静态代码块!");
}
public SubExcuteOrderTest() {
System.out.println("我是子类的无参构造函数!");
}
@Override
public void showSomething() {
System.out.println("我是子类中定义的方法!");
}
public static void test() {
System.out.println("子类中的静态测试方法");
}
{
System.out.println("我是在子类结束的普通代码块!");
}
}
再写一个demo使用上述子类
package sas.LearnJava;
public class ExcuteOrderDemo {
public static void main(String[] args) {
System.out.println("创建第一个对象");
SubExcuteOrderTest subExcuteOrderTest1 = new SubExcuteOrderTest();
System.out.println("创建第二个对象");
SubExcuteOrderTest subExcuteOrderTest2 = new SubExcuteOrderTest();
}
}
创建第一个对象
我是在父类中静态的代码块!
我是在子类中的静态代码块!
我是在父类开始的普通代码块!
我是父类的无参构造函数!
我是在子类结束的普通代码块!
我是子类的无参构造函数!
创建第二个对象
我是在父类开始的普通代码块!
我是父类的无参构造函数!
我是在子类结束的普通代码块!
我是子类的无参构造函数!
从运行结果中可以几点:
- 在创建类的对象时会执行其父类中的代码块及默认的无参构造函数,然后再执行自己的代码块和构造函数
- 静态代码块、非静态代码块以及构造函数的执行顺序时确定的,与在程序中的位置无关
- 子类的静态代码块会在父类的静态代码块执行后执行
- 静态代码块只执行一次,普通代码块随着对象的创建而重新进行初始化
package sas.LearnJava;
public class ExcuteOrderDemo {
public static void main(String[] args) {
SubExcuteOrderTest.test();
}
}
我是在父类中静态的代码块!
我是在子类中的静态代码块!
子类中的静态测试方法
当不创建对象直接调用类的静态方法时,只会执行父类和子类中的静态代码块
Java静态代码块、代码块及构造函数执行顺序的更多相关文章
- C#构造函数、私有构造函数、静态构造函数与构造函数执行顺序
默认构造函数,如果没有为类指定任何构造函数,编译器会自动为类创建一个无参构造函数,用以初始化类的字段:如果为类编写了构造函数,那么编译器就不会再自动生成无参构造函数了.ps.C#不允许用户为结构定义无 ...
- 浅谈Java语言中try{}catch{}和finally{}的执行顺序问题
浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06 PM 13:41:46 1. 不管有没有出现异常,finally块中代码都会执行: 2. 当t ...
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
实例化子类时,父类与子类中的静态代码块.实例代码块.静态变量.实例变量.构造函数的执行顺序是怎样的? 代码执行的优先级为: firest:静态部分 second:实例化过程 详细顺序为: 1.父类静态 ...
- java中静态代码块,构造代码块,以及构造方法的执行顺序
写了许久的代码,却把一些基础的东西都给忘了,今天无聊就顺手写了个,然后测试下,发现跟我记忆中的竟然有些出入,作为一个两年的开发,我感觉自己很失败啊. 父类pojo: public class Pojo ...
- Java 静态语句块、语句块、构造函数执行顺序
class Parent{ static String name = "hello"; { System.out.println("3 parent block" ...
- java之trycatchfinally代码块与return,throw的执行顺序的探索
时光荏苒,转眼间毕业都半年了,java编程也五个月了.写代码的过程中,会经常遇到解决代码抛异常的情况.平时只注重完成功能,也没太注意try_catch_finally的内在执行顺序,只知道表面的现象: ...
- 顽强的的砂锅之——深究finally代码块与return语句的执行顺序!
当问到finally代码块的执行顺序,就算刚刚学编程的小白都能毫不犹豫的说出答案:不管异常发生与否,finally语句块的代码一定会被执行!大体上这样讲是没有错,但是finally块中的代码一定会有效 ...
- Java构造函数执行顺序
首先执行基类的构造函数 然后执行派生类的构造函数之外的初始化语句 最后执行派生类的构造函数 在Java中,如果派生类构造函数需要调用基类的构造函数,那么基类构造函数必须作为派生类构造函数的第一句话.在 ...
- java中异常处理finally和return语句的执行顺序
finally代码块的语句在return之前一定会得到执行 如果try块中有return语句,finally代码块没有return语句,那么try块中的return语句在返回之前会先将要返回的值保存, ...
随机推荐
- React-Native之打包发布(Android)
React-Native之打包发布(Android) 一,介绍与需求 移动端打包发布到应用市场 二,发布配置 注意:以下所有操作都在win10下进行,React Native版本0.59.5,andr ...
- 深扒JVM,对它进行“开膛破肚”式解析!
1. 打怪升级,你绕不开JVM JVM,对Java程序员进阶而言,是一个绝对绕不开,也不能绕开的话题. 在你打怪升级.进阶蜕变的路上,势必会遇到项目上线中各种OOM.GC等问题,此时JVM的功底就至关 ...
- 从源码看Flask框架配置管理
1 引言 Flask作为Python语言web开发的三大顶梁柱框架之一,对于配置的管理当然必不可少.一个应用从开发到测试到最后的产品发布,往往都需要多种不同的配置,例如是否开启调试模式.使用哪个数据库 ...
- WPF中ComboBox控件绑定键值对操作
WPF中下拉框将键值对作为其数据源的具体操作.本实例以枚举类型以及枚举特性描述字符串生成键值对来进行. namespace ViewC { /// <summary> /// View.x ...
- python面试总结1(基础章节)
python语言基础 语言特点 python是静态还是动态类型?是强类型还是弱类型 动态强类型语言 动态还是静态指的是编译期还是运作期确定类型 强类型指的是不会发生隐式类型转换 python作为后端语 ...
- 强烈推荐优秀的Vue UI组件库
Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...
- 面试java后端面经_2
1 自我介绍(介绍一下帅气的自己哦) 2 对象深浅复制(浅复制:对象内引用的对象不会复制,深复制会把引用对象复制.如何进行深浅复制,这块不懂的童鞋可以百度一下) 3 wait方法和sleep方法的区别 ...
- Unity经典案例之:Fire Balls 多个圆环以及圆环的变速变向
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- 【原创】关于DNS不得不说的一些事
引言 今天我们来聊聊DNS. 所谓域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据 ...
- bootstrap-datetimepicker时间插件使用
html头部引入相关的js和css <link rel="stylesheet" type="text/css" href="css/boots ...