001.java中static的用法

static的作用:
1.将对象层级提升为类层级 (即将对象可以调用的,提升为对象和类均可调用的成员);            //推荐使用类来调用   ClassNme.静态成员 (包括变量、方法、成员对象)
2.static修饰的成员,在类加载时即准备完成,而不需要创建对象;   //类加载只做一次:1  类名. 的时候会类加载; 2  new 对象时会类加载
3.静态成员方法只能访问静态成员,不能访问非静态成员(因为调用该方法时可能还没有创建对象);    而非静态成员方法既能访问非静态成员,又能访问静态成员(因为静态成员被所有对象共享)
4.提高运行时的优先级,如:静态代码块(见下)
 1 /*
 2      编程实现static关键字使用方式的测试
 3  */
 4 public class TestStatic{
 5 
 6     private int cnt = 1; //隶属于对象层级,每个对象都拥有独立的一份  成员变量
 7     private static int snt = 2; //隶属于类层级,整个类只有一份
 8 
 9     public void show(){ //隶属于对象层级  成员方法
10                 System.out.println("cnt = " + cnt); //1
11         System.out.println("snt = " + snt); //2
12     }
13 
14     public static void test(){ //隶属于类层级  推荐类名.的方式
15         //System.out.println("cnt = " + cnt); //error 
16         System.out.println("snt = " + snt); //2
17     }
18 
19     public static void main(String[] args){
20 
21             TestStatic ts = new TestStatic();
22         ts.show();
23         TestStatic.test();
24     }
25 }
View Code

上图解析:创建c1时,numOfCats == 1;创建c2时,numOfCats == 3;   //因为此时共用的同一个numOfCats

 深入理解:

   通常情况下成员变量隶属于对象层级,也就是每当创建一个对象就会拥有独立的内存空间来存放独立的成员变量信息(在堆中),若所有对象中某个成员变量完全相同时(如户籍管理系统中的国籍),还要各自存储,则会造成内存空间的浪费。
   为了解决上述问题则使用static关键字修饰该成员变量表达静态的含义,此时该成员变量由对象层级提升为类层级只有一份,并被所有对象共享,会随着类的加载而准备就绪,与是否创建对象无关。此时使用静态成员变量推荐用  类名.静态成员变量名    进行访问,
 
代码块 -- java允许直接用{}写代码,叫代码块。 //jdbc中需要在类加载时 (在对象创建之前),要加载数据库驱动
写在类体中的代码块叫构造块,每创建一个对象,构造块都会被执行一次。  
前面加static的构造块叫静态代码块,类加载时执行一次。
原文地址:https://www.cnblogs.com/keenly/p/9860550.html