哈喽,我是兔哥呀,今天就让我们继续这个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是同一个:
1. MyClass m1 = new MyClass(); 2. MyClass m2 = new MyClass(); 3. //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); } }
这个程序输出什么?给出解释。