Java之static关键字

时间:2022-12-10 00:40:02

动力节点学习笔记

  
 
 
  1.  
  2. /*  
  3.     static修饰的方法叫做静态方法  
  4.           
  5.         一般情况下工具类中的方法大部分都是静态方法。  
  6.           
  7.         静态方法不用创建对象也能直接访问该方法。  
  8.           
  9. */ 
  10. public class StaticTest03{  
  11.       
  12.     //成员方法  
  13.     //成员方法必须使用“引用.”调用  
  14.     public void m1(){  
  15.           
  16.     }  
  17.       
  18.     //静态方法  
  19.     //可以使用“类名.”方式调用.也可以用“引用.”,即使用的是“引用.”,底层还是用的“类名.”  
  20.     //静态方法中不能直接访问非静态数据.  
  21.     //静态方法中不能使用this  
  22.     public static void m2(){  
  23.         System.out.println("m2....");  
  24.     }  
  25.       
  26.     //入口  
  27.     public static void main(String[] args){  
  28.           
  29.         StaticTest03 st = new StaticTest03();  
  30.         st.m1();  
  31.           
  32.         m2();  
  33.           
  34.         //静态的方法按照正规的方式访问:“类名.”  
  35.         //静态的方法也能用“引用.”访问  
  36.         st.m2(); //编译阶段检查出st是StaticTest03类型,编译通过,运行的时候,仍然使用 "StaticTest03."的方式访问。  
  37.                     //该方法执行不需要对象。  
  38.           
  39.           
  40.         //空的引用去访问成员的时候会出现空指针异常。  
  41.         //m2方法不是“成员”而是静态的。  
  42.         //所以即使引用是空的,也不会报空指针异常。  
  43.         StaticTest03 s = null;  
  44.         s.m2();   
  45.           
  46.     }  
  47.       
  48. }  
  49.  

 

 

  
 
 
  1. /*  
  2.     static关键字:  
  3.         1.static修饰的变量叫做“静态变量”.  
  4.         2.static修饰的方法叫做“静态方法”.  
  5.         3.static还可以定义静态语句块.  
  6.       
  7.     以下例子演示:static定义静态语句块  
  8.       
  9.     static定义的静态语句块在类加载阶段执行,并且只执行一次,并且是自上而下的顺序执行。  
  10. */ 
  11. public class StaticTest01{  
  12.       
  13.     //静态语句块  
  14.     static{  
  15.         System.out.println("1");  
  16.     }  
  17.       
  18.     static{  
  19.         System.out.println("2");  
  20.     }  
  21.       
  22.     static{  
  23.         System.out.println("3");  
  24.     }  
  25.       
  26.     static{  
  27.         System.out.println("4");  
  28.     }  
  29.       
  30.     //入口  
  31.     public static void main(String[] args){  
  32.         System.out.println("main execute!  1");  
  33.         System.out.println("main execute!  2");  
  34.     }  
  35.       
  36. }  

 

  
 
 
  1. /*  
  2.     关于实例语句块  
  3.         每一次调用构造方法之前会执行一次。  
  4.         实例语句块执行顺序也是自上而下。  
  5. */ 
  6.  
  7. public class StaticTest02{  
  8.  
  9.     //静态语句块  
  10.     static{  
  11.         System.out.println("A");  
  12.     }  
  13.       
  14.     //实例语句块  
  15.     {  
  16.         System.out.println("1");  
  17.     }  
  18.       
  19.       
  20.     {  
  21.         System.out.println("2");  
  22.     }  
  23.       
  24.       
  25.     {  
  26.         System.out.println("3");  
  27.     }  
  28.       
  29.     //构造方法  
  30.     StaticTest02(){  
  31.         System.out.println("StaticTest02无参数的构造执行!");  
  32.     }  
  33.       
  34.     //入口  
  35.     public static void main(String[] args){  
  36.           
  37.         //调用构造方法  
  38.         new StaticTest02();  
  39.           
  40.         new StaticTest02();  
  41.           
  42.         new StaticTest02();  
  43.     }  
  44. }  

 

  
 
 
  1. /*  
  2.     static修饰的变量叫做“静态变量”  
  3.           
  4.         变量分类:  
  5.             1.局部变量  
  6.             2.成员变量(实例变量,非静态变量)  
  7.             3.静态变量(方法区)  
  8.           
  9.         什么时候变量声明成静态变量?  
  10.             如果这个属性所有的对象都有,并且这个属性的值是相同的,则该属性声明成  
  11.             静态的属性。  
  12.           
  13.           
  14.         成员变量:创建java对象的时候初始化。  
  15.         静态变量:在类加载阶段赋值,并且只赋值一次。  
  16. */ 
  17. public class StaticTest04{  
  18.       
  19.     public static void main(String[] args){  
  20.           
  21.         Animal a1 = new Animal("AAA",10);  
  22.         Animal a2 = new Animal("BBB",11);  
  23.           
  24.         //如何访问(类名.)  
  25.         System.out.println(Animal.type);  
  26.           
  27.         //也可以使用 引用.  
  28.         System.out.println(a1.type);  
  29.           
  30.           
  31.         Animal a3 = null;  
  32.         System.out.println(a3.type); //静态变量底层访问的时候一定使用的  类名. 和对象无关,不会出现空指针异常。  
  33.           
  34.     }  
  35. }  
  36.  
  37.  
  38. //抽象现实世界中的“陆生”动物  
  39. class Animal{  
  40.       
  41.     //Field  
  42.     //成员变量(一个对象一份.)  
  43.     //成员变量在创建对象的时候初始化,并且存储在堆中的每一个对象中。  
  44.     String name;  
  45.     int age;  
  46.       
  47.     //静态变量,被存储在方法区.  
  48.     //所有的java对象共享这一份。  
  49.     //所以静态变量是类级别的,使用“类名.”的方式访问.  
  50.     static String type = "陆生";  
  51.       
  52.     //Constructor  
  53.     Animal(String name,int age){  
  54.         this.name = name;  
  55.         this.age = age;  
  56.     }  

 

  
 
 
  1.  
  2. /*  
  3.     关于代码的顺序  
  4. */ 
  5. public class StaticTest05{  
  6.       
  7.     //编译通过  
  8.     static int i = 100;  
  9.       
  10.     static{  
  11.         System.out.println(i);  
  12.     }  
  13.       
  14.       
  15.       
  16.     //非法向前引用  
  17.     /*  
  18.     static{  
  19.         System.out.println(i);  
  20.     }  
  21.       
  22.     static int i = 100;  
  23.     */ 
  24.       
  25. }  

 

  
 
 
  1. /*  
  2.  
  3.     类{  
  4.           
  5.         //可以通过“类名.”,也可以通过“引用.”,即使使用“引用.”底层也是“类名.”  
  6.         //1.静态变量  
  7.         //2.静态方法  
  8.           
  9.         //必须对象存在才可以访问,采用“引用.”  
  10.         //3.成员变量  
  11.         //4.成员方法  
  12.           
  13.         //创建对象,给成员变量赋值  
  14.         //5.构造方法  
  15.           
  16.         //类加载时只执行一次。  
  17.         //6.静态语句块  
  18.           
  19.         //构造方法没调用之前执行一次。  
  20.         //7.实例语句块  
  21.           
  22.         //用在成员方法和构造方法中。  
  23.         //8.this  
  24.     }  
  25.       
  26.     空指针异常:空引用访问成员  
  27.       
  28. */