共计 3705 个字符,预计需要花费 10 分钟才能阅读完成。
在程序执行过程中,其值不能被扭转的量称为常量,其值能被扭转的量称为变量。变量与常量在编写程序中须要常常应用,本节将具体介绍变量与常量的应用办法。
标识符
标识符 (identifier) 用于命名变量、常量、办法、类、包等实体。
标识符命名规定:
标识符是由字母、数字、下划线“_”、美元符号“$”组成的字符序列。
标识符必须以字母、下划线“_”、美元符号“$”结尾,不能以数字结尾。
标识符不能是关键字和保留字。
标识符不能蕴含空格。
例如,$6,name,Class,java,_pwd 都是非法的标识符,而 2a,class,c++,hello world,a@都是非法的标识符,不合乎标识符命名规定。Java 编译器会检测出非法标识符并报错。
变量的定义
变量的应用是程序设计中一个非常重要的环节,定义变量就是通知编译器这个变量的数据类型,这样编译器才晓得须要配置多少内存空间给它,以及它能寄存什么样的数据。在程序运行过程中,空间内的值是变动的,这个内存空间就称为变量。为了便于操作,给这个空间取个名字,称为变量名。变量的命名必须是非法的标识符。内存空间内的值就是变量值,在申明变量时能够是没有赋值,也能够是间接赋给初值。
申明变量的语法格局如下:
数据类型 变量名;
如需申明多个雷同类型变量时,可应用上面的语法格局:
数据类型 变量名 1, 变量名 2,…, 变量名 n;
接下来,通过具体的代码学习变量的定义,具体示例如下:
int n,q=1; // 定义了二个 int 类型的变量,为 q 赋初值为 1
double x, y, z; // 定义了三个 double 类型的变量
对于变量的命名并不是任意的,应遵循以下 4 条规定:
(1)变量名必须是一个无效的标识符。
(2)变量名不能够应用 Java 关键字。
(3)变量名不能反复。
(4)应抉择较有意义的单词作为变量名。
变量的类型转换
Java 的数据类型在定义时就曾经明确了,但程序中有时须要进行数据类型的转换,Java 容许用户有限度地进行数据类型转换。数据类型转换形式分为主动类型转换和强制类型转换两种。
1. 主动类型转换
主动类型转换也称隐式类型转换,指两种数据类型转换过程中不须要显式地进行申明。Java 会在下列的条件成立时,主动做数据类型的转换:
(1)转换的两种数据类型彼此兼容。
(2)指标数据类型的取值范畴比原类型大。
类型转换只限该行语句,并不会影响原先定义的变量类型,而且主动类型转换能够放弃游戏数据的精确度,不会因为转换而失落数据内容。
Java 反对主动类型转换的类型,如图所示。
1
图 2.1 主动数据类型转换图
主动类型转换示例阐明如下:
byte b = 97; // 申明 byte 型变量值为 97
char c = b; // 谬误,byte 类型不能主动类型转换为 char 类型
float f = b; // 正确,byte 类型能主动类型转换为 float 类型
double d = ‘c’; // 正确,char 类型能主动类型转换为 doublewww.sangpi.com 类型
在 Java 中,任何根本类型的值和字符串进行链接运算“+”时,根本类型的值将主动类型转换为字符串类型,字符串用 String 类示意,是援用类型。具体示例如下:
String s = 97; // 谬误,不能间接将根本类型赋值给字符串
String str = 97 + “”; // 正确,根本类型的值主动转换为字符串,”” 代表空字符串
2. 强制类型转换
强制类型转换也称为显式转换,指两种数据类型转换过程中须要显式地进行申明。当转换的两种数据类型彼此不兼容,或者指标数据类型的取值范畴小于原类型时,而无奈进行主动类型转换,此时就须要进行强制类型转换,如例 2 - 1 所示。
例 2 -1 TestTypeCast.java
1 public class TestTypeCast {
2 public static void main(String[] args) {
3 int n = 128;
4 byte b = n;
5 System.out.println(b);
6 }
7 }
程序的运行后果如图所示。
2
呈现了编译谬误,提醒第 4 行代码类型不兼容,呈现这样谬误的起因是将 int 转换到 byte 时,int 类型的取值范畴大于 byte 类型的取值范畴,转换会导致精度损失,也就是用 1 个字节的变量来存储 4 个字节的变量值。
对第 4 行代码进行强制类型转换,批改为上面的代码:
byte b = (byte) n;
程序的运行后果如图所示。
3
当试图强制把取值范畴大的类型转换为取值范畴小的类型时,将会引起溢出,从而导致数据失落。图 2.10 中运行后果为 -128,呈现这种景象的起因是,int 类型占 4 个字节,byte 类型占 1 个字节,将 int 类型变量强制转换为 byte 类型时,Java 会将 int 类型变量的 3 个高位字节截断,间接抛弃,变量值产生了扭转,如图所示。
4
图 2.4 强制转换过程
变量的作用域
变量的作用域是指它的作用范畴,只有在这个范畴内,程序代码能力拜访它。变量申明在程序中的地位决定了变量的作用域。变量肯定会申明在一对大括号中,该大括号所蕴含的代码区域就是这个变量的作用域,上面通过一个示例来剖析变量的作用域。如例 2 - 2 所示
例 2 -2 TestScope.java
1 public class TestScope {
2 public static void main(String[] args) {
3 int x = 100; // 定义变量 x
4 {
5 int y = 200; // 定义变量 y
6 }
7 System.out.println(y); // 拜访变量 y
8 }
9 }
程序的运行后果如图所示。
5
图 2.12 呈现了编译谬误,提醒“找不到符号”。报错的起因在于,定义的变量 y 超出了作用域。将第 7 行代码搁置在第 5 行代码之后,再次编译程序不再报错,程序的运行后果如图所示。
6
常量
常量就是一个固定的值,是不能被扭转的数据。Java 程序中应用的间接量称为常量,是在程序中通过源代码间接给出的值,在程序执行过程中都不会扭转,也称最终量。
1. 整型常量
整型常量是整数类型的数据,可分为二进制、八进制、十进制和十六进制 4 种,具体示意如下:
二进制:由数字 0 和 1 组成,用 0b 或 0B 结尾的字面值,如 0b110、0B110。
八进制:由数字 [0, 7] 范畴内的整数组成,用 0 结尾的字面值,如 0110。
十进制:由数字 [0, 9] 范畴内的整数组成的字面值,如 110。
十六进制:由数字 [0, 9] 和字符 [A, F] 范畴内组成,用 0x 或 0X 结尾的字面值,如 0x12、0XAbA。
2. 浮点数常量
浮点数就是实数,蕴含有小数点,能够用规范小数模式和迷信计数法模式两种形式示意,具体示意如下:
规范小数:由整数局部、小数点和小数局部形成,如 1.5、2.2。
迷信计数法:由一个规范式加上一个以 10 为底的幂形成,两者间用 e 或 E 隔开,如 1.2e+6、5E-8。
在 Java 中,分为 float 单精度浮点数和 double 双精度浮点数两种类型,单精度浮点数以 f 或 F 结尾,双精度浮点数以 d 或 D 结尾。不加后缀会默认为 double 双精度浮点数。
3. 字符常量
字符常量有三种模式,具体示意如下:
用单引号括起来的字符。如 ’a’、’0’。
转义字符。如 ’\n’、’\t’、’\0’。
用 Unicode 值示意的字符,格局是 ’\uXXXX’,其中 XXXX 代表一个十六进制的整数。如 ’\u0000’。
4. 字符串常量
字符串常量就是用双引号括起来的字符序列。如 ” 欢送学习 Java”、”A”。
5. 布尔常量
布尔常量就是布尔类型的两个值 true 和 false,用于示意真和假。
6.null 常量
null 常量只有一个值 null,示意对象援用为空。
多学一招:转义字符
Java 定义了一种非凡的标记来示意特殊字符,这种标记称为转义序列,转义序列由 () 前面加上一个字符或者一些数字位组成。如 \t 示意 Tab 字符的本义符,\u000A 示意换行符 \n。转义序列中的序列号作为一个整体翻译,而不是离开翻译。一个转义序列被当做一个字符。
罕用的转义序列如下:
\b,退格键,Unicode 码为 \u0008。
\t,Tab 键,Unicode 码为 \u0009。
\n,换行符,Unicode 码为 \u000A。
\r,回车符,Unicode 码为 \u000D。
反斜杠 \ 被称为转义字符,它是一个特殊字符。有非凡意义的字符,无奈间接示意,须要用转义序列来示意。
\’,单引号字符,Java 中单引号示意字符的开始和完结,间接写单引号字符(‘),编译器会匹配前两个是一对,会报错,所以须要应用转义字符 \’。
\”,双引号字符,Java 中双引号示意字符串的开始和完结,要显示双引号须要应用转义字符 \”,如 ” 欢送学习 \”Java\””。
\,反斜杠字符,Java 中的反斜杠是转义字符,要显示反斜杠,须要应用转义字符 \。