一、static关键字的作用
有时候我们希望某些特点的数据在内存独一份,而且能被实例对象所共享,比如一个学校的学生的学校名都是一致的,我们没必要在每个学生对象中都定义一个学校名而是在对象以外的空间定义一个表示学校名称的变量来让所有对象所共享,这是就会用到static关键字。
二、static修饰属性和方法
1.修饰属性
按是否使用static修饰又分为静态属性和非静态属性 假如创建了类的多个对象,每个对象都独立的拥有一套非静态属性,一个对象中的非静态属性改变是不会影响另一个对象的非静态属性的,但是多个对象会共享同一个静态属性public class 静态 {
public static void main(String[] args) {
chinese c1=new chinese();
c1.name="王少";
c1.age=18;
chinese c2=new chinese();
c2.name="王大少";
c2.age=19;
c1.nation="CNN";
System.out.println(c2.nation);
}
}
class chinese{
String name;
int age;
static String nation;
}
在这个例子中nation便是一个静态属性当c1.nation为CNN时c2.nation也将变成CNN
注意
1.静态变量随着类的加载而加载,可以通过“类.静态变量”的方式调用
2.静态变量的加载时早于对象的创建的
3.类只会加载一次,则静态变量在内存中也只会存在一份,存在方法区的静态域中。
(4)静态变量和成员变量的区别
A:调用方式
静态变量也称为类变量,可以直接通过类名调用。也可以通过对象名调用。
这个变量属于类。
成员变量也称为实例变量,只能通过对象名调用。这个变量属于对象。
B:存储位置
静态变量存储在方法区长中的静态区。
成员变量存储在堆内存。
C:生命周期
静态变量随着类的加载而存在,随着类的消失而消失。生命周期长。
成员变量随着对象的创建而存在,随着对象的消失而消失。
D:与对象的相关性
静态变量是所有对象共享的数据。
成员变量是每个对象所特有的数据。
2.修饰方法
1.也是以通过“类.静态方法”的方式调用。 2.静态方法中只能调用静态方法或者属性public class 静态 {
public static void main(String[] args) {
chinese c1=new chinese();
c1.name="王少";
c1.age=18;
chinese c2=new chinese();
c2.name="王大少";
c2.age=19;
c1.nation="CNN";
System.out.println(c2.nation);
}
}
class chinese{
String name;
int age;
static String nation;
public static void hh()
{
hh1();
}
public void hh1()
{
System.out.println("11");
}
public static void hh2()
{
System.out.println("22");
}
}
可以看到当静态方法调用非静态方法hh1时提示不可以在static方法中调用非static方法
```c
public static void hh()
{
hh2();
}
调用静态方法hh2则不会有任何问题
由此可知在静态方法中是不可以使用this和super关键字的