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语句在返回之前会先将要返回的值保存, ...
随机推荐
- 使用nginx代理centos yum 源
我们在安装centos 服务器时,可能会有以下情况: 局域网内有若干台服务器,但是只有一台服务器可以连接外网,其余服务器都不可以连接外网,但通过局域网与外网机器联通. 那么我们再使用 yum 安装软件 ...
- 有趣的RPC理解
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通 ...
- Mac安装Homebrew的那些事儿
Mac安装Homebrew的那些事儿 最近小明刚换置了一个 Mac 本,想搭建一个属于自己的博客网站,需要用到 Node.js 环境,而Node.js 在 MacOS 中是由 Homebrew 进行安 ...
- GitHub项目:jkrasnay/sqlbuilder的使用
http://www.jianshu.com/p/7f099b8cf5f0 技术选型: 在报表查询时,通常需要做可以动态添加的条件 在老项目中使用的是一种Tcondition的对象分装sql impo ...
- Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置
Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置 系统:Windows7 使用软件: Maven3.0.3 + Eclipse Indigo ...
- 简单认识Nginx---负载均衡
中大型项目都会考虑到分布式,前面几篇文章着重介绍了数据处理的技术集群.今天来研究一下关于服务器的负载均衡–Nginx.他除了静态资源的处理外还有可以决定将请求置于那台服务上. Nginx的安装 点我下 ...
- 常见Http协议状态码
收集常见的http协议状态码,供查阅!包括中文和英文对照. 中文版 1**:请求收到,继续处理 2**:操作成功收到,分析.接受 3**:完成此请求必须进一步处理 4**:请求包含一个错误语法或不能完 ...
- 论文解读2——Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
背景 用ConvNet方法解决图像分类.检测问题成为热潮,但这些方法都需要先把图片resize到固定的w*h,再丢进网络里,图片经过resize可能会丢失一些信息.论文作者发明了SPP pooling ...
- Java虚拟机日志与参数
虚拟机日志 打印GC日志可以使用参数-XX:+PrintGC /** * -Xmx10m -Xms10m -XX:PretenureSizeThreshold=10485760 * -XX:+Prin ...
- HOWTO: Amira/Avizo中如何设置数据尺度单位
很多朋友是数据量化完成后,问统计表中的数据尺度单位,这种情况恐怕需要从头再处理一次,所以对于Amira/Avizo的新用户来说,在准备进行量化分析之前就应该设置好尺度单位,设置步骤如下: 1. 在A ...