哈喽,我是兔哥呀,今天就让我们继续这个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);
}
}
这个程序输出什么?给出解释。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2021-12-13 《JavaScript百炼成仙》勘误表