哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!

这一节啊,咱们要学习的内容是Java语言的作用域。

什么是作用域?

Java的作用域是指一个变量或方法在程序中可以被访问的范围。在Java中,作用域可以是一个类、一个方法或一个代码块。作用域规定了变量和方法的可访问性,只有在作用域内声明的变量和方法才能被访问。这有助于确保程序的正确性和可读性。

Java中的作用域可以分为三类:类作用域方法作用域块作用域

如果是成员变量 -- 类作用域

直接写在类里面的变量叫做成员变量,或者叫属性,有的地方也会叫做字段。 当一个变量被声明在一个类中时,它的作用域就是整个类。这意味着只要在类中,任何方法都能访问这个变量。例如:

public class MyClass {
  // 声明一个变量,它的作用域是整个类
  int myVariable;

  public void firstMethod() {
    // 在第一个方法中,我们可以访问myVariable
    myVariable = 1;
  }

  public void secondMethod() {
    // 在第二个方法中,我们也可以访问myVariable
    myVariable = 2;
  }
}

再比如,下面的代码定义了一个名为MyClass的类,其中定义了一个名为myVariable的变量和一个名为myMethod的方法:

public class MyClass {
  int myVariable;
  void myMethod() {
    //方法体
  }
}

在这个类中,myVariable和myMethod的作用域为整个类,因此它们可以在类的任何地方被访问。

当然,有的同学会问,如果给myVariable添加private修饰呢?

答案是一样的,只要是成员变量,那么理论上它在这个类中的任何地方都能直接访问,和访问权限是无关的。

当然也有例外,那就是static的情况,这个我们稍后再说。

如果是局部变量 -- 方法作用域

方法作用域指的是在方法中定义的变量或方法,这些变量或方法的作用域仅限于该方法内部。

例如,在MyClass类的myMethod方法中定义一个名为localVariable的变量,该变量的作用域仅限于myMethod方法内部:

public class MyClass {
  void myMethod() {
    int localVariable;
    //方法体
  }
}

只要是在大括号里面 -- 块作用域

块作用域指的是在一个大括号块中定义的变量或方法,这些变量或方法的作用域仅限于该块内部。 块作用域中定义的变量仅在该块内部有效,例如:

public class MyClass {
  void myMethod() {
    int blockVariable;
    {
      int anotherBlockVariable;
      // blockVariable和anotherBlockVariable都可以在这里访问
    }
    // blockVariable可以在这里访问,但anotherBlockVariable已经不能访问了
  }
}

在上面的例子中,blockVariable和anotherBlockVariable都是在块作用域内定义的变量,它们的作用域分别为定义它们的块内部。因此,在myMethod方法中,blockVariable可以在方法的整个作用域内访问,而anotherBlockVariable只能在它所在的块内部访问。

假如成员变量是static

在Java语言中,关键字 static 用来声明一个变量或者方法是静态的。静态变量或者方法属于类,而不属于对象。这意味着,如果一个变量被声明为 static,那么所有的对象都会共享这个变量。

例如:

public class MyClass {
  // x 是一个静态变量,在类的所有对象中都可以访问 x
  static int x = 1;

  // y 是一个普通变量,只能在声明 y 的对象中访问 y
  int y = 2;
}

回到一开始的例子,如果把成员变量加上static,就是成了静态属性。

public class MyClass {
  // 声明一个变量,它的作用域是整个类
  // 加上static修饰,在任何对象中都能访问,甚至不需要产生实例
  static int myVariable;

  public void firstMethod() {
    // 在第一个方法中,我们可以访问myVariable
    myVariable = 1;
  }

  public void secondMethod() {
    // 在第二个方法中,我们也可以访问myVariable
    myVariable = 2;
  }
}

静态属性也叫做类属性,可以不需要new对象直接调用。

MyClass.myVariable

生成的不同对象,调用的myVariable是同一个:

MyClass m1 = new MyClass();
MyClass m2 = new MyClass();
//m1.myVariable == m2.myVariable 一样的

static这个特性对方法也是一样的。

关于static,我们在后面的课程会再次讲解,现在就先记住这个特征即可。

课后作业

假设我们有一个如下的Java类:

public class Scope {
    public static void main(String[] args) {
        int x = 10;

        if (x > 5) {
            int y = 20;
            System.out.println(y);
        }

        int z = 15;
        System.out.println(z);
    }
}

这个程序输出什么?给出解释。

posted on 2022-12-13 09:45  剽悍一小兔  阅读(29)  评论(0编辑  收藏  举报  来源