对于在作用域里定义的变量,作用域同时决定了它的“可见性”以及“存在时间”。在JAVA里,作用域是由花括号的位置决定的。JAVA用一对大括号作为语句块的范围,称为作用域,在作用域里定义的变量,只有在该作用域结束之前才可使用。

在JAVA中,变量的作用域分为四个级别:类级、对象实例级、方法级、块级。

* 类级变量又称全局级变量或静态变量,需要使用static关键字修饰。类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化。

* 对象实例级变量就是成员变量,实例化后才会分配内存空间,才能访问。成员变量是定义在方法之外,类之内的。成员变量随着对象的创建而存在,随着对象的消失而消失。

* 方法级变量就是在方法内部定义的变量,就是局部变量。局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量的作用域从它被声明的点开始,一旦出了自己的作用域马上从内存中消失。

* 块级变量就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如 if、for 语句的块。块是指由大括号包围的代码,例如:

{int x = 12;/* only x available */{int q = 96;         /* both x & q available */ }/* only x available *//* q “out of scope” */
}

说明:
* 方法内部除了能访问方法级的变量,还可以访问类级和实例级的变量。

* 块内部能够访问类级、实例级变量,如果块被包含在方法内部,它还可以访问方法级的变量。

public class Test{public static String name = "TEST"; // 类级变量public int i; // 对象实例级变量// 属性块,在类初始化属性时候运行{int j = 2;// 块级变量}public void test1() {int j = 3; // 方法级变量if(j == 3) {int k = 5; // 块级变量}// 这里不能访问块级变量,块级变量只能在块内部访问System.out.println("name=" + name + ", i=" + i + ", j=" + j);}public static void main(String[] args) {// 不创建对象,直接通过类名访问类级变量System.out.println(Test.name);// 创建对象并访问它的方法Test t = new Test();t.test1();}
}

* 类级变量和成员变量是有默认的初始值。

虽然JAVA会自动初始化成员变量,但自动初始化会带来一些错误,所以在使用变量之前最好对其进行初始化,以保证变量的使用符合自己想要的效果;默认初始化只对于JAVA成员变量有效,如果要使用局部变量必须要对其进行初始化,否则会得到编译错误。

数据类型        默认的初始值

int                    0

float                0.0f

double            0.0

boolean            false

char                    ' '

引用数据类型        null

* 方法级和块级的变量没有默认的初始值,必须被显示地初始化,否则不能访问。

public class Test{public static String name; // 类级变量public int i; // 对象实例级变量public static void main(String[] args) {int m;{int n;}// 类级变量有默认初始化System.out.println(Test.name);Test t = new Test();// 对象实例级变量有默认初始化System.out.println(t.i);   // 报错,方法变量必须显示初始化System.out.println(m);}
}

* 同一作用域范围的包裹下成员变量名和局部变量名是可以变量名相同的。在方法中使用变量时,如果不指明使用成员变量还是局部变量,那么默认使用局部变量(就近原则),但是如果局部变量超出了它本身的作用域范围则会失效,被JVM垃圾回收,那么则可以重复命名此变量。

public class Test{//成员变量public int i = 0;public static void main(String[] args) {//局部变量for(int i=0; i<1; i++) {//变量i指for循环块内局部变量System.out.println(i);}//局部变量int i = 1;//变量i指局部变量System.out.println(i);}
}

* 同一个作用域范围的包裹下局部变量和局部变量不可以变量名相同(作用域内不能重复命名)。

public static void main(String[] args) {//局部变量int i = 1;{//错误,同一个作用域范围的包裹下局部变量和局部变量不可以变量名相同int i = 0;}}

JAVA - 变量作用域相关推荐

  1. Java 变量作用域、构造方法官方教程

    文章目录 二.构造方法(Constructor) (1)官方教程解释构造方法 (3) this 的本质 ☆☆☆☆☆ 一.变量作用域 Java 中的变量有3种: ① 全局变量:被定义在类中(成员变量) ...

  2. 11、Java 变量作用域、构造方法官方教程

    文章目录 一.变量作用域 二.构造方法(Constructor) (1) 官方教程解释构造方法 (2) 构造方法概念 (3) this 的本质 ☆☆☆☆☆ 三.对象创建流程分析 一.变量作用域 Jav ...

  3. 《java基础知识》Java变量作用域

    对于在作用域里定义的变量,作用域同时决定了它的"可见性"以及"存在时间".在JAVA里,作用域是由花括号的位置决定的.JAVA用一对大括号作为语句块的范围,称为 ...

  4. java变量作用域Scope

    一.变量Scope 作用域同时决定了它的"可见性"以及"存在时间".在C,C++和Java里,作用域是由花括号的位置决定的.变量的作用域分为四个级别:类级.对象 ...

  5. java 变量作用域 c语言_C语言深入理解 - 常量与变量

    ++++++++++++++++++++++++++++++++++++++++++ <C语言深入理解系列 - 常量与变量> 查看其它博文请关注原创作者. 本文系本站原创,欢迎转载! 转载 ...

  6. java 变量作用域 c语言_java - 数据结构 c语言 作用域问题

    问题用//标出来了,同样的语句为什么放入循环结果就完全不同了? #include #include #define OK 1 #define NO 0 int nn=0; typedef struct ...

  7. java类作用域标识符_java入门 (二) 标识符、数据类型、类型转换、变量、常量、作用域...

    java入门(二) 标识符 数据类型 类型转换 变量.常量.作用域 本次笔记引用B站:狂神说,虽然早就会了,现在回头来敲下基础,加深印象 1.标识符: java所有的组成部分都需要名字.类名丶变量名丶 ...

  8. 【Java】说明变量作用域的示例程序

    /**这是说明变量作用域的示例程序* 程序的名字为 VarExample.java*/ public class VarExample{static int a1=10; //类变量,对整个类都有效 ...

  9. Java之路:变量作用域

    变量作用域 变量是有作用范围(Scope)的,也即作用域.一旦超出变量的作用域,就无法再使用这个变量.在程序中,变量一定会被定义在某一对大括号中,该大括号所包含的代码区便是这个变量的作用域. 按作用域 ...

最新文章

  1. 机器学习的数学基础 - 特征分解与奇异值分解
  2. ZhuGongpu CloudX-for-Android
  3. ffmpeg 把视频解码成jpg
  4. defparam的语法
  5. 城市遥感动态监测管理系统
  6. 15-[JavaScript]-ECMAScript 1
  7. windows 安装docker_Windows下docker安装 postgresql12.0
  8. 女学霸考692分想当“程序媛”,网友:快劝劝孩子
  9. /etc/init.crs enable\disable 状态
  10. AVOD:点云数据与BEV图的处理及可视化
  11. 在Wireshark的tcptrace图中看清TCP拥塞控制算法的细节(CUBIC/BBR算法为例)
  12. QQ、微信动态图表情包怎么制作?视频如何转GIF
  13. 看了这个教程,学会快速找出三等分点
  14. 前端上半年工作总结、下半年工作计划
  15. Apollo星火计划学习笔记——参考线平滑算法解析及实现(以U型弯道场景仿真调试为例)
  16. 中国驾照的类型和可驾驶汽车类型
  17. Linux网络操作系统期末系统复习题
  18. 一个关于APP开发者的复兴之路 区块连
  19. 【面向学渣编程】囚犯问题(十分详解,含表格,适合新手)
  20. FileStream与StreamWriter区别

热门文章

  1. bzoj 1646 bfs
  2. linux一键安装虚拟机系统
  3. Delphi Thread 线程2
  4. android手机 无电池开机画面,华为手机开不了机停在开机画面怎么办【详解】
  5. 行式 Excel 文件拆分
  6. APL开发日志--2012-12-03
  7. 几种开源分词工具的比较
  8. IC基础知识(十一)时钟周期、状态周期、机器周期、指令周期和总线周期的定义及关系
  9. python basename()函数和dirname()函数
  10. 为什么样本方差里面要除以(n-1)而不是n?