Java static修饰属性(类变量)、static修饰方法(类方法)

来源:互联网 发布:广西广电网络三网合一 编辑:程序博客网 时间:2024/05/16 03:11

注:静态的结构(static的属性、方法、代码块、内部类)的声明周期要早于非静态类,同时被回收也晚于非静态类。



一、static修饰属性(类变量)

 1.由类创建的所有的对象,都共用这一属性。

 2.类变量随着类的加载而加载,即使此类还未new过对象,这个类变量也存在,而且仅一份;

 然而,实例变量是类new过之后才有的,而且每个对象都存一份。

 3.类变量的加载早于对象。

 4.类变量存放在静态域中。


[java] view plain copy
  1. public class TestSportsMan {  
  2.     public static void main(String[] args) {  
  3.         SportsMan sp1 = new SportsMan("刘翔",18);  
  4.         SportsMan sp2 = new SportsMan("姚明",20);  
  5.         System.out.println(sp1);//SportsMan [name=刘翔, age=18, nation=null]        
  6.         System.out.println(sp2);//SportsMan [name=姚明, age=20, nation=null]  
  7.           
  8.         /** 
  9.          * SportsMan类中的nation属性是static修饰的,由这个类创建的对象都共用这个属性。 
  10.          *  
  11.          * 类变量的加载早于对象,所以既可以用“sp1.nation”,也可以用“SportsMan.nation”调。 
  12.          *  
  13.          * 当其中一个对象对此类变量进行修改,会影响其他对象的类变量的一个调用。 
  14.          */  
  15.         System.out.println("SportsMan.nation="+SportsMan.nation);//SportsMan.nation=null  
  16.         sp1.nation = "China";  
  17.         System.out.println("SportsMan.nation="+SportsMan.nation);//SportsMan.nation=China  
  18.         SportsMan.nation = "PRC";  
  19.         System.out.println("SportsMan.nation="+SportsMan.nation);//SportsMan.nation=PRC  
  20.           
  21.         System.out.println(sp1);//SportsMan [name=刘翔, age=18, nation=PRC]  
  22.         System.out.println(sp2);//SportsMan [name=姚明, age=20, nation=PRC]  
  23.     }  
  24. }  
  25.   
  26. class SportsMan {  
  27.     String name;  
  28.     int age;  
  29.     static String nation;  
  30.       
  31.     public SportsMan(String name, int age) {  
  32.         super();  
  33.         this.name = name;  
  34.         this.age = age;  
  35.     }  
  36.       
  37.     public String getName() {  
  38.         return name;  
  39.     }  
  40.     public void setName(String name) {  
  41.         this.name = name;  
  42.     }  
  43.     public int getAge() {  
  44.         return age;  
  45.     }  
  46.     public void setAge(int age) {  
  47.         this.age = age;  
  48.     }  
  49.   
  50.     @Override  
  51.     public String toString() {  
  52.         return "SportsMan [name=" + name + ", age=" + age + ", nation=" + nation + "]";  
  53.     }  
  54. }  

二、static修饰方法(类方法)

1.随着类的加载而加载,就算没有new类,类方法还是存在,且仅存在一份。

2.类方法内部可以调用静态的属性和静态的方法,而不能调用非静态的属性和方法;

反之,非静态方法可以调用静态的属性和方法。
阅读全文
0 0
原创粉丝点击