IT兄弟连 Java语法教程 变量2
变量的作用域和生命周期
到目前为止,使用的所有变量都是在main()方法开始时声明的,然而,Java允许在任何代码块(代码块以开花括号开始,以闭花括号结束)中声明变量,代码块定义了作用域。因此,每当开始一个新的代码块时就创建了一个新的作用域。作用域决定了变量(对象)对程序的其它部分的可见性,并且也决定了这些变量(对象)的生命周期。
许多其他的计算机语言定义了两种通用的作用域类别,全局作用域和局部作用域。然而这些传统的作用域不能很好地适应Java中严格的、面向对象的模型。虽然可以创建属于全局作用域的变量,但这只是例外,而不是规则。在Java中,两种主要的作用域分别由类和方法定义的。尽管这种分类有些人为的因素,但是,由于类作用域具有的一些独特属性和特征,不能应用于由方法定义的作用域,因此这种分类方法是有一定的道理的。由于存在这种差别,对类作用域的介绍已经超出了本书的内容范围,所以本书将只分析由方法定义及在方法中定义的作用域。
由方法定义的作用域从方法的开花括号开始。然而,如果方法具有参数,那么它们也会被包含到方法的作用域中。作为通用规则,在作用域中声明的变量,对于在作用域之外定义的代码是不可见的(即不可使用)。因此,当在某个作用域中声明变量时,就局部化对象了该变量,并保护它免受未授权的使用或修改。实际上,作用域规则为封装(将在学习面向阶段时学习封装,封装是面向对象的三大特征之一,面向对象的三大特征分别是:封装、继承和多态)提供了基础。
作用域是可以嵌套的。例如,每当创建一个代码块时,就创建了一个新的、嵌套的作用域。当遇到这种情况时,外层的作用域包围了内层的作用域。这意味着在外层作用域中声明的变量对内层作用域中的代码是可见的。然而,反过来就不是这样了,在内层作用域中声明的变量,在内层作用域之外是不可见的。
在代码块中,可以在任意位置声明变量,但是只有在声明之后变量才是有效的。因此,如果在方法的开头定义变量,那么变量对于该方法的所有代码都是可见的,相反,如果在代码块的末尾声明变量,那么变量是无用的,因为没有代码能够访问该变量。
当进入变量的作用域时创建变量,当离开它们的作用域时销毁变量。这意味着一旦离开作用域,变量就不会保持原来的值。所以,对于在方法中声明的变量来说,在两次调用该方法之间,变量不会保持它们的值。此外,对于在代码块中声明的变量来说,当离开代码块时会丢失它们的值。因此,变量的生命周期被限制在作用域之内。
如果变量声明中包含初始化,那么每当进入声明变量的代码块时都会重新初始化变量。
变量的使用
使用变量的方式有很多,使用System.out.println()在控制台输出变量值是使用变量的一种方式,也可以使用运算符完成变量之间的运算。新建Java源代码文件Example01.java,编写如下代码:
public class Example01{
/**
* main方法,程序执行的入口
*/
public static void main(String[] args){
int price = 10;
int count = 5;
System.out.println("商品总价:" + price * count);
}
}
上面的案例在运算中,使用“*”完成了变量之间乘法运算,使用“+”完成了字符串与数字的拼接,最终输入结果如图2所示:

图2 Example01运行结果
需要注意的是仅仅声明但没有初始化的变量是不允许使用的,例如以下代码:
public class Example01{
/**
* main方法,程序执行的入口
*/
public static void main(String[] args){
int price = 10;
int count = 5;
System.out.println("商品总价:" + price * count);
int num; //声明一个变量但是没有进行初始化
System.out.println(num); //使用一个未初始化的变量,在编译阶段将 //提示错误信息
}
}
编译以上代码,控制台将提示如图3所示的错误。

图3 编译错误
IT兄弟连 Java语法教程 变量2的更多相关文章
- IT兄弟连 Java语法教程 变量1
什么是变量 在Java程序中,变量是基本的存储单元.是在程序运行中值可以改变的一块内存区域.变量是通过标识符(变量名).变量类型及可选的初始化器来定义的,此外,所有的变量都有作用域,作用域定义了变量的 ...
- IT兄弟连 Java语法教程 标识符和关键字
Java语言也和其它编程语言一样,使用标识符作为变量.对象的名字.也提供了一系列的关键字用以实现特别的功能.本小节将详细介绍Java语言的标识符和关键字等内容. 1.分隔符 Java语言里的分号“;” ...
- IT兄弟连 Java语法教程 Java开发环境 配置Java环境变量
在安装完JDK后,我们需要配置系统的环境变量,否则在控制台中使用JDK为我们提供的工具时将出现如图12所示的错误信息. 图12 未配置环境变量时执行java命令提示的错误信息 当出现这样的提示信息时 ...
- IT兄弟连 Java语法教程 数组 多维数组 二维数组的声明
Java语言里提供了支持多维数组的语法.但是这里还想说,从数组底层的运行机制上来看是没有多维数组的. Java语言里的数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存,数组元 ...
- IT兄弟连 Java语法教程 数组 使用foreach循环遍历数组元素
从JDK5之后,Java提供了一种更简单的循环:foreach循环,也叫作增强for循环,这种循环遍历数组和集合更加简洁.使用foreach循环遍历数组和集合元素时,无需获得数组或集合的长度,无需根据 ...
- IT兄弟连 Java语法教程 数组 数组的使用
数组最常用的用法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值.访问数组元素都是通过在数组引用变量后紧跟一个方括号([]),方括号里是数组元素的索引值,这样就可以访问数组元素了.访问到数组 ...
- IT兄弟连 Java语法教程 数组 数组的初始化
Java语言中数组必须先初始化,然后才可以使用.所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值. 这时有人会问,能不能只分配内存空间,不赋初始值呢?答案是肯定不行的,一旦为数组 ...
- IT兄弟连 Java语法教程 数组 数组的声明
Java语言支持两种语法格式来定义数组: type[] arrayName; type arrayName[]; 对这两种语法格式而言,通常推荐使用第一种格式,因为第一种格式不仅具有更好的语义,而且具 ...
- IT兄弟连 Java语法教程 流程控制语句 循环结构语句1
循环语句可以在满足循环条件的情况下,反复执行某一点代码,这段被重复执行的代码被称为循环体,当反复执行这个循环体时,需要在合适的时候把循环条件该为假,从而结束循环,否则循环将一直执行下去,形成死循环.循 ...
随机推荐
- Android 虚拟机 程序安装目录
Android应用安装涉及到如下几个目录:system/app系统自带的应用程序,无法删除.data/app用户程序安装的目录,有删除权限.安装时把apk文件复制到此目录.data/data存放应用程 ...
- DOM的介绍
一 . DOM 介绍 什么是DOM DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定的一个规范. DOM就是由节 ...
- Java类的加载与生命周期
一.概要: 类的生命周期从类的 加载.连接.初始化 开始,到类的 卸载结束: 二.几个阶段: 加载:查找并加载类的二进制数据.(把类的.class文件的二进制数据读入内存,存放在运行时数据区的方法区: ...
- 51nod 1040
题目 题解:我们要求的是这个式子: $ \sum\limits_{i = 1}^n {\gcd (n,i)} $ (下面式子中的d都是n的因子) 变形下 $ \sum\limits_{d = 1} ...
- (1)WEB框架概念和struts2体验
Struts快速入门 day31 1.相关jar包 Struts2-core-lib(Struts2 的核心jar包) 代理的两种方式 JDK(简单,不稳定)和第三方 javaassist包——动态代 ...
- HTML5响应式模版Mocha
HTML5响应式模版Mocha,经典,html5,蓝色,扁平,HTML5响应式模版Mocha是一款宽屏大气的HTML5网站展示模板. http://www.huiyi8.com/moban/
- CSS3实现水位充满文字特效
CSS3实现水位充满文字特效是一款既是Loading特效也是文字特效,Loading动画开始时,文字中的水位渐渐上升,为了模拟水位上升的真实效果,水面还会波浪浮动,当Loading动画结束时,文字中的 ...
- HDU 4336 Card Collector:状压 + 期望dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意: 有n种卡片(n <= 20). 对于每一包方便面,里面有卡片i的概率为p[i],可 ...
- HDU 3853 LOOPS:期望dp【网格型】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 题意: 有一个n*m的网格. 给出在每个格子时:留在原地.向右走一格,向下走一格的概率. 每走一 ...
- web项目的实质
web项目的实质 web项目的实质其实也就是在用户发过来一个请求后,我们返回一个响应. 用户看到的页面就是我们响应中的响应体(里面是html代码). 所以,我们整个项目的所有操作都是围绕着怎么来写好这 ...