static静态关键字的应用

/*

     1. 静态变量:是由静态修饰符static来修饰的,是类的变量,但是不属于任何一个类的具体对象,也就是说,也就是说,对于该类的任何一个具体的对象来说,静态变量是一个公共的存储单元,任何一个类的对象在访问这个存储单元时,都会获得一个同样的数值,同样,任何一个类在修改这个存储单元时,也都会完成相同的操作。这样我们就可以理解成对象共享了静态变量。

     2. 静态方法也是由static修饰符来修饰的,静态方法是属于整个类的方法:

          首先,调用静态方法时,应该是使用类名做前缀进行调用,而不是用  类名  c=new 类名();创建对象名来调用,因为静态方法属于整个类的方法。

          其次,非静态的方法属于某个对象的方法,是在这个对象在被创建时,系统为对象的方法在内存中分配单独的专用空间;而静态的方法则是属于整个内的方法,它随着类的定义而在内存中进行分配,不属于任何一个对象。

     最后,静态方法属于整个类的,因此它不能对某个对象的成员进行操作和处理,而只能对某个类的成员变量进行操作和处理,也就是说,静态方法只能处理静态数据。

     3. 静态方法中没有this引用,不能在静态方法中访问非静态的成员和方法

     4. 在同一个类中,静态的方法不能调用非静态的方法,但是在非静态方法中能调用静态的方法;

*/

 

实例如下:

     定义了两个类TestStatic和StaticBlock

 

StaticBlock类:

class StaticBlock
{
      static String a="static的用法!";
      
//创建一个非静态的变量
      int sum=0;
      //静态方法中只能引用,静态的方法和变量
      static void speak()
      {
            System.out.println("a="+a);
            //在静态方法中不能用this关键字
            //this.speak1();

            //在静态方法中调用静态方法
            speak1();
  
            
/*调用非静态的变量,产生错误:
             无法从静态上下文中引用非静态 变量 b
            System.out.println("b="+b);
            */
            
//调用错误,不能在静态方法中调用非静态的方法
            //sum1();
 }

 void sum1()
 {
       int a=1;
       int b=2;
       sum=a+b;
       System.out.println("sum="+sum);
  
//调用正确,在非静态的方法中能调用静态的方法
       this.speak();
 }
 

 static void speak1()
 {
       System.out.println("a="+a);
  
 
       
/*调用非静态的变量,产生错误:
        无法从静态上下文中引用非静态 变量 b
       System.out.println("b="+b);
       */
       //调用错误,不能在静态方法中调用非静态的方法
       //sum1();
 }
}

TestStatic类:

class TestStatic
{

 public static void main(String[] args)
 {
       System.out.println("我喜欢学习java");
  
       
/*
       用new创建对象的方式来调用静态方法,编译时会产生如下错误:
               TestStatic.java:19: 找不到符号
               符号: 变量 StaticBlock
               位置: 类 StaticBlock
               st.StaticBlock.speak();
                    ^
       StaticBlock st=new StaticBlock();
       st.StaticBlock.speak();
       */
       
//类名,直接调用StaticBlock中的静态方法
  StaticBlock.speak();

 }
}

posted @ 2008-12-13 15:46  一岁  阅读(295)  评论(0编辑  收藏  举报