疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java中的静态变量,常量和方法


 

 
 
static关键字 
由static修饰的变量,常量和方法被称为静态变量,常量和方法。
 
public class StaticTest1{
 
static int i = 10;
 
public void method(){
    System.out.println("调用method方法");
    for(i=0;i<3;i++){
        System.out.print(i+"");
        if(i==2)
        System.out.print(" ");
    }
}
 
public static void main(String[] args){
    StaticTest1 S1 = new StaticTest();   //创建一个对象
    StaticTest1 S2 = new StaticTest();   //创建另一个对象
    S1.i = 60;                           //修改静态变量i的值
    System.out.println("第一个实例对象调用变量i的结果:"+S1.i);
    System.out.println("第二个实例对象调用变量i的结果:"+S2.i);
    S2.method();
    System.out.println("第一个实例对象调用变量i的结果:"+S1.i);
    System.out.println("第二个实例对象调用变量i的结果:"+S2.i);
}
 
}
 
结果如下:
 
第一个实例对象调用变量i的结果:60 
第二个实例对象调用变量i的结果:60 
0 1 2 
第一个实例对象调用变量i的结果:3 
第二个实例对象调用变量i的结果:3
 
可见无论是通过S1改变 i 的值还是通过S2改变 i 的值,两个对象中变量 i 的值都同时发生了变
 
化,这正是静态成员变量的效果,即对象S1和对象S2中的变量 i 都指向了同一块内存区域。
 
public class StaticTest2{
 
static double PI = 3.1415;         //在类中定义静态常量
static int id;                     //在类中定义静态变量
 
public static void method(){       //在类中定义静态方法
    //doSomething       
}
 
public void method2(){
    id = 1;
    System.out.println(StaticTest2.PI);   //调用静态常量
    System.out.println(StaticTest2.id);   //调用静态变量
    StaticTest2.method();                 //调用静态方法
 
public static void main(String[] args){
    method();
    method2();
}
 
}
 
结果如下:
 
3.1415 
1
 
可以看到,在main(String[] args)方法中并没有先new一个StaticTest类对象再进行方法调用
 
,而是直接调用了method()方法和method2()方法。这是因为主方法是静态的,如果要直接在
 
主方法中调用其他方法,则该方法必须也是静态的。
 
关于静态方法,Java语言有两点规定: 
1.在静态方法中不可以使用this关键字 
2.在静态方法中不能直接调用非静态方法
 
同时Java规定不能将方法体内的局部变量声明为static的:
 
public class example{
 
public void wrongMethod(){
    static int i = 0;     // 错误,不可将方法体内的局部变量声明为static
}
 
}