由浅到深认识Java语言(12):代码块&静态

本文介绍了作者开源的SpringBoot项目初始化模板,其中包含了构造代码块的使用以及静态成员变量、静态代码块和静态方法的概念,强调了它们在类初始化中的顺序和应用场景。
摘要由CSDN通过智能技术生成

该文章Github地址:https://github.com/AntonyCheng/java-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】& CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(11):封装

20.代码块(代码块:类的第四成员)

概念定义:

  • 早期概念:代码块由一对 {} 大括号包裹,比如方法的内容,流程控制的内容,也称普通代码块

  • 目前概念:代码块是类的第四大成员,也称为构造代码块

构造代码块:

作为类的第四大成员,起到了构造器的作用,是实现在类中对对象进行初始化的功能;

构造代码块不常用

示例如下:

Person 类:

package top.sharehome.BagOne;

//一个类的成员大体如下:
public class Person {
	// 类的成员变量
	private String name;
	private int age;
	private char sex;

	// 构造器
	public Person() {
		super(); // 这是快捷键所形成的构造器,super可删可不删
		// TODO Auto-generated constructor stub
	}

	public Person(String name, int age, char sex) {
		super(); // 这是快捷键所形成的构造器,super可删可不删
		this.name = name;
		this.age = age;
		this.sex = sex;
	}

	public Person(String name) {
		super(); // 这是快捷键所形成的构造器,super可删可不删
		this.name = name;
	}

	public Person(int age) {
		super(); // 这是快捷键所形成的构造器,super可删可不删
		this.age = age;
	}

	public Person(char sex) {
		super(); // 这是快捷键所形成的构造器,super可删可不删
		this.sex = sex;
	}

	public Person(String name, int age) {
		super(); // 这是快捷键所形成的构造器,super可删可不删
		this.name = name;
		this.age = age;
	}

	public Person(int age, char sex) {
		super(); // 这是快捷键所形成的构造器,super可删可不删
		this.age = age;
		this.sex = sex;
	}

	public Person(String name, char sex) {
		super(); // 这是快捷键所形成的构造器,super可删可不删
		this.name = name;
		this.sex = sex;
	}

	// 代码块,也称为构造代码块
	{
		this.age = 1;
		this.name = "张三";
		this.sex = '男';
	}

	//方法
	public void Method() {
		System.out.println(this.name);
		System.out.println(this.age);
		System.out.println(this.sex);
	}
}

demo 类:

package top.sharehome.BagOne;

public class demo {
	public static void main(String[] args) {
		Person p = new Person();
		p.Method();
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

21.静态(static)

定义

static修饰的部分称为静态的部分,所有静态的部分都会随着类的加载而加载,也就是说,当类加载进虚拟机的时候,类中静态的部分就会被创建到静态域中,注意:所有类中的静态部分,都只会加载一次;

比较示例如下:

  • 非静态 SportMan 类:

    package top.sharehome.BagOne;
    
    public class SportMan {
    	String name;
    	int age;
    	String nation;  //非静态
    	@Override
    	public String toString() {  //快捷生成的!
    		return "SportMan [name=" + name + ", age=" + age + ", nation=" + nation + "]";
    	}
    }
    

    非静态 demo 类:

    package top.sharehome.BagOne;
    
    public class demo {
    	public static void main(String[] args) {
    		//开校级运动会
    		//创建运动员
    		//注意在国籍处的操作,如果有很多相同国籍,就可以用静态
    		SportMan s1 = new SportMan();
    		s1.name = "张三";
    		s1.age = 20;
    		s1.nation = "China";
    		SportMan s2 = new SportMan();
    		s2.name = "张四";
    		s2.age = 22;
    		s2.nation = "China";
    		SportMan s3 = new SportMan();
    		s3.name = "张五";
    		s3.age = 15;
    		s3.nation = "China";
    		//把信息打印出来
    		System.out.println(s1);
    		System.out.println(s2);
    		System.out.println(s3);
    	}	
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 静态 SportMan 类:

    package top.sharehome.BagOne;
    
    public class SportMan {
    	String name;
    	int age;
    	static String nation;
    	@Override
    	public String toString() {
    		return "SportMan [name=" + name + ", age=" + age + ", nation=" + nation + "]";
    	}
    }
    

    静态 demo 类:

    package top.sharehome.BagOne;
    
    public class demo {
    	public static void main(String[] args) {
    		//开校级运动会
    		//创建运动员
    		//注意在国籍处的操作,如果有很多相同国籍,就可以用静态
    		SportMan s1 = new SportMan();
    		s1.name = "张三";
    		s1.age = 20;
    		s1.nation = "China"; //SportMan.nation = "China";
    		SportMan s2 = new SportMan();
    		s2.name = "张四";
    		s2.age = 22;
    //		s2.nation = "China";
    		SportMan s3 = new SportMan();
    		s3.name = "张五";
    		s3.age = 15;
    //		s3.nation = "China";
    		//把信息打印出来
    		System.out.println(s1);
    		System.out.println(s2);
    		System.out.println(s3);
    	}	
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

static修饰属性

定义:

static修饰属性,就是静态的成员变量,类的静态属性都创建在内存的静态域中,随着类的加载而创建(特点),且只有一份,所有的对象都共用此静态域里的值;

注意事项:

  • 静态的属性不建议使用“对象名.属性”的方法来调用;

    在上例中可修改静态代码部分:

    package top.sharehome.BagOne;
    
    public class demo {
    	public static void main(String[] args) {
    		//开校级运动会
    		//创建运动员
    		//注意在国籍处的操作,如果有很多相同国籍,就可以用静态
    		SportMan.nation = "China";   //这样调用!!!!!
    		SportMan s1 = new SportMan();
    		s1.name = "张三";
    		s1.age = 20;
    		SportMan s2 = new SportMan();
    		s2.name = "张四";
    		s2.age = 22;
    		SportMan s3 = new SportMan();
    		s3.name = "张五";
    		s3.age = 15;
    		//把信息打印出来
    		System.out.println(s1);
    		System.out.println(s2);
    		System.out.println(s3);
    	}
    }
    
  • 静态的属性也称为类属性或者类变量,因为它可以直接通过类名来调用;

static修饰方法

定义:

static修饰方法,称为静态方法,静态方法随着类的加载而被加载,且只加载一次;

当类加载以后,静态方法会被加载进静态域中,可以直接通过 “类名.静态方法名” 的方法调用,而不需要通过创建对象后再通过 ”对象名.方法名“ 的方法调用;

对比实例如下:

非静态调用方法:

Person 类:

package top.sharehome.BagOne;

public class Person {
	public void sleep(){            //无静态修饰
		System.out.println("睡觉!");
	}
}

demo 类:

package top.sharehome.BagOne;

public class demo {
	public static void main(String[] args) {
		Person p = new Person();          //有创建对象
		p.sleep();
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

静态调用方法:

Person 类:

package top.sharehome.BagOne;

public class Person {
	public static void sleep(){    //静态修饰
		System.out.println("睡觉!");
	}
}

demo 类:

package top.sharehome.BagOne;

public class demo {
	public static void main(String[] args) {
		Person.sleep();						//无创建对象
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

静态方法的意义:

静态方法可以直接通过类名来调用,为了方便和快捷;

注意事项:

  • 静态方法中只能出现静态的部分,不能存在类中非静态的成员,比如普通的属性和普通的方法,因为静态方法的创建是早于对象的创建;

  • 静态方法中不能出现 this 关键字,应该用方法名,因为 this 关键字是描述对象的,但是静态方法的创建早于对象的创建,而且 this 关键字修饰的是普通变量,所以就印证了不能出现;

    解释示例如下:

    Person 类:

    package top.sharehome.BagOne;
    
    public class Person {
    	static String name;
    	
    	public static void sleep(String name){
    		//this.name;  //这里就会报错
    		Person.name = name;
    		System.out.println(Person.name+"要睡觉了!");
    	}
    }
    

    demo 类:

    package top.sharehome.BagOne;
    
    public class demo {
    	public static void main(String[] args) {
    		Person.sleep("小陈");
    	}
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

static修饰代码块

定义:

static修饰代码块称为静态代码块,随着类的加载而被执行,且只执行一次;

注意事项:

静态代码块也不能出现非静态的内容

作用:

往往用于初始化类中的静态属性;

示例如下:

我们不想再主函数中进行创建初始化对象,我们就可以用静态代码块在类中对其提前初始化;

Person 类:

package top.sharehome.BagOne;

public class Person {
	//元素
	private String name;
	private int age;
	static String nation; //此属性是公用的
	
	//构造器
	public Person() {}
	
	//代码块
	static {
		Person.nation = "China";
	}

	//方法
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ",nation =" + Person.nation+"]";
	}
}

demo 类:

package top.sharehome.BagOne;

public class demo {
	public static void main(String[] args) {
		Person p = new Person();
		System.out.println(p);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

类中初始化顺序

  • ==静态成员变量 ==> 静态代码块 ==> 成员变量 ==> 构造代码块 > 构造方法;
  • 静态成员变量和静态代码块,谁写在前面谁先执行;

示例如下:

package top.sharehome.BagOne;

public class Person {
	String name;
	static String nation;
	public static void strNation(String nation) {
		Person.nation = nation;
		System.out.println("静态方法");
	}
	public Person(){
		System.out.println("构造器");
	}
	{
		System.out.println("构造代码块");
	}
	static {
		Person.nation = "China";
		System.out.println("静态代码块");
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一章:由浅到深认识Java语言(13):继承

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值