JavaBasis
0、static 关键字
- static 为关键字,可修饰变量、方法、代码块、内部类,且被修饰的信息都只会被加载一次
- 被 static 修饰表示静态的
a、static 修饰变量 : 静态变量
① 随着类的加载而加载到静态区,与类同级,也叫做类变量,可以通过 类名.(类名点)的方式来直接调用静态变量,也可以通过对象调用
② 静态区会给静态变量赋予默认初始值(详细系统默认初始值请查看 :系统默认初始值、方法以及方法重载
③ 类创建的所有对象都共享同一个静态变量
④ 属性是否需要被共享,如果需要被共享就可以加上 static 进行修饰
public class Test {
/* 验证 ③类创建的所有对象都共享同一个静态变量 */
public static void main(String[] args) {
// 创建第一个 Student 对象,并赋值
Student s1 = new Student();
s1.name = "小明";
s1.country = "中国";
// 创建第二个 Student 对象,只对其名字进行赋值
Student s2 = new Student();
s2.name = "小红";
//输出打印
System.out.println(s1);
System.out.println(s2);
System.out.println("---------分隔符-----------");
//改变小红中的 country 属性
s2.country = "China";
//再次输出打印
System.out.println(s1);
System.out.println(s2);
}
}
class Student{
//非静态属性
public String name;
//静态属性
public static String country;
//无参构造
public Student (){
}
//toString 方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
"country='" + country + '\'' +
'}';
}
}
结果 :
Student{
name='小明'country='中国'}
Student{
name='小红'country='中国'}
---------分隔符-----------
Student{
name='小明'country='China'}
Student{
name='小红'country='China'}
从上面案例中,
创建 s1 时对其 name 和 country 属性都赋值;创建 s2 时只对其 name 赋值,但是打印时发现,s2 的 country 属性也同样被赋予值 “中国”;
当只对对 s2 country 属性进行修改成 "China"时,s1 country 属性也同样被修改成了 “China”。说明:类创建的所有对象都共享同一个静态变量
b、static 修饰方法 :静态方法
① 随着类的加载而加载到静态区,与类同级,也叫类方法,可以通过 ==类名.==方式来调用,也可以通过对象调用