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
循环语句可以在满足循环条件的情况下,反复执行某一点代码,这段被重复执行的代码被称为循环体,当反复执行这个循环体时,需要在合适的时候把循环条件该为假,从而结束循环,否则循环将一直执行下去,形成死循环.循 ...
随机推荐
- [2018-12-07]用ABP入门DDD
前言 ABP框架一直以来都是用DDD(领域驱动设计)作为宣传点之一.但是用过ABP的人都知道,ABP并不是一个严格遵循DDD的开发框架,又或者说,它并没有完整实现DDD的所有概念. 但是反过来说,认真 ...
- PAT 乙级 1085. PAT单位排行 (25) 【结构体排序】
题目链接 https://www.patest.cn/contests/pat-b-practise/1085 思路 结构体排序 要注意几个点 它的加权总分 是 取其整数部分 也就是 要 向下取整 然 ...
- PAT天梯赛 L2-020. 功夫传人 【DFS】
题目链接 https://www.patest.cn/contests/gplt/L2-020 思路 从师父开始 一层一层往下搜 然后 搜到 得道者 就更新答案 AC代码 #include <c ...
- 前端开发工程师必备JS技能-切图
/******************************************** 学习时间:2015年12月21日 学习者:易天曦 学习目的:掌握切图技巧 学习目标:1.学会从网页设计师的P ...
- Mac OS访问Windows共享文件夹
原文地址:http://blog.csdn.net/jinhill/article/details/7246922 最近开始研究Mac OS,遇到的第一个问题就是如何在Mac OS中访问Windows ...
- css的核心
css核心内容--流 流:在现实生活中就是流水,在网页设计中就是元素的排列方式. 标准流:元素在网页中就像流水,排在前面的元素内容前面出现,排在后面的元素内容后面显示. 这种布局方式就称为标准流的布局 ...
- logback备注
<?xmlversion="1.0"encoding="UTF-8"?> <!-- <configuration>包含的属性 sc ...
- linux命令学习:echo详解,格式化输出,不换行输出
shell脚本不换行刷新数据 #!/bin/bash ] do a=$(ifconfig eth0 | grep 'RX pac' | awk '{print $2}' | awk -F: '{pri ...
- 微信小程序module.exports 模块化
//common.js var studentList = [ { name: "xiaoming", age: "22" ...
- Linux 中安装软件报缺少共享库文件的错误
linux 安装一些如软件 或者相关的模块时,经常报出缺少一些依赖包的 libxxx.so等的共享库文件 首先找到 该共享库文件 然后查看/etc/ld.so.conf 这个文件记录了编译时使用的动态 ...