在程序执行过程中,其值不能被扭转的量称为常量,其值能被扭转的量称为变量。变量与常量在编写程序中须要常常应用,本节将具体介绍变量与常量的应用办法。

   标识符

  标识符(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中的反斜杠是转义字符,要显示反斜杠,须要应用转义字符\。