1. 成员变量

定义格式: [修饰符] 类型 成员变量名列表;

特性

  1. 成员变量的变量名是唯一的.
  2. 成员变量的类型可以为任意数据类型,也包括类.
  3. 它的作用范围是总个类,类中所有方法都可以直接访问成员变量.
  4. 成员变量的修饰符为可选项,主要对变量进行控制和限定作用.

修饰符public,protected,private,final

列子

class Person {
    int no;
    String name;
    Brithday day;  // day的类型为类Brithday
}

class Brithday {
    int year;
    int month;
    int date;
}

2. 局部变量

定义格式:类型 成员变量名列表;

特性

  1. 局部变量的变量名是唯一的.
  2. 类型可以为任意数据类型,也包括类.
  3. 一般定义在方法体中,作用范围为方法体内
  4. 不能添加修饰符,否则会编译报错

列子

public class Test {
    final int a = 8;
    public void display() {
        //public int a= 4;  //java: 非法的表达式开始
        int a= 4;
        System.out.println(a);
    }
    public static void main(String[] args) {
        Test test = new Test();
        test.display();   // 4
    }
}

上面例子中,输出的值是方法display的局部变量a的值4,并不是成员变量a的值8,原因是当局部变量与成员变量的变量名相同时,成员方法中会优先使用数据自己的局部变量,如果没有该局部变量才会去成员变量中寻找。

但是就算发送变量重名,我只是要用成员变量时,在变量的引用时加上this关键字 如System.out.println(this.a); 这样输出一定是位类的成员变量。

3. 静态变量和静态方法

首先了解一个概率

实例变量

对于不同的对象而言,它们在内存中的存储空间通常是独立的,对某个对象成员变量的值发送改变不会影响到其它的对象,把这种属于单个对象的成员变量称为实例变量。

静态变量

定义格式:static [修饰符] 类型 成员变量名列表;

静态变量则是能够使一个类的不同实例都可以共用同一个变量,在一个成员变量前加上static 修饰符则就成为静态变量,注意的是静态变量可以有修饰符。

class Person {
    static int no;     // 静态变量
    final String name; // 成员变量
    
    public void display() {
        int a;         // 局部变量
    }
}

特性

  1. 静态变量不在属于某个实例或者对象,而是属于整个类;
  2. 可以通过类名直接进行访问静态变量
  3. 当一个实例或对象对静态变量进行修改后,该类的所有实例中的值都会发生改变

例子:

public class Test {
    static int a = 8;

    public void display() {
        System.out.println(a);
    }
    public static void main(String[] args) {
        Test.a = 0;              // 直接通过类名访问静态变量
        Test test1 = new Test();
        Test test2 = new Test();
        // 当一个实例或对象对静态变量进行修改后,该类的所有实例中的值都会发生改变
        test1.display();   // 0
        test2.display();   // 0
    }
}

静态方法

类似的,在成员方法前加上static修饰符则为静态方法,同样也可以直接通过类名访问静态方法

public class Test {
    static public int a = 8;  // 静态变量

    static public void display() {
        System.out.println(a);  // 引用静态变量
    }
    public static void main(String[] args) {
       Test.display();    // 直接通过类名访问静态方法
    }
}

但要注意的是: 静态方法中不能直接引用成员变量,而只能引用静态变量

public class Test {
    public int a = 8;  //成员变量

    static public void display() {
        System.out.println(a); // 报错:无法从静态上下文中引用非静态 变量 a
    }
}
最后修改:2021 年 07 月 01 日 04 : 26 PM
如果觉得我的文章对你有用,请随意赞赏