2.1 “学生信息描述”实例
【实例说明】
本实例要求编写一个Java应用程序,对学生信息进行描述。程序运行界面如图2.1所示。
图2.1 程序输出结果
【实例目的】
(1)学习并了解Java语言数据类型的分类。
(2)学习并理解标识符、关键字等概念。
(3)学习并掌握标识符的命名规则,熟练使用标识符。
(4)学习并掌握各种数据类型数据及表示形式。
(5)学习并掌握程序开发的一般步骤和方法。
【相关知识及注意事项】
2.1.1 标识符
1.标识符的概念
程序员对程序中的各个元素加以命名时使用的命名记号称为标识符。换言之,Java标识符即程序员自己起的类名、对象名、变量名、方法名、接口名等。
2.标识符命名的基本规则
Java标识符的命名,应该遵循以下几点规则:
(1)区分大小写,标识符长度不限。
(2)由字母、数字、下画线(_)和美元符号($)以及所有在十六进制0xc0前的ASCII码组成。
(3)首字符必须是字母、下画线或$,不能以数字开头。
(4)不能使用Java关键字。
3.标识符命名的一些约定
Java标识符命名具有如下一些约定:
(1)标识符用作变量名:可大小写混写,首字符小写,字间分隔符用字的首字母大写。不用下画线,少用美元符号:给变量命名时尽量做到见名知义。
(2)标识符用作方法名:首字的首字母小写,其余的首字母大写,含大小写。尽量少用下画线。例如:setName、getName等。
(3)标识符用作常量名:基本数据类型的常量名使用全部大写字母,字与字之间用下画线分隔。对象常量可大小混写。例如:SIZE_NAME。
(4)标识符用作类名和接口名:标识符部分的每个单词的首字母大写,含有大小写。例如:StudentInfo,HelloWorld等。
例如本案例中对学生信息描述字段的标识符命名如下:
2.1.2 关键字
关键字又称保留字,是Java语言专用的标识符,不能当作一般的标识符使用,它有专门的意义和用途。所有的Java关键字都不能被用作用户的标识符,如for、while和boolean等都是Java语言的关键字,Java关键字见附录A,这些关键字的含义在后面的相关章节中将会详细介绍。
例如,本案例中对学生信息描述字段时所用的数据类型标识符即关键字,如下所示。
注意:
● Java语言中的保留字均用小写字母表示。
● 在定义标识符的时候,千万不要和关键字相同,否则就会出错。
2.1.3 数据类型
在Java语言中,数据类型可分为基本数据类型和复合数据类型两大类。
1.基本数据类型
Java基本数据类型包括字节型(byte)、字符型(char)、短整型(short)、整型(int)、长整型(long)、单精度浮点型(float)、双精度浮点型(double)和布尔型(boolean)。基本数据类型的字节数、取值范围见表2.1。
表2.1 基本数据类型
例如本案例中通过各种数据类型的值对学生的相关信息进行描述,如下所示。
2.复合数据类型
复合数据类型也称引用数据类型,Java语言的复合数据类型包括:类(class)、数组、接口(interface)等类型。其中,类是一种自定义的新数据类型,包括Java平台已有的定义和编程人员自定义两种形式。例如,把对基本数据类型的所有属性和方法封装起来形成一个类,就形成了基本数据类型的包装类型,包括字节(Byte)、短整数(Short)、整数(Integer)、长整数(Long)、浮点数(Float)、双精度浮点数(Double)、字符(Character)和布尔型(Boolean)等。String为字符串类型,但从本质上来讲它是一个类,只是其对象较为特殊而已。
例如,本案例中为了对学生信息进行描述时定义类StudentInfo就是自定义的复合数据类型,如下所示。
StudentInfo s=new StudentInfo();
3.类型转换
Java数据在进行运算的过程中,会因为考虑其数据类型的范围和精度而对数据的类型进行转换。Java数据类型的转换一般分三种,分别如下:
● 简单数据类型之间的转换;
● 字符串与其他数据类型的转换;
● 其他实用数据类型转换。
在此,我们主要讲述简单数据类型之间的转换,在Java中整型、实型、字符型被视为简单数据类型,简单数据类型之间的转换又可以分为:
● 低级到高级的自动类型转换;
● 高级到低级的强制类型转换。
1)自动类型转换
整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换由系统自动执行从低级到高级直接转换,称之为自动类型转换。数据类型由低级到高级关系如下:
低级高级
byte,short,char→int→long→float→double
例如本案例中对学生信息进行描述其成绩时就存在自动类型转换,如下所示。
自动转换规则见表2.2。
表2.2 基本数据类型
2)强制类型转换
尽管自动类型转换是很有帮助的,但并不能满足所有的编程需要。例如,如果需要将int型的值赋给一个byte型的变量,这种转换不会自动进行,因为byte型的变化范围比int型的要小。这种转换有时称为“缩小转换”,因为肯定要将源数据类型的值变小才能适合目标数据类型。为了完成两种不兼容类型之间的转换,就要将高级数据转换成低级数据,这时就必须进行强制类型转换。所谓强制类型转换只不过是一种显式的类型变换,通用格式如下:
(数据类型)数据
或
(数据类型)(表达式)
例如,本案例中对学生信息进行描述其成绩时就存在强制类型转换,如下所示。
s.scores[2]=(float)83.5;//83.5默认为double型,
//将其赋值给float型变量时需进行强制类型转换
说明
(1)相同类型的数据运算,结果还是原类型。
(2)不同类型的数据运算,结果的类型为参与运算的类型中精度最高者。
(3)强制类型转换可能会导致溢出或精度下降,最好不要使用。
【代码及分析】
程序解释及常见问题如下:
(1)语句“float[]scores=new float[3];”定义的是数组,数组中的元素都是同一数据类型,所以在语句“s.scores[0]=78;”“s.scores[1]=85;”“s.scores[2]=(float)83.5;”中都以不同方式将数据转换成为统一的float类型的数据。
(2)Java内部使用2个字节表示每个字符,采用Unicode编码,所以Java中的字符可以是汉字。如语句s.sex='男';,汉字“男”在此做一个字符处理。