该文章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("静态代码块");
}
}
打印效果如下: