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
循环语句可以在满足循环条件的情况下,反复执行某一点代码,这段被重复执行的代码被称为循环体,当反复执行这个循环体时,需要在合适的时候把循环条件该为假,从而结束循环,否则循环将一直执行下去,形成死循环.循 ...
随机推荐
- DLL中导出ANSI和UNICODE函数
模仿window中的DLL导出ANSI和UNICODE版本的函数,使用UNICODE宏来控制使用哪个版本: 在函数实际的执行代码UNICODE版本中,在ANSI函数的版本中只做参数的转换,及ANSI字 ...
- map select reduce
map: 针对每个element进行变换并返回整个修改后的map a.map do |item| a.upcase end a.map(&:upcase) 一样的效果, &:代表了it ...
- mooc_java 集合框架中 学生所选课程2Map&HashMap
Map&HashMapMap提供映射关系,元素以键值对形式存储,Map的键值对一Entry类型的对象实例形式存在,key值不能重复,value可以键最多能映射到一个值,支持泛型 Map< ...
- github添加ssh公钥
使用git作为版本维护工具非常方便,而且一般个人用github作为远端库就够用了.而一般git连接github的方式采用ssh的方法,http的会略微慢一些.所以为了方便一般会在github设置中添加 ...
- linux命令学习笔记(32):gzip命令
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间. gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以 ...
- linux命令学习笔记(62)-curl命令-url下载工具
linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合 传输工具,但按传统,习惯称url为下载工具. 一,curl命令参数,有好多我没有用过,也不知道 ...
- Ubuntu16.04上安装arm-linux-gcc4.4.3
一.首先下载arm-linux-gcc-4.4.3.tar.gz安装包,安装包地址: http://www.cr173.com/soft/42654.html 二.解压安装包: sudo tar -z ...
- ACM学习历程—SNNUOJ 1110 传输网络((并查集 && 离线) || (线段树 && 时间戳))(2015陕西省大学生程序设计竞赛D题)
Description Byteland国家的网络单向传输系统可以被看成是以首都 Bytetown为中心的有向树,一开始只有Bytetown建有基站,所有其他城市的信号都是从Bytetown传输过来的 ...
- 【Lintcode】074.First Bad Version
题目: The code base version is an integer start from 1 to n. One day, someone committed a bad version ...
- C++ STL std::wstring_convert处理UTF8
#include <iostream> #include <string> #include <locale> #include <codecvt> # ...