成员变量与局部变量
成员变量与局部变量
成员变量:在类体中定义的变量为成员变量,作用范围(scope)是整个类,只要在这个类中都可以访问到它。
局部变量:在一个方法或方法中的代码块(code block)中定义的变量。局部变量是在方法或代码块被执行的时候被创建,在方法或代码块结束时被销毁。局部变量在进行取值操作前必须被初始化或赋值,否则出现编译错误。
如下程序综合了变量的应用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.liaojianya.chapter1; /** * This program demonstrates the difference between local variables and member variables * @author LIAO JIANYA * */ public class TestLocalVar4_5 { public static void main(String[] args) { int outer = 1 ; { int inner = 2 ; System.out.println( "inner = " + inner); System.out.println( "outer = " + outer); } // System.out.println("inner = " + inner); int inner = 3 ; System.out.println( "inner = " + inner); System.out.println( "outer = " + outer); System.out.println( "In class, the member a = " + a); } static int a = 123 ; } |
运行结果:
1 2 3 4 5 | inner = 2 outer = 1 inner = 3 outer = 1 In class , the member a = 123 |
总结:块(block)作用范围除了用for(while)循环或方法体的左右花括号{}来界定外,还可以直接用花括号{}来定义块。
1)在上述程序中,块内定义inner为2,所以第一次打印出来的inner = 2.出了块后,若取消注释符号//,会出现编译错误,原因是这个语句不认识名叫“inner”的变量,因为前一个inner是定义在块内,出了块,块内inner将对后面的语句无效。之后,又重新定义一个inner变量并赋值为3,所以之后打印出来为inner = 3。
2)从程序结果可以看出,outer = 1一直适用,因为是定义在块外的变量并且已经被赋值为1,块内快外都是可以调用.
3)对于主方法块外的static int a = 123;是属于成员变量,必须声明为static的,否则main方法无法识别,因为是静态方法只能访问静态域,无法访问非静态域,虽然是在最后声明的,但是能够被访问,因为它的作用域是整个类。
规则:一般而言,所有变量都遵循“先声明,后使用”的原则,只有先声明了,变量才能在内存中存在,之后才能被其他方法去访问。但是,存在于类中成员变量(不在任何的方法中),其作用域是整个类的范围,在编译器的内部协调下,变量只要作为类中的数据成员被声明,就可以在类内部的任何地方使用,无需满足“先声明,后使用”的原则。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)