这已经是 百家拳软件项目研究室的第16次课了,在我们前几次课的基础上,我们继续学习一下 百家拳软件项目研究室的第16次课了,在我们前几次课的基础上,我们继续学习一下 java的语法。这回我们,讲 static关键字。

    static 关键字可以用来修饰类的变量,方法和内部类。static是静态的意思,也是全局的意思它定义的东西,属于全局与类相关,不与具体实例相关。就是说它调用的时候,只是ClassName.method(),而不是new ClassName().method()。new ClassName()不就是一个对象了吗?static的变量和方法不可以这样调用的。它不与具体的实例有关。 实践:


class 
  Count {
 
     
 private 
 int 
 serialNumber 
 ;
 
     
 public 
 static 
 int 
 counter 
  = 0;  
 // 
 一个静态变量 
 counter
 
     
 public 
  Count() {
 
        
 counter 
 ++;    
 // 
 创建 
 Counter 
 的时候递增
 
        
 serialNumber 
  =  
 counter 
 ;}
 
     
 public 
 int 
  getSerialNumber(){
 
        
 return 
 serialNumber 
 ;
 
    }}
 
 
 class 
  OtherClass {
 
     
 public 
 int 
  increment(){
 
        
 return 
  Count. 
 counter 
 ++; 
 // 
 静态的变量不属于任何实例只能直接用类调用
 
    }}
 
 
 public 
 class 
  TestStaticVar {
 
     
 public 
 static 
 void 
  main(String[] args){
 
       Count[] cc =  
 new 
  Count[10];
 
       OtherClass o =  
 new 
  OtherClass();
 
        
 for 
  ( 
 int 
  i=0;i<cc. 
 length 
 ;i++){
 
           cc[i] =  
 new 
  Count();
 
           System. 
 out 
 .println( 
 "cc[" 
 +i+ 
 "].serialNumber = " 
 +cc[i].getSerialNumber());
 
           System. 
 out 
 .println(o.increment());
 
       }}} 
 查看结果

    类的方法中带有 static 关键字,这个方法就是静态方法。静态方法也是要通过类名,而不是实例访问。 实践:

class 
  GenerealFunction {
 
     
 public 
 static 
 int 
  add( 
 int 
  x, 
 int 
  y){
 
        
 return 
  x+y;
 
}}
 
 
 public 
 class 
  UseGeneral {
 
     
 public 
 static 
 void 
  main(String[] args){
 
        
 // 
 调用时还是用类直接调用
 
        
 int 
  c = GenerealFunction.add(19,18);
 
         System. 
 out 
 .println( 
 " 
 结果是 
 " 
 +c);
 
}}

    注意: 子类不能重写父类的静态方法哦,也不能把父类不是静态的重写成静态的方法。想隐藏父类的静态方法的话,在子类中声明和父类相同的方法就行了。
    前一阵子有同学问了, main() 是什么意思啊? main() 的前面不是也有一个 static 吗,它也是静态方法。它是程序的入口点,就是说 java 的程序是由 java 虚拟机执行的, java 语言和虚拟机的入口就是 main() 。因为它是 static的,这可以使JVM不创建实例对象就可以运行该方法。因此我们在main() 中调用别的类的非静态方法,就要创建实例。像上面的例子: OtherClass o = new OtherClass();


System. out .println(o.increment()); 不用实例 o 去调用是不行的。


前面我们已经见到很多这样的例子了。


大家看一个错误的例子:


int x;
 
public static void x() {
 
    x = 15; // 
 这个是错误的,x是非静态变量 

 
}


static 还可以修饰程序块 用 {} 括起来,用法与上述两种方法相同

public class 
  StaticInit {
 
  
 public static int 
  count = 1;
 
 static {
 
    count =  
 Integer 
 .getInteger("myApplication.counter").intValue();
 
 }
 
}