Java自学笔记系列十二:封装(六) static关键字

    初次学Java我们都会看到一个入门的小例子叫做:

  
  
  
  
  1. class Hello{ 
  2.    public static void main(String[] args){ 
  3.       System.out.println("HelloWorld"); 
  4. /* 输出结果如下: 
  5.    HelloWorld 
  6. */ 

  逐步深入的学习,都会发现主函数的修饰符中的static关键字,亦或是在定义一个函数的时候,有main函数直接访问也会定义成static void method(),如下面的程序片段:

  
  
  
  
  1. class Test  
  2.     static void method(){ 
  3.         System.out.println(" Function method() "); 
  4.     } 
  5.  
  6.     public static void main(String[] args)  
  7.     { 
  8.         method(); 
  9.         //实际是: Test.method(); 
  10.     } 
  11. /*输出结果是: 
  12.  Function method() 
  13. */ 

 1,static关键字:用来修饰成员(成员变量和成员函数),也成为类成员.未被static修饰的又称为对象成员.

 2,被修饰后的成员具备以下特点:

    <1>随着类的加载而加载,随着类的消失而消亡

    <2>优先于对象存在

    <3>被所有对象所共享,凡是类的实例对象均可以调用静态成员.

    <4>可以直接被类名调用,格式是: 类名.静态成员(变量或者方法),类名也可以省略.

 3,注意事项

    <1>静态方法只能访问静态成员(变量和方法)

    <2>非静态方法可以访问静态成员(变量和方法),也可以访问非静态成员.

    <3>静态方法中不可以写this,super关键字.

       (this,super是和对象引用相关的关键字,是在对象被创建后才能够用来访问,而static成员则是优先于对象存在的.)

    <4>主函数main是静态的.

    <5>静态代码块:

     格式:  static{要执行的内容}

         随着类的加载而加载,并且执行一次,且优先于主函数执行,用于给类进行初始化.

 4,static出现的时机:

    <1>对象访问成员的时候出现大量的共同数据时候,该变量可以定义为静态的.

    <2>若一个方法内部没有"非"静态数据(即是对象持有的数据),该方法可以定义为静态的.

     static 关键字在实际项目的应用非常广泛.

  下面的这个例子来说明以上特点注意事项: 请仔细阅读下面的代码. 

  
  
  
  
  1.  class Test{ 
  2.         
  3.       int age; //普通成员 
  4.  
  5.       static String attribute = "奇女子"//静态成员 
  6.  
  7.        Test(){ 
  8.        } 
  9.        //静态块 
  10.        static { 
  11.            System.out.println("世间的奇女子们......"); 
  12.        } 
  13.  
  14.       
  15.        public static void FengJie(String n){ 
  16.           
  17.          System.out.println(n + " 是一个 " + attribute); 
  18.  
  19.          //System.out.println("QiNvZi's age is :" + age); 
  20.          //无法从静态上下文中引用非静态变量age 
  21.  
  22.          // method(); 
  23.          //无法从静态上下文中引用非静态方法  
  24.        } 
  25.  
  26.  
  27.        public void method(){ 
  28.            System.out.println("想要成为奇女子"); 
  29.        } 
  30.  
  31.  
  32.        public void toBeQiNvZi(String n){ 
  33.           FengJie(n); 
  34.           System.out.println(n + "的年龄是:" + this.age); 
  35.           method(); 
  36.            
  37.        } 
  38.  
  39.        
  40.  
  41.       public static void main(String[] args){ 
  42.  
  43.         System.out.println("---------------------------"); 
  44.         System.out.println("你是世间的:" + Test.attribute); 
  45.         System.out.println("你是世间的:" + attribute); 
  46.         /*可以从以下两点解释 
  47.          1,main是静态的,不能引用非静态成员. 
  48.          2,age是普通成员变量只能用对象来访问. 
  49.         System.out.println("QINvZI:" + Test.age); 
  50.         System.out.println("QINvZI:" + age); 
  51.         */ 
  52.         System.out.println("---------------------------"); 
  53.         FengJie("凤姐"); 
  54.         Test.FengJie("凤姐"); 
  55.  
  56.         System.out.println("---------------------------"); 
  57.         Test t = new Test(); 
  58.         t.age = 28
  59.         t.toBeQiNvZi("芙蓉"); 
  60.         t.FengJie("凤姐"); 
  61.  
  62.  
  63.         
  64.       } 
  65.  } 
  66. /*输出结果 
  67.  
  68. 世间的奇女子们...... 
  69. --------------------------- 
  70. 你是世间的:奇女子 
  71. 你是世间的:奇女子 
  72. --------------------------- 
  73. 凤姐 是一个 奇女子 
  74. 凤姐 是一个 奇女子 
  75. --------------------------- 
  76. 芙蓉 是一个 奇女子 
  77. 芙蓉的年龄是:28 
  78. 想要成为奇女子 
  79. 凤姐 是一个 奇女子 
  80. */ 

 

本文出自 “IvanTian” 博客,转载请与作者联系!

你可能感兴趣的:(static,静态块,静态成员,对象成员)