Java基础(8) | static
# 什么是static?
static是Java中的一个保留关键字
# 用途
1.用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量。
2.用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。
3.静态代码块
# 修饰变量或方法
## 定义Student类
package com.leerep.javabase.theStatic;
public class Student {
private String name;
private int age;
private int id;
static String room; //一个班级内所有的同学的教室应该是同一间教室
private static int idCounter; //id计数器
/*
* 使用static修饰的变量不在属于对象,而是属于所在的类。多个对象共享同一份数据。
*
* 使用static修饰成员方法,那么就变成了静态方法,静态方法不属于对象,而是属于所在的类。
* 静态方法推荐使用:类名.静态方法名()
* 对象.静态方法名() 这种写法虽然也可以,但是不推荐,其底层也是经过javac编译后翻译为类名称.静态方法名()
*
* 静态方法不能访问非静态变量,静态方法不能使用this关键字,this表示当前对象
* */
public Student() {
this.id = ++idCounter;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
this.id = ++idCounter;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", id=" + id +
", room=" + room +
'}';
}
public static int getStudentCounter(){
return idCounter;
}
}
## demo代码
package com.leerep.javabase.theStatic;
import java.util.ArrayList;
/*
* 使用static修饰成员方法,那么就变成了静态方法,静态方法不属于对象,而是属于所在的类。
* 静态方法推荐使用:类名.静态方法名()
* 对象.静态方法名() 这种写法虽然也可以,但是不推荐,其底层也是经过javac编译后翻译为类名称.静态方法名()
* */
public class Demo {
public static void main(String[] args) {
Student s = new Student("libai", 18);
Student t = new Student("dufu", 15);
Student.room = "ak101"; //推荐使用 类名.静态变量名 访问静态变量
System.out.println(s);
System.out.println(t);
int num = Student.getStudentCounter(); //调用静态方法
System.out.println("Student类共有:" + num + "个对象");
ArrayList<Student> students = new ArrayList<>();
for (int i = 0; i < 10; i++) {
students.add(new Student("学生" + i, 10 + i));
}
System.out.println("students的大小为:" + students.size());
System.out.println("Student类共有:" + Student.getStudentCounter() + "个对象"); //调用静态方法
}
}
# 静态代码块
##定义Person类
package com.leerep.javabase.theStatic;
/*
* 静态代码块
* static{}
* 特点:
* 当第一次用到本类时,静态代码块执行唯一的一次
* 静态内容总是优先于非静态内容,所以静态代码块比构造方法先执行
*典型用途:用来一次性的对静态成员变量进行赋值
* */
public class Person {
String name;
int age;
static String info;
static {
info = "对静态变量赋值";
System.out.println(Person.info);
}
public Person() {
System.out.println("构造方法执行!");
}
public Person(String name, int age) {
this.name = name;
this.age = age;
System.out.println("构造方法执行!");
}
}
## 代码演示
package com.leerep.javabase.theStatic;
public class StaticCode {
public static void main(String[] args) {
Person p = new Person("libai", 18);
Person e = new Person("dufu", 15);
}
}