第 2章 Java语言基础
本章介绍 Java语言的基础知识,本章也是继续学习后续章节的基础内容。本章重点介绍了 Java中的基本数据类型和引用数据类型、隐式类型的转换、数据变量与数据常量和 Java的运算符。虽然这些内容学起来有些乏味,但是希望读者耐心读完,尝试着编写测试的例子程序,一旦掌握会对程序编写发挥积极的作用。
2.1 Java命名规则
俗话说无规矩不成方圆,使用 Java编程语言也需要遵循一定的命名规则,如类的命名,属性命名,方法命名和常量命名等,Java
程序的编写也需要遵循一定的规则,如缩进、对齐等,本节将详细介绍 Java的命名规则和代码编写规则。
类的命名:类由有意义的单词或单词的组合组成,要求每个单词的第一个字母要大写,一般由名词或名词词组组成。如:
SaveTableData(保存表格数据类 )。
属性命名:类由属性和方法组成,属性代表类的静态特性,它可以由一个单词或多个单词组成,要求有一定意义,明确表示属性本身的特性。
方法命名:方法表示类的动态特性,方法的命名是除第一个字母是小写外其他和类的命名一样。如 updateTableData()(更新表格数据),Java对于取值或设置值的方法有特殊的要求,取值的方法是 getXXX(),设置值的方法是 setXXX()。
常量命名:常量命名方法是由一个或多个单词组成,每个单词要求大写,单词需有一定意义如 MAX_INTEGER(最大整数 ),
MIN_INTEGER(最小整数),RATE(汇率)等。
2.2 数据类型
一提到数据类型对于初级读者首先想到得是整数或小数,
当然这是读者思维里直观的理解,这种理解首先是正确的,
但是在学习 Java语言时只知道整数类型还不够,因为一门计算机语言需要处理各种数据信息,如图像、视频、文字、
语音等,所以还需要其他的数据类型从底层支持多样的数据处理,本章笔者将重点介绍 Java支持的各种数据类型,
虽然说明起来有些烦琐,但只要读者把例子运行一下,再翻翻书理解基本的概念就足够了。
Java是一种对数据类型要求严格的高级开发语言,严格性体验在程序的编译时刻运行环境知道每个变量(变量的概念在 2.4节介绍)或表达式的确定类型,一旦 Java知道了数据类型,也就确定了其相应的运算。 Java把数据类型分为两大类,一类是基本数据类型,一类是引用数据类型。
2.2.1 基本数据类型
Java的基本数据类型分为四类,即整型、浮点型、字符型和布尔型,这四种数据类型都有自己的表达范围和相应的操作符,下面依次详细介绍。
1.整型数据类型
整型又分为四种数据类型,即 byte,short,int和 long,这些又称为关键字,即在 Java中不能随便使用这些关键字,只能用来表达它特定的数据类型。
2.浮点数据类型
浮点数据类型又分为两种:单精度浮点型( float)和双精度浮点型
( double)。 float类型用 32位存储,而 double类型用 64位存储,二进制位数越多说明其表达数字的精度越高。注意二者都是表示非整数的,计算机里表示小数通过浮点数实现。
3.字符数据型
其实在 Java规范中把字符型数据归为整型数据类型,但是由于理解起来不直观,这里就另分为一类,读者只要认为它是数据类型的一种就可以了。
不必关心如何分类。
4.布尔数据型
布尔数据类型有两种,即 true和 false。布尔类型通常用于逻辑判断,尤其多用在程序的流程控制中。布尔类型的默认值是 false,即如果定义了一个布尔变量但没有赋初值,默认的该布尔变量值是 false。
2.2.2 引用数据类型
在学习引用数据类型前,最好先学习第 8章的面向对象技术导论,读者也可以略过本节,在学完第 8
章后再回头学习本节的引用类型。这里首先假设读者已经具备了面向对象的基本知识,尤其对类和接口有了良好的认识。
Java把引用类型分为三类,即类类型 (class
types)、接口类型 (interface types)和数组类型
(array types)。
1.类类型
2.接口类型
3.数组类型
2.3 数据类型转换
Java在数据计算时支持混合和数据类型的计算,
如整型数据与浮点型数据可以进行加、减、乘、
除运算。所以 Java支持数据类型的转换。下面介绍两种数据类型的转换方式。
2.3.1 隐式数据类型转换
对于整型数据,Java支持隐式的数据类型转换,
但该转换是有规则的,即取值范围小的可以隐式转化为取值范围大的数据类型,如 int型整型数据可以自动转型为 long型整型数据。表就是按照数据类型隐式转换顺序的表。
2.3.2 显式数据类型转换
显式的数据类型转换也常叫强制数据类型转换,即取值范围大的必须强制转化为取值范围小的数据类型,如 long型整型数据可以强制转型为 int型整型数据,但这种转化使用时一定要谨慎,因为如果取值范围大的数据无法用取值范围小的数据类型表达,则会失去数据表达的准确性。代码显示数据类型转换。
代码显示数据类型转换
1 public class DataTypeChange{
2 public static void main(String[ ] args){
3 long l = 100;
4 int I ;
5 int i = I; //把 long型数据转化成 int型数据,此时需要强制类型转化,否则会提示图 2.3的错误
6 }
7 }
2.4 变量与常量
变量与常量是经常遇到的两种数据类型,变量是指具体内容没有确定的量,而其内容需要在一定的条件下指定。而常量是不会变化的量,无论什么条件下其内容都是固定不变的。本节将详细介绍变量和常量。
2.4.1 变量
Java中的变量是和数据类型相关联的一段存储空间,通过变量来操纵存储空间中的数据,但此存储空间里到底要放该类型的什么数据是不确定的,
这就是变量的含义。如定义一个 double型变量
double mynumber;此时编译器为该变量 mynumber
提供一个 64位的存储空间,而该内存空间中到底放置 double数据类型范围内的哪个数值是不确定的。
变量的定义有两部分组成,即变量类型和变量名。
如 int age = 30,double rate,char a等。
2.4.2 常量
常量是相对变量而言的,常量是程序执行过程中不发生变化的量,一旦初始化该常量,在内存中的数值就不发生变化。在 Java中常量的定义为。
final double RATE = 0.234;
使用修饰符 final 说明是常量,double说明数据类型,RATE是常量名字,按照 Java的规范常量都用大写字母表示。
2.5 Java运算符
运算符是进行数值计算的标识符,如自然数计算的,+ - * /” 等都是 Java运算符的一种,在程序编写过程中会经常用到数值运算或字符串计算
(或称为操作)。下面将依次介绍 Java重要的运算符。
2.5.1 数学运算符
数学运算符号实现整型数据类型和浮点型数据类型的计算。表详细描述了数学运算符的相关内容。
2.5.2 关系运算符
关系运算符直观的说是进行关系运算的标识符,这里关系是指两个数值或表达式的比较结果,如对于两整数 x = 100,y = 200,
表达式 x < y的结果是真( true),而表达式 x > y的结果是假
( false),关系运算的计算结果只有两种即真( true)与假
(false),显然这是布尔数据类型。 Java中关系运算符有 6种。其类别及作用详见表关系运算符。
2.5.3 逻辑运算符
逻辑运算符的计算对象是布尔变量,一提到逻辑读者或许觉得有些抽象,其实只要理解并记住运算符的逻辑规则,就能很好掌握该运算符号的使用。在表逻辑运算符中,假设 x和 y都是布尔变量,
需要读者记住逻辑运算符的写法和相应的功能就可以了。
2.5.4 位运算符
首先从直观的概念位运算可以猜测它操作的对象是一个 bit位。事实上 Java也是这样考虑的,但是位运算的操作对象是两个数据类型相同的数据转化成二进制表达后再进行相应位的运算。 Java定义了三种位运算符,即与 (&)、异或 (^)、或 (|)。
例如:
int x = 10;
int y = 20;
x & y即,00001010&00010100
计算结果是 0。
其他位运算如异或 (^)运算,或 (|)运算的计算方法类似。
2.5.5 位移运算符
首先解释位移的概念,位移顾名思义就是位置移动,这里移动的对象是二进制位 。 Java提供了三种位移运算符,即左移运算符
( <<),不带符号右移运算符 ( >>>),带符号右移运算符 ( >>) 。
运算规则:首先把运算对象转化成二进制位,如把 20二进制为表达为 00010100。
( 1) 左移运算符计算规则:把数据对象的二进制位依次左移 n位,
右边空出的位置补 0,如 20<<2,计算结果为 01010000,十进制值为 80。
( 2) 不带符号右移运算符规则:把数据对象的二进制位依次向右移动 n位左边空出的位置补 0,如 20>>>2,计算结果为 00000101,
十进制为 5。
( 3)带符号的右移运算规则:把数据对象的二进制位依次右移 n
位,移出的数补到左边。如 20>>2,计算结果为 00000101,十进制为 5。这里恰巧和不带符号右移运算结果相同。再举例如 15>>2,
15二进制位表达为 00001111,15>>2的计算结果为 11000011,十进制为 195。而 15>>>2的计算结果为 00000011,十进制为 3 。显然带符号右移与不带符右移有明显区别。
2.5.6,?,” 运算符
在众多高级语言中“?:”运算符都得到很好的运用,Java也继续采用该运算符号。其使用格式为,操作数 1? 操作数 2 操作数 3。
格式解释:操作数 1也可以是表达式,但操作数 1
的结果必须是 boolean值,如果操作数 1的值为
true,则选择操作数 2,否则选择操作数 3。例如,
对两个不相等的整型变量 x和 y,x > y? x,y。
如果 x > y即关系表达式 x>y为真,则取 x,否则取
y,即取 x和 y中的最大数。
2.5.7 运算符的优先顺序
运算符是有优先顺序的,在一个表达式中有多个运算符,它们之间遵守一定的计算顺序。其优先顺序如表所示。
2.6 本章习题
( 1) 学完本章后,读者需要回答:
1,Java的数据类型分几种并举例 。
2,如何实现显示数据类型转换,隐式数据类型转换适合那些数据类型 。
3,如何理解变量,常量,二者的区别?
4,写出下列运算表达式的计算结果,其中 x=20,y = 12,z =false。
(1) 100 ==x + y;
(2) x = y +10;
(3) z||y+x;
(4) x*=19;
(5) (y/2>=x? 3:6);
(6) x%y;
(7) y >=6&&y<=x;
(8)!x*3<=x*4;
5,设 int x = 10,int y =5,z = 7,分析下列表达式的计算结果?
(1) z = x++ * y++;
(2) z = ++x – y--;
(3) z = x++*2/y--;
(4) z = x++ - ++y;
2.6 本章习题
( 2)注意事项。
不要使用过于复杂的运算符如 x++*=x— 之类,最好分解成简单的计算步骤,如果需要可以通过增加 ( )的方式确定计算的优先顺序。