类的成员----代码块

类:属性、方法、构造器、代码块

package com.test1.java;

/*
 * 1.代码块作用:用来初始化类、对象
 * 2.如果有修饰,只能用static
 * 3.静态代码块vs非静态代码块
 * 4.静态代码块
 *    内部可以有输出语句
 *    随着类加载而执行,只执行一次(只加载一次类)
 *    作用:初始化类的信息
 *    多个静态代码块,按照声明顺序执行
 *    静态代码块优先于非静态执行
 * 5.非静态代码块
 *    内部可以有输出语句
 *    随着对象创建而执行
 *    每创建一个对象,就执行一次代码块
 *    多个非静态代码块,按照声明顺序执行
 *    作用:在创建对象时,对对象属性初始化
 */


public class BlockTest {

	public static void main(String[] args) {
		
		String desc = Person.desc;//输出:staticblock。∵加载类,静态代码块也被加载并执行,但静态方法加载不执行
		System.out.println(desc);//输出:爱学习
		
		Person person = new Person();//输出:block。随着对象创建而执行
		Person person1 = new Person();//输出:block。随着对象创建而执行
		System.out.println(person.age);//输出为1
		
		String desc1 = Person.desc;//无输出,静态代码块只执行一次
	}
}


class Person{
	//属性
	String name;
	int age;
	static String desc = "我是一个人";
	
	//构造器
	public Person() {
		super();
	}


	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	//非静态代码块
	{
		System.out.println("block");
		age = 1;
	}
	//静态代码块
	static{
		System.out.println("static block");
		desc = "爱学习";
	}
	//方法
	public void eat() {
		System.out.println("吃饭");
	}


	@Override
	public String toString() {
		return "person [name=" + name + ", age=" + age + "]";
	}
	public static void show() {
		System.out.println("hello");
	}
}

例子分析

加载LeafTest类------new Leaf()-----public Lesf()-------super(“哈哈”)------public Mid(“哈哈”)-----this()-------public Mid()-----super()------public Root()------super()------Object类------Object类中的静态代码块+Root静态代码块+Mid静态代码块+Leaf静态代码块--------main()------new Leaf()-----public Lesf()-------super(“哈哈”)------public Mid(“哈哈”)-----this()-------public Mid()-----super()------public Root()----------super()------Object类------Object类中的非静态代码块和相关语句------Root类中的非静态代码块和相关语句(代码块优先方法执行)-----Root类中的非静态代码块和相关语句-----Leaf类中的非静态代码块和相关语句

package com.test1.java;

class Root{
	static {
		System.out.println("Root的静态代码块");
	}
	{
		System.out.println("Root的非静态代码块");	
	}
	public Root() {
		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();
		System.out.println("Mid的带参构造器:" + msg);
	}
}
class Leaf extends Mid{
	static {
		System.out.println("Leaf的静态代码块");
	}
	{
		System.out.println("Leaf的非静态代码块");	
	}
	public Leaf() {
		super("哈哈");
		System.out.println("Leaf的无参构造器");
	}
	
}
public class LeafTest {

	public static void main(String[] args) {
		new Leaf();
	}
}

输出结果
在这里插入图片描述

package com.test1.java;

class Father {

	static {
		System.out.println("1111111");
	}
	{
		System.out.println("222222");
	}
	public Father() {
		System.out.println("33333");
	}
}
public class Son extends Father{
	static {
		System.out.println("4444444");
	}
	{
		System.out.println("555555");
	}
	public Son() {
		System.out.println("666666");
	}
	public static void main(String[] args) {
		System.out.println("777777");
		System.out.println("*********");
		new Son();
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新手学java2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值