Java之路:常量和变量

常量(Constant)

1、定义

所谓常量,就是固定不变的量,其一旦被定义并初始化,它的值就不能再改变。

2、常量声明

在Java语言中,常用关键字final声明常量,语法如下:

// 方法1,推荐使用
final 数据类型 常量名 = 常量值;
// 方法2
final 数据类型 常量名;
常量名 = 常量值;


(1)常量名和前面讲到的标识符(标识符、关键字与保留字)的命名规则一样,可由任意顺序的大小写字母、数字、下划线(_)和美元符号($)等组成,标识符不能以数字开头,亦不能是Java中的保留关键字。
(2)常量通常用使用大写字母,单词之间用下划线连接,但这不是硬性要求,仅是一个习惯。
(3)虽然Java中有关键字const,但目前并没有被Java正式启用。
(4)在定义常量时,必须要对其进行初始化,否则会出现编译错误。常量一旦初始化后就不能再改变其值。
(5)final关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰引用数据类型的方法等。

【示例】

public class DefineConstant {
	public static void main(String[] args) {
		final int YEAR = 365;
		System.out.println(YEAR);
	}
}

【结果】

在这里插入图片描述

如果你想对YEAR进行修改,如下:

public class DefineConstant {
	public static void main(String[] args) {
		final int YEAR = 365;
		System.out.println(YEAR);
		YEAR = 366;	// 错误, 常量值不能修改
		System.out.println(YEAR);
	}
}

【结果】
在这里插入图片描述

变量

1、定义

在程序运行期间同,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识,这些内存单元称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。

2、变量声明

语法如下:

// 方法1
数据类型 变量名 = 变量值;
// 方法2
数据类型 变量名;
变量名 = 变量值;
// 例:
int num = 47;


(1)变量都遵循“先声明,后使用”的原则。
(2)变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值。
(3)变量中每次只能赋一个值,但可以修改多次。
(4)变量名和前面讲到的标识符(标识符、关键字与保留字)的命名规则一样,可由任意顺序的大小写字母、数字、下划线(_)和美元符号($)等组成,标识符不能以数字开头,亦不能是Java中的保留关键字。
(5)变量名的第一个单词首字母小写,从第二个单词开始每
个单词首字母大写。例如:lineNumber、getLineNumber。但这不是硬性要求,仅是一个习惯。
(6)声明变量的作用之一便是指定在内存中分配空间的大小。

3、变量作用域

变量是有作用范围(Scope)的,也即作用域。一旦超出变量的作用域,就无法再使用这个变量。

按作用域范围划分,变量分为成员变量局部变量

(1)成员变量

在类体内定义的变量称为成员变量,它的作用域是整个类,也就是说在这个类中都可以访问到定义的这个成员变量。

【例】

public class Demo {
	static int i = 47;	// 定义一个成员变量,作用域是整个类Demo
	public static void main(String[] args) {
		System.out.println(i);
	}
}

【结果】
在这里插入图片描述

(2)局部变量

在一个方法或方法内代码块中定义的变量称为局部变量,局部变量在方法或代码块被执行时创建,在方法或代码块结束时被销毁。局部变量在进行取值前必须被初始化,否则会编译错误。
Java存在块级作用域,在程序中任意大括号包装的代码中定义的变量,它的生命仅仅存在于程序运行该代码块时。例如:for循环、while循环、方法或方法的参数列表里。在循环里声明的变量只要跳出循环,这个变量便不能再使用。同样,方法或方法的参数列表里定义的局部变量,当跳出方法体之外,该变量也不能使用了。

【示例】

public class LocalVar {

	public static void main(String[] args) {	// main方法参数列表定义的局部变量args
		int sum = 0;	// main方法体内定义的局部变量sum
		for(int i = 1; i < 5; i++)	// for循环体内定义的局部变量i
			sum += i;
		System.out.println(sum);
	}
}

【结果】
在这里插入图片描述

【结果分析】
在范例中,就有3种定义局部变量的方式。在第3行,在静态方法main参数列表中定义的局部变量args,它的作用范围就是整个main方法体:以3行的左花括号“{”开始,以第8行的“} ”结束。
在第4行,在main方法体内,定义了局部变量sum。它的作用范围从当前行(4行)到以第8行的“}”为止。
在第5行,把局部变量i声明在for循环里,它的有效范围仅在for循环内(5~6行),只要一离开这个循环,变量i便无法使用。
相对而言,变量sum的有效作用范围从第4行开始,到第8行结束,for循环也属于变量sum的有效范围,因此sum在for循环内也是可用的。

【局部变量在块作用域的应用】

public class LocalVar {
	static int x = 10;
	public static void main(String[] args) {	
		int outer = 1;
		{	// 直接用{}来定义块
			int inner = 2;
			System.out.println("inner = " + inner);
			System.out.println("outer = " + outer);
		}
			int inner = 3;
			System.out.println("inner = " + inner);
			System.out.println("outer = " + outer);
			
			System.out.println("In class lecer, x = " + x);
	}
}

【结果】
在这里插入图片描述
:块作用域除了用for等循环或方法体的左右大括号来界定外,还可以直接用大括号{}来定义“块”。

【变量块作用域的嵌套】

  • Java中作用范围是禁止嵌套的,而在C/C++中则是允许的。

在Java中,在方法(函数)内定义的变量,其作用范围(包括方法的参数)是从它定义的地方开始,到它所作用范围终结的位置处结束。如在方法的开始处定义了一个变量i,那么直到该方法结束处,都不能再定义另一个同名变量i。再如,如果在一个for循环体中定义了变量i,那么在这个for循环内不能再有同名变量,但出了for循环之后,是可以再次定义的。这就是作用域不能嵌套的意思。

而在C/C++中,作用域可以嵌套,甚至无限制地嵌套下去,这里每对大括号之间就是一个独立的作用域,内嵌套的同名变量覆盖外迁套的同名变量。如下表所示。
在这里插入图片描述

  • Java中类与方法中变量作用域可以嵌套

在Java中,类与方法之间作用域是可以嵌套的,可以把整个类看做一个大的作用域,它定义的字段(或称数据成员)可被方法中的同名字段所屏蔽,其行为类似于上表左侧所示的C/C++的作用域嵌套。如下:

public class LocalVar {
	static int x = 10;
	public static void main(String[] args) {	
		int x = 20;
		System.out.println(x);	// 局部变量覆盖成员变量
	}
}

【结果】
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43555323/article/details/84716242