用法1:被static修饰的成员变量叫做静态变量。
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String name;
private Integer age;
private char sex;
//定义静态成员变量
public static String teacher;
public void study(){
System.out.println("学生:"+name + "\t" + age + "\t" + sex);
System.out.println("老师:" + teacher);
}
}
public class Test1 {
public static void main(String[] args) {
Student student = new Student("小红",20,'男');
student.teacher="阿伟老师";
//在对象中初始化静态成员变量
student.study();
Student student2 = new Student("小张", 20, '男');
//在student2中共享Student.class的静态成员变量值
student2.study();
}
}
特点:
1、被该类所有对象共享
2、静态成员变量不属于对象,属于类
3、随着类的加载而加载,优先于对象存在
调用方式:
1、类名调用(推荐)
2、对象名调用
用法2:被static修饰的成员方法,叫做静态方法。
常用在javaBean类、测试类、工具类中
使用工具类事项:
1、类名见名知意
2、私有化构造方法,防止创建对象
3、方法定义为静态
public class StudentUtils {
//私有化构造方法
private StudentUtils() {
}
/**
* 获取最大年龄
* @param students
* @return
*/
public static Integer getMaxAgeStudent(List<Student> students){
int maxAge=0;
for (Student student : students) {
if (student.getAge()>maxAge){
maxAge=student.getAge();
}
}
return maxAge;
}
}
public class Test2 {
public static void main(String[] args) {
Student student = new Student("小红", 20, '女');
Student student2 = new Student("小刘", 22, '男');
Student student3= new Student("小张", 29, '男');
List<Student> students = new ArrayList<Student>();
Collections.addAll(students,student,student2,student3);
//直接通过类名调用方法
Integer maxAgeStudent = StudentUtils.getMaxAgeStudent(students);
System.out.println(maxAgeStudent);
}
}
特点:
1、多用在测试类和工具类中
2、javabean类中很少用
调用方式:
1、类名调用(常用)
2、对象名调用
static使用事项:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student3 {
private String name;
private Integer age;
private char sex;
//静态成员变量
private static String teacherName="阿玮老师";
public void show1(){
System.out.println("student:\t"+name + "\t" + age + "\t" + sex);
//1、可以使用this指代当前student对象,调用对象中的静态方法、非静态方法、静态成员变量
this.show2();
this.show4();
System.out.println(this.teacherName);
//2、非静态可以访问静态方法、非静态方法、静态成员变量
show3();
show4();
System.out.println(teacherName);
}
public static void show2(){
}
public static void show3(){
//1、静态方法只能访问静态方法、静态成员变量,无法访问非静态方法
show2(); //可以直接调用静态方法
System.out.println(teacherName); //可以直接调用静态成员变量
// show1(); //报错==>无法调用非静态方法
//2、this只能指代当前对象,静态方法、静态成员变量是属于类的。this不能在静态中使用。
// this.show2(); //报错==>静态中无法使用this
// this.teacherName; //报错==>静态中无法使用this
// this.show1(); //报错==>静态中无法使用this
}
1、静态方法中,只能访问静态
2、非静态方法可以访问所有
3、静态方法中没有this关键字(this只能指代对象,静态属于类,无法使用this)