Java关于数据的使用范围

 主函数一般定义为静态:

public static void main(String[] args) {

}

静态方法不能访问非静态数据域和非静态方法。下面例子

public class Display {
     int value = 0;  //非静态数据
     int limit = 0;   //非静态数据
    
    public Display(int limit) {
        //定义构造函数
        this.limit = limit;
    }
    public void increase() {
        //定义成员函数
        value++;
        if(value == limit)
            value = 0;
    }
    public int getValue() {
        //定义get方法
        return value;
    }

    public static void main(String[] args) {
      System.out.println(value);//错误:静态方法不能访问非静态数据(在同一个类中也不行)        
   }

 

 

 修改如下:

 

public class Display {
     static int value = 0;//静态数据
     int limit = 0;//非静态数据
    
    public Display(int limit) {
        //定义构造函数
        this.limit = limit;
    }
    public void increase() {
        //定义成员函数
        value++;
        if(value == limit)
            value = 0;
    }
    public int getValue() {
        //定义get方法
        return value;
    }

    public static void main(String[] args) {
        
        System.out.println(value);//true:静态方法能访问非静态数据
        
    }
}

通过对象访问非静态数据。如果想要让一个类的所有实例共享数据,就要使用静态变量,也称类变量。

如果某个对象修改了静态变量的值,那么同一个类的所有对象都受到影响。

如何判断一个变量或方法应该是实例还是静态的?如果一个变量或方法依赖于类的某个具体实例,就应该将他定义为实例变量或实例方法。如果一个变量不依赖于类的某个具体实例,就将他定义为静态的。例如:每个圆都有自己的半径,半径都要依赖某个圆,所以半径radius就是Circles类的一个实例变量。

public class Display {
    static int value = 0;//静态变量
     int limit = 0;//实例数据(非静态变量)
    
    public Display(int limit) {
        //定义构造函数
        this.limit = limit;
    }
    public void increase() {
        //定义成员函数
        value++;
        if(value == limit)
            value = 0;
    }
    public int getValue() {//非静态方法可以访问静态变量
        //定义get方法
        return value;
    }
    public static void dispValue() {//静态方法
        value++;//静态方法可以访问静态变量
        limit++;//错误:静态变量不能访问非静态变量
    }

    public static void main(String[] args) {
        
        System.out.println(value);//error:静态方法不能访问非静态数据(在同一个类中也不行)
        
        System.out.println(Display.value);
        System.out.println(Display.limit);//错误:非静态数据不可以通过(类名.变量名)使用
        Display t = new Display(1);
        System.out.println(t.value);//静态数据也可通过对象访问,但一般不这么做,太麻烦了
        System.out.println(t.limit);//非静态数据一般通过对象来访问
        
        
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值