1、static可以用来修饰属性,方法,代码块,内部类
2、使用static修饰属性
3.1属性按是否使用static可以分为静态属性和非静态属性(实例变量)
实例变量:我们创建了类的多个对象,每个对象都独立拥有一套类中的非静态属性,当修改其中一个非静态属性的值时,不会导致其他对象的非静态属性得值得修改
静态变量:我们创建了类的多个对象,多个对象共享一套静态变量,当通过某个对象修改静态变量时,会导致其他变量调用此静态变量时,是修改过的
3.2static修饰属性得其他说明
①静态变量随着类的加载而加载,可以通过“类.静态变量”得方式进行说明
②静态变量的加载早于对象的创建
③由于类只会加载一次,则静态变量在内存中也只会存在一份,存在方法区的静态域中
④
类变量 | 实例变量 | |
类 | √ | |
对象 | √ | √ |
3.3静态属性举例:System,out; Math.PI
4.使用static修饰返回方法
①随着类的加载而加载,可以通过“类.静态方法”的方式进行说明
②
静态方法 | 非静态方法 | |
类 | √ | |
对象 | √ | √ |
③静态方法中,只能用静态方法或属性
非静态方法中,既可以使用非静态方法或属性,也可调用静态的方法或属性
5. static注意点
在静态方法中,不能使用this,super关键字
class Chinese{
private String id;
private String name;
private static String area="中国";
public Chinese(String id, String name) {
super();
this.id = id;
this.name = name;
}
public Chinese() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getArea() {
return area;
}
public static void setArea(String area) {
Chinese.area = area;
}
@Override
public String toString() {
return "Chinese [id=" + id + ", name=" + name + "]";
}
}
public class StaticTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Chinese p1 = new Chinese();
Chinese p2 = new Chinese();
p1.setId("123456");
p1.setName("张三");
p2.setId("234566");
p2.setName("李四");
System.out.println(p1);
System.out.println(p2);
System.out.println(p1.getArea());
System.out.println(p2.getArea());
p1.setArea("法国");
System.out.println(p1.getArea());
System.out.println(p2.getArea());
}
}
结果:
Chinese [id=123456, name=张三]
Chinese [id=234566, name=李四]
中国
中国
法国
法国