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  编译错误

原文地址:https://www.cnblogs.com/itxdl/p/11080701.html

时间: 2024-11-01 18:27:13

IT兄弟连 Java语法教程 变量2的相关文章

IT兄弟连 Java语法教程 流程控制语句 循环结构语句1

循环语句可以在满足循环条件的情况下,反复执行某一点代码,这段被重复执行的代码被称为循环体,当反复执行这个循环体时,需要在合适的时候把循环条件该为假,从而结束循环,否则循环将一直执行下去,形成死循环.循环语句可能包含如下4个部分: 1.初始化语句:一个或多条语句,这些语句用于完成一些初始化工作,初始化语句在循环开始之前执行. 2.循环条件:这是一个boolean表达式,这个表达式能决定是否执行循环体. 3.循环体:这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行.如果这个代码块只有一

IT兄弟连 Java语法教程 数据类型转换

类型转换是将一个值从一种类型更改为另一种类型的过程.例如,可以将String(字符串,字符串是Java中非常特殊的数据类型,字符串属于引用类型,但是可以像基本类型一样使用字面值赋值)类型数据“456”转换为一个数值型,而且可以将任意类型的数据转换为String类型. 如果从低精度(比如byte,最大值127)数据类型向高精度(比如short,最大值32767)数据类型转换,则永远不会溢出,并且总是成功的:而把高精度数据类型向低精度数据类型转换则必然会有信息丢失,有可能失败. 数据类型转换有两种方

IT兄弟连 Java语法教程 注释与编码规范

在程序代码中适当地添加注释可以提高程序的可读性和可维护性.好的编码规范可以使程序更易阅读和理解.下面将介绍Java中的集中代码注释以及应该注意的编码规范. 代码注释 通过在程序代码中添加注释可提高程序的可读性.注释中包含了程序的信息,可以帮助程序员更好的阅读和理解程序.在Java源程序文件的任意位置都可添加注释语句.注释中的文字Java编译器不进行编译,所有代码中的注释文字对程序不产生任何影响.Java语言提供了3种添加注释的方法,分别为单行注释.多行注释和文档注释. ●  单行注释 “//”为

IT兄弟连 Java语法教程 逻辑运算符

表8中显示的布尔逻辑运算符只能操作布尔类型的操作数,所有的二元逻辑运算符都可以组合两个布尔值,得到的结果为布尔类型. 表8  布尔逻辑运算符 布尔逻辑运算符”&“.”|“以及”^“,都会布尔值进行操作,操作方式与它们操作整数中位的方式相同.逻辑非运算符”!“反转布尔状态:!true==false并且!false==true.表9中显示了各种逻辑操作的效果. 表9  逻辑操作效果 下面的程序和前面演示的BitLogic程序几乎相同,但该程序是对布尔型逻辑值进行操作,而不是对二进制位进行操作. pu

IT兄弟连 Java语法教程 流程控制语句 分支结构语句4

4  嵌套if-else条件语句 嵌套if语句是作为另一个if或else语句的目标的if语句.嵌套if语句在程序设计中非常普遍.Java中,关于嵌套if语句需要记住的是,else语句总是和同一代码块中最近的且没有else与之匹配的if语句相匹配,语法格式如下所示: if(判断条件A){ if(判断条件B){ A语句块 } if(判断条件C){ B语句块 }else{ C语句块 } }else{ D语句块 } 例:下面将演示嵌套if的执行流程: public class IfElseIfElseD

IT兄弟连 Java语法教程 流程控制语句 循环结构语句4

do-while循环 Java还有一种循环是do-while.与for.while这些在循环顶部判断条件表达式的语句不同,do-while是在循环底部进行条件表达式的检查.这意味着do-while循环至少要执行一次循环体.do-while循环的语法格式如下: do{ 循环体; }while(循环条件); 与while循环不同的是,do-while循环的循环条件后必须有一个分号,这个分号表明循环结束. 例:下面的程序演示了do-while循环的执行流程: public class DoWhileD

IT兄弟连 Java语法教程 流程控制语句 分支结构语句5

5  switch-case条件语句 Java中的第二种分支控制语句时switch语句,switch语句提供了多路支持,因此可以使程序在多个选项中进行选择.尽管一系列嵌套if语句可以执行多路测试,然而多数情况下使用switch则更为高效.其完整形式如下: switch(expression){ case constant1: statement sequence; break; case constan2: statement sequence; break; ... ... default:

IT兄弟连 Java语法教程 流程控制语句 控制循环结构2

使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环:而break则是完全终止循环本身.如下程序示范了continue的用法. public class ContinueDemo{ public static void main(String[] args){ for(int i = 0; i<3; i++){ System.out.println("i的值是"

IT兄弟连 Java语法教程 流程控制语句 分支结构语句1

不论哪一种编程语言,都会提供两种基本的流程控制结构:分支结构和循环结构.其中分支结构用于实现根据条件来选择性地执行某段代码,循环结构则用于实现根据循环条件重复执行某段代码.Java同样提供了这两种流程控制结构的语法,Java提供了if和switch两种分支语句,并提供了while.do-while和for三种循环语句.除此之外,JDK5还提供了一种新的循环:foreach循环,能以更简单的方式来遍历集合.数组的元素.Java还提供了break和continue来控制程序的循环结构. 分支结构语句