模块2 面向对象编程初级 --- 第五章:创建类的成员属性和方法
第五章 创建类的成员属性和方法
主要知识点
1、Java语言的基本组成
2、运算符与表达式
3、程序控制结构
4、Java程序的编程规范
5、类成员方法的创建方法
学习目标
能够根据Java语言的基本语法和程序结构声明类的成员方法,从而定义完整的类;
5.1 Java语言的基本组成
Java语言主要由5种元素组成:分隔符、关键字、文字、运算符和标识符。
5.1.1 分隔符
Java语言的分隔符有三种:空白符、注释语句和普通分割符;
1、空白符
为了增加程序的可读性,Java语言的成分之间可以插入任意多个空白符,在编译时,系统自动忽略多余的空白符;
2、注释语句
为了提高程序的可读性而附加的内容,Java提供三种形式的注释:
(1)// 一行的注释内容
(2)/* 一行或多行的注释内容 */
(3)/** 文档注释内容*/
3、普通分隔符
(1){} :花括号,用来定义复合语句、类体、方法体以及进行数组的初始化;
(2);:分号,表示一条语句的结束。
(3),:逗号,用来分隔变量说明和方法的参数。
(4)::冒号,说明语句标号。
5.1.2 关键字
关键字用来表示特定的意义,也称为保留字,不能用于标志符。Java的关键字共有48个。
说明:
(1)所有关键字都是小写的,所以class不是关键字;
(2)then和sizeof都不是Java的关键字,大写的NULL不是Java语言的关键字,String是Java语言的一个封装类(字符串)的类名,也不是关键字;
5.2 运算符与表达式
运算符指明对操作数所进行的运算。按照操作数的数目来分,可以有单目运算符、双目运算符和三目运算符。分别对应一个、两个和三个操作数。对于单目运算符来说,有前缀表达式和后缀表达式;对于双目运算符来说,则采用中缀表达式。按照运算符功能来分,基本的运算符有下面几类:
(1)算术运算符(+、-、*、/)
(2)关系运算符(>、<、>=、<=、!=、==)
(3)布尔逻辑运算符(!、&&、||)
(4)位运算符(>>、<<、>>>、&、|)
(5)赋值运算符(=、+=)
(6)条件运算符(?:)
(7)其他,包括分量运算符 . ,下标运算符[]
5.2.1 算术运算符
算术运算符作用于整型或浮点型数据,完成算术运算;
1、双目算术运算符
双目算术运算符包括:+、-、*、/、%(取模)五种。
其中,Java对加法运算符进行了扩展,使它能够进行字符串的连接,例如:“abc”+"de",得到字符串“abcde”。取模运算符 % 的操作数可以是浮点数,如 37.2 % 10 = 7.2;
2、单目算术运算符
在单目运算符中,++、--是具有代表性的。分为前置运算和后置运算,如++i,i++,--i, i--等。
前置运算:先对操作数进行自增(减)操作,再返回表达式(操作数改变)的值;
后置运算:先返回表达式(操作数目前)的值,再对操作数进行自增(减)操作;
++、--运算符的计算方式,跟C语言完全相同。
5.2.2 关系运算符
关系运算符都是双目运算符。包括:>、<、>=、<=、<>、!=、==
关系运算符主要是用来比较两个值的大小关系,返回布尔类型的值true或false。其中关系运算符常与逻辑运算符一起使用,作为流控制语句的判断条件;
5.2.3 逻辑运算符
逻辑运算符包括:&&(逻辑与)、||(逻辑或)、!(逻辑非),逻辑表达式的结果是布尔值 true 或 false;
对于&& 来说,是一个双目运算符。只有表达式左边和右边都为真(true),整个表达式为true;对于||来说,只要表达式的左边和右边有一个为true,整个表达式为true;
5.2.4 赋值运算符
赋值运算符 = 把一个数据赋给一个变量,如果左侧变量的数据类型级别高,则右侧的数据类型被转化为与左侧相同的数据类型。然后赋值给左侧。否则,需要使用强制类型转化运算符。
5.2.5 条件运算符
条件运算符 ?: 是三目运算符,一般形式为:
expression ? statement1 : statement2
其中,表达式expression的值应该为一个布尔值,如果该值为true,则执行statement1,否则执行语句statement2,且该数据类型不能是void;例如:求 a 和 b 的较大值,表达式是max = a > b ? a : b ;
5.2.6 表达式
表达式是变量、常量、运算符、方法调用的序列,通过执行这些元素指定的计算并返回某个值。按照运算符的优先顺序从高到低进行,同级的运算符则按从左到右的方向进行。通过添加小括号()可以提高运算符的优先级,这样就可以清楚地表明运算次序,增强了程序的可读性;
5.3 控制结构
Java程序通过流程控制语句来执行程序,完成一定的任务。控制程序段可以是单一的一条语句,也可以是大括号{}括起来的一个复合语句。Java的控制结构包括:
(1)分支语句(if-else、break、switch、return)
(2)循环语句(while、do-while、for、continue)
(3)异常处理语句(try-catch-finally、throw)
5.3.1 分支语句
分支语句提供了一种控制机制,使程序在执行时,可以跳过某些语句,而转去执行特定的语句。
1、条件语句 if - else
if - else 语句
根据判断条件的真假来执行两种操作的一种,格式为:
if(boolean-expression) statement1; [else statement2; ]
(1)若布尔表达式的值为true,则程序执行语句statement1,否则执行语句statement2。
(2)else子句是任选的。
(3)每一个单一的语句后必须有分号。
(4)if-else语句的一种特殊形式为嵌套语句,即:
if(expression1){ statement1; }else if(expression2){ statement2; }...... else if(expressionM){ statementM; }else{ statementN; }
2、多分支选择语句switch
switch语句根据表达式的值来执行多个操作中的一个,一般格式如下:
switch(expression){ case value1:statement1; break; case value2:statement2; break; ...... case valueN:statementN; break; [default:defaultStatement;] }
说明:
(1) case子句中的值value1必须是常量,而且所有case子句中的值应是不同的。
(2)default子句是任选的,当表达式的值与任一case子句中的值不匹配时,程序执行default后面的语句;
(3)break语句用来执行一个case分支语句后,使程序跳出switch语句,即终止switch语句的执行。
3、break语句
break语句用来终止switch语句的执行,格式如下:
BlockLabel:{codeBlock}
break语句的第二种使用情况就是跳出它所指的块,并且从紧跟该块后的第一条语句处执行,其格式为:
break BlockLabel
即用break语句来实现程序流程的跳转,不过应该该尽量避免使用这种方式。
4、返回语句return
return语句从当前方法中退出,返回到调用该方法的语句处;返回值的数据类型必须和方法声明中的返回值数据类型一致。可以使用强制类型转换来使类型一致。
5.3.2 循环语句
循环语句的作用是反复执行一段代码,直到满足终止循环的条件为止,一个循环一般应包括四部分内容:
(1)初始化部分:设置循环的一些初始条件,如计算器清零等;
(2)循环体部分:反复循环的一段代码;
(3)迭代部分:这是在当前循环结束,下一次循环开始前执行的语句,常常用来使计数器变量加1或减1;
(4)终止部分:通常是一个布尔表达式,每一次循环都要对该表达式求值,以此来验证是否满足循环终止条件。
Java提供的循环语句有:while语句,do-while语句和for语句三种,下面分别来介绍:
(1)while语句
while语句实现 “当型” 循环,一般格式为:
[initialization] while(termination){ body; [iteration;] }
布尔表达式(termination)表示循环条件,值为true时,循环执行大括号中的语句。while语句首先判断循环条件,当条件成立时,才执行循环体中的语句,如果一开始条件不成立,循环体一次都不会执行,这是 "当型" 循环的特点。
(2)do-while语句
do-while语句实现 “直到型” 循环,一般格式为:
[initialization] do{ body; [iteration;] }while(termination);
do-while语句至少可以执行一次,do-while语句首先执行循环体,然后判断循环条件,若结果为true,则循环执行大括号中的语句。直到布尔表达式的结果为false;
(3)for语句
for语句实现固定次数的循环,一般格式为:
for(initialization;termination;iteration){ body; }
for语句执行时,首先执行初始化操作(initialization),然后判断循环条件(termination)是否满足,如果满足,则执行循环体中的语句。最后执行iteration。完成一次循环后,重新判断循环条件。注意:分号不能省略。三者均为空的时候,相当于一个无限循环(死循环);
(4)continue语句
continue语句用来结束本次循环,跳过循环体中下面尚未执行的语句。
continue;
也可以用continue跳转到括号指明的外层循环中,这时的格式为:
continue(outerLable);
5.3.3 Java编码规范
养成养好的编码风格是程序员应该具备的基本素质,运用Java变成也要遵守Java的编码规范,这对于读懂别人的程序和让别人理解自己的代码都是十分重要的。
1、一般原则
(1)尽可能使用完整的英语单词描述符;
(2)采用适用于相关领域的术语;
(3)采用大小写混用,可读性更好;
(4)避免使用相似的名字,或者仅仅是大小写不同的名字;
2、具体要求
(1)包(package):都由小写字母组成;
(2)类(Class):所有单词的第一个字母均大写;
(3)接口(Interface):所有单词的第一个字母均大写;
(4)变量:第一个字母小写,后面所有的单词的首字母都大写。例如:firstName,lastName;
(5)静态常量:全部采用大写字母,单词之间用下划线分割。例如:PI、MIN_BALANCE;
5.4 数组
数组是有序数据的集合,数组中的每个元素具有相同的数据类型,通过下标来区分数组中元素的位置,数据包括一维数组和多维数组。
5.4.1 一维数组
1.一维数组的定义
一维数组的定义方式为:
type arrayName[];或者 type []arrayName;
其中type代表Java任意的数据类型;[]指明该变量是一个数组类型变量;Java在数组的定义中并不为数组元素分配内存,只有在分配存储空间后才能访问它的元素,这个时候要用到运算符new。其中格式如下:
arrayName = new type[arraySize];
2.一维数组元素的引用
在定义数组之后,并用new运算符分配内存空间后,就可以引用数组中的每一个元素。数组元素的引用方式如下:
arrayName[index]
其中,index为下标,下标从0开始,一直到数组的长度减一。
3.一维数组的初始化
在对数组元素进行赋值之后,也可以在定义数组的同时进行初始化,通过逗号(,)分割数组的各个元素,系统自动为数组分配一定的存储空间。
5.4.2 多维数组
多维数组可以看作是数组的数组,其中二维数组的每一个元素有事一个一维数组。
1、二维数组的定义
二维数组的定义方式为:
type arrayName[][];
与一维数组一样,这时Java对于数组元素也没有分配内存空间。
2、二维数组元素的引用
引用方式为:arrayName[index1][index2];同时,每一维的数组元素下标都是从0开始的。
3、二维数组的初始化
有两种方法初始化二维数组;直接对每一个元素进行赋值和在定义数组的同时进行初始化。但是以上方法,都是固定大小的数组,若是在声明过程中,无法确定数组大小,则就要使用类ArrayList,它是由系统包java.util提供。
5.5 成员方法的声明
类的方法,也被称为成员方法,其功能相当于C语言中的函数,用来规定类的属性上的操作;
5.5.1 方法的声明
声明类的成员方法的格式如下:
[修饰符] 返回值类型 方法名(形式参数列表) [throw 异常名列表] { 方法体; 局部变量声明; 语句序列; }
用abstract修饰的方法称为抽象方法。含有抽象方法的类称为抽象类,而子类行为的具体细节通过抽象方法的覆盖来实现,这种机制可以增加编程的灵活性;
5.5.2 方法的覆盖与重载
Java实现多态:方法的覆盖和方法重载;
在子类中,若要使用父类中被隐藏的方法,可以使用super关键字;
1、方法的覆盖
通过子类引用覆盖方法时,总是引用子类定义的方法,而父类中定义的方法被隐藏。
2、方法的重载
在同一个类中有两个或者两个以上的方法可以有相同的名字,只要它们的参数声明不同,这种情况称为方法重载;
习题
一、简单题
1、Java提供了哪些注释语句?功能有什么不同?
2、识别标识符,哪些是合法的?哪些是非法的?
3、Java程序有哪三种控制结构?
4、Java中提供了哪些循环控制语句?
5、数组有哪些特点?数组的声明和初始化方法与简单变量有什么不同?
6、什么是方法的覆盖?什么是方法的重载?
二、操作题
1、编写一个类,其方法是:从10个数中求出最大值、最小值以及平均值。
2、编写一个类,其方法是:编程求n!的值,设n = 8
3、编写一个类,其方法是:根据考试成绩的等级打印出分数段,优秀为90以上,良好为80~90,中等为70~79,及格为60~69,以下为不及格。要求采用switch语句。
4、编写一个类,其方法是:判断一个数是不是回文。回文是一种从前向后读和从后往前读都一样的文字或数字,例如:12321、abcba。
5、编写一个类,其方法是:将数组中元素的值按照从大到小输出。
6、编写一个类,其方法是:编程输出杨辉三角形的前6行。