非静态代码块:

TestOrder:

package com.aff.singleton;

/*
类的第四个成员:初始化块(代码块)
代码块: 如果有修饰的话只能使用static
分类:非静态代码块:1.可以对类的属性(静态&非静态)进行初始化操作,同时可以调用本类声明的方法(静态&非静态)
2.里面可以有输出语句
3.一个类中可以有多个非静态代码块,多个代码块之间按顺序结构执行
4.每创建一个类的对象,非静态代码块就会加载一次
5.非静态代码块的执行要早于构造器
静态代码块:1.里面可以有输出语句
2.随着类的加载而加载,而且只被加载一次
3.多个静态代码块按照顺序执行
4.静态代码块的执行要早于非静态代码块的执行
5.静态代码块中只能执行静态的结构(类属性, 类方法) ,静态的里面不能调用非静态的 关于属性赋值的操作:①默认的初始化
②显式的初始化或代码块的初始化(此处的两个结构按照顺序执行)
③构造器中
④通过方法对对象的相应属性进行修改
*/
public class TestOrder {
public static void main(String[] args) {
Order o1 = new Order();
System.out.println(o1); Order o2 = new Order();
System.out.println(o2);
}
} class Order {
private int orderId = 1001;
private String orderName; // 静态代码块
static {
System.out.println("静态代码块1");
} // 非静态代码块(初始化块)
{
orderId = 1002;
orderName = "aa";
System.out.println("非静态代码块1");
}
{
System.out.println("非静态代码块2");
} public Order() {
super();
} public Order(int orderId, String orderName) {
super();
this.orderId = orderId;
this.orderName = orderName;
} public int getOrderId() {
return orderId;
} public void setOrderId(int orderId) {
this.orderId = orderId;
} public String getOrderName() {
return orderName;
} public void setOrderName(String orderName) {
this.orderName = orderName;
} @Override
public String toString() {
return "Order [orderId=" + orderId + ", orderName=" + orderName + "]";
}
} 输出结果:

静态代码块1
非静态代码块1
非静态代码块2
Order [orderId=1002, orderName=aa]
非静态代码块1
非静态代码块2
Order [orderId=1002, orderName=aa]

练习执行顺序的先后

TestLeaf:

package com.aff.singleton;

//执行顺序 static的先,父类的先,
//构造器晚于非静态的代码块
public class TestLeaf {
public static void main(String[] args) {
new Leaf();
System.out.println();
new Leaf();//静态的没了 }
} class Root {
static {
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
} public Root() {
super();
System.out.println("Root的无参构造器");
}
} class Mid extends Root {
static {
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
} public Mid() {
System.out.println("Mid的无参构造器");
} public Mid(String msg) {
// 通过this调用同一类中重载的构造器
this();
System.out.println("Mid的带参数的构造器,其参数值:" + msg);
}
} class Leaf extends Mid {
static {
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
} public Leaf() {
// 通过super调用父类中有一个字符串参数的构造器
super("AAAA");
System.out.println("Leaf的无参构造器");
}
} 输出结果:

Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参构造器
Mid的普通初始化块
Mid的无参构造器
Mid的带参数的构造器,其参数值:AAAA
Leaf的普通初始化块
Leaf的无参构造器


Root的普通初始化块
Root的无参构造器
Mid的普通初始化块
Mid的无参构造器
Mid的带参数的构造器,其参数值:AAAA
Leaf的普通初始化块
Leaf的无参构造器

非静态代码块(非static初始化块)&静态代码块(static初始化块)的更多相关文章

  1. 静态代码块&非静态代码块&构造函数

    总结:静态代码块总是最先执行.非静态代码块跟非静态方法一样,跟对象有关.只不过非静态代码块在构造函数之前执行.父类非静态代码块.构造函数执行完毕后(相当于父类对象初始化完成), 才开始执行子类的非静态 ...

  2. java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包

    Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...

  3. Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序

    //据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...

  4. java synchronized静态同步方法与非静态同步方法,同步语句块

    摘自:http://topmanopensource.iteye.com/blog/1738178 进行多线程编程,同步控制是非常重要的,而同步控制就涉及到了锁. 对代码进行同步控制我们可以选择同步方 ...

  5. java子父类初始化顺序 (1)父类静态代码块(2)父类静态变量初始化(3)子类静态代码块(4)子类静态变量初始化(5)main(6)有对象开辟空间都为0(7)父类显示初始化(8)父类构造(9)子类显示初始化(10)子类构造

    标题 静态代码块与静态成员变量还要看代码的先后顺序 看程序,说出结果 结果为: x=0 看程序,说出结果 结果如下: 补充 : 静态代码块:static{ } 在JVM加载时即执行,先于主方法执行,用 ...

  6. Java类加载信息的顺序:包括静态代码快、静态类变量、非静态代码快、构造方法、普通方法

    JVM运行之前会执行一个叫做类加载器的子系统,叫做ClassLoader,那么类里面那么多“元素”,究竟是个什么顺序呢,写几行代码测试一下,通过给每个方法和代码快和静态变量打上断点来测试: class ...

  7. 构造代码块、this关键字、静态变量、静态代码块、主函数

    一.构造代码块: 作用:给对象进行初始化. 特点:对象一经运行就执行(与变量声明时赋初值同级别,此处注意 非法前向引用) 优先于构造函数的执行. 与构造函数的区别: 构造代码块是给所有对象统一初始化. ...

  8. 13_java之final|static|包|匿名对象|代码块|内部类

    01final关键字概念 * A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承 ...

  9. java 静态资源,非静态资源,父类子类,构造方法之间的初始化循序

    java面试经常被问静态资源,非静态资源,父类子类,构造方法之间的执行顺序.下面添加两个类做个测试 class Parent { // 静态变量 public static String p_Stat ...

随机推荐

  1. 《Docker从入门到跑路》之基本用法介绍

    Docker是一种轻量级的虚拟化技术,它具备传统虚拟机无法比拟的优势,它更简易的安装和使用方式.更快的速度.服务集成和开源流程自动化. Docker的安装 安装Docker的基本要素:1.Docker ...

  2. P1364 医院设置(树型结构)

    传送门闷闷闷闷闷闷 ~~放一个可爱的输入框.~~ 考虑在O(n)的时间内求数以每个节点为医院的距离和. \(设想一下,如果我们已知以1为根节点的距离和f[1],如何求出子节点呢?\) 当医院从1转换到 ...

  3. WCF(一)

    在学习WCF之前要知道几个术语: 一:终结点 终结点由3个要素组成:契约,绑定,地址. 1.契约:契约属于一个服务公开接口的一部分.一个服务的契约,定义了服务端公开的服务方法,使用的传输协议,可访问的 ...

  4. LeetCode 62,从动态规划想到更好的解法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第36篇文章,我们一起来看下LeetCode的62题,Unique Paths. 题意 其实这是一道老掉牙的题目了 ...

  5. javaWeb手动分页步骤

    一:编写实体类@Setter@Getter@ToString@Entity@Repositorypublic class PageBean<T> { private Integer cur ...

  6. 2018-06-26 jq选择器

    0.选择器的目的就是为了方便快速找到元素从而操作元素! 1.基本选择器 *  -> 所有标签 #id ->id选择器 .class -> 类选择器 h1,h2 -> 组合选择器 ...

  7. 我参与 Seata 开源项目的一些感悟

    丁老师在他的知识星球邀请我回答以下一个问题: 我觉得这个问题非常有意思,姑且把它贴到公众号这里,与大家分享一下我对这个问题的一些感悟. 感谢丁老师的邀请问答: 在这里我就简单说下,我这段时间参与 Se ...

  8. Detect operating system [zabbix]

    zabbix 默认会有3个script功能,分别是Detect operating system ,ping ,traceroute ,都比较好用.默认安装完毕需要做一些修改才能正常使用. 1.tra ...

  9. flask之jinjia2模板语言

    flask_jinjia2.py ''' flask中的jinjia2模板语言(和django中模板类似): (1)模板变量{{ }} (2)模板标签{% %} ①for循环遍历 {% for foo ...

  10. Django之请求生命周期

    settings.py中间件执行 自定义中间件的配置: (1)任意新建一个py文件,导入模块from django.utils.deprecation import MiddlewareMixin ( ...