模块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行。

posted @ 2024-07-23 17:00  我太想努力了  阅读(200)  评论(0)    收藏  举报