Java入门第49课——方法和数组

朴灿烈づ我的快乐病毒、 2022-01-31 19:29 352阅读 0赞

1.1 方法的重载

1.1.1 方法的签名

· 方法的签名包含如下两个方面:方法名和参数列表

· 一个类中,不可以有两个方法的签名完全相同,即一个类中不可以有两个方法的方法名和参数列表都完全一样。

· 如果一个类的两个方法只是方法名相同而参数列表不同,是可以的。

image.png

1.1.2 方法重载及其意义

假设收款窗口的设计,采用两种方式:

A.开设三个窗口,分别用来接收现金,信用卡和支票的交付方式(分别在窗口上标明),用户根据需要选择窗口,并投入指定的物件

B.开设一个窗口,标为”收款”,可以接收现金,信用卡和支票三种物件。该窗口可以按照输入的不同物件实施不同的操作。例如,如果输入的是现金则按现金支付,如果输入的是信用卡则按信用卡支付。

image.png

方法重载及其意义(续1)

· 在Java语言中,允许多个方法的名称相同,但参数列表不同,称之为方法的重载(overload)。

  1. public class PayMoney{ //--------A方式
  2. public boolean payByCash(double money){...}
  3. public boolean payByCard(String cardId,String cardPwd){...}
  4. public boolean void payByCheck(String compayName,double moeny){...}
  5. }
  6. public class PayMoney{ //-------B方式
  7. public boolean pay(double money){...}
  8. public boolean pay(String cardId,String cardPwd){...}
  9. public boolean pay(String compayName,double money){...}
  10. }

1.1.3 编译时根据签名绑定调用方法

· 编译器在编译时会根据签名来绑定调用不同的方法,我们可以把重载的方法看成是完全不同的方法,只不过恰好方法名相同而已。

  1. public boolean pay(double money){...}//1
  2. public boolean pay(String cardId,String cardPwd){...}//2
  3. public boolean pay(String compayName,double moeny){...}//3
  4. pay(8888.88);//调用方法1
  5. pay("12345678","666666");调用方法2
  6. pay("itkzhan",8888.88);//调用方法3

1.2 构造方法

1.2.1 构造方法语法结构

· 构造方法是在类中定义的方法,不同于其他的方法,构造方法的定义有如下两点规则:

- 构造方法的名称必须与类型相同。

- 构造方法没有返回值,但也不能写void。

语法:

[访问修饰符] 类名(){

//构造方法体

}

1.2.2 通过构造方法初始化成员变量

· 构造方法常用于实现对象成员变量的初始化

  1. class Cell{
  2. int row;
  3. int col;
  4. public Cell(int row1,int col1){
  5. row=row1;
  6. col=col1;
  7. }
  8. }
  9. class TestCell{
  10. public static void main(String[] args){
  11. printCell(c1);
  12. }
  13. }

创建对象时,构造方法写在new关键字后,可以理解为:”new”创建了对象,而构造方法对该对象进行初始化。

1.2.3 this关键字的使用

· this关键字用在方法中,用于指向调用该方法的当前对象;简单的说:哪个对象调用方法,this指的就是哪个对象。严格来讲在方法中需要通过this关键字指明当前对象。

例如:

  1. public void drop(){
  2. this.row++;
  3. }

该方法可以理解为:将调用该方法对象的成员变量row加1;这样书写概念更加清晰。

· 为了方便起见,在没有歧义的情况下可以省略this:

  1. public void drop(){
  2. row++;
  3. }

this关键字的使用(续1)

· 在构造方法中,用来初始化成员变量的参数一般和成员变量取相同的名字,这样会有利于代码的可读性,但此处就必须通过this关键字来区分成员变量和参数了(不能省略this),例如:

  1. public Cell(int row,int col){
  2. this.row=row;
  3. this.col=col;
  4. }

1.2.4 默认的构造方法

· 任何一个类都必须含有构造方法;

· 如果源程序中没有定义,编译器在编译时将为其添加一个无参的空构造方法(称之为”默认的构造方法”)。

例如:先前的Cell类源文件中没有构造方法,编译时将为其添加如下的构造方法:Cell(){}

· 当定义了构造方法后,Java编译器将不再添加默认的构造方法。

默认的构造方法(续1)

  1. class Cell{
  2. int row;
  3. int col;
  4. Cell(int row,int col){
  5. this.row=row;
  6. this.col=col;
  7. }
  8. }
  9. public class CellGame{
  10. public static void main(String[] args){
  11. Cell cell=new Cell();
  12. }
  13. }

编译错误,当定义了构造方法Cell(int,int)后,编译器就不会提供默认的构造方法了。

1.2.5 构造方法的重载

· 为了使用方便,可以对一个类定义多个构造方法,这些构造方法都有相同的名称(类名),方法的参数不同,称之为构造方法的重载。

  1. Cell c1=new Cell(5,6) -> Cell(int row,int col){...}
  2. Cell c1=new Cell() -> Cell(){...}
  3. Cell c1=new Cell(5) ->Cell(int n){...}

构造方法的重载(续1)

· 一个构造方法可以通过this关键字调用另一个重载的构造方法:

  1. public Cell(int row,int col){
  2. this.row=row;
  3. this.col=col;
  4. }
  5. public Cell(int n){
  6. this(n,n);//调用Cell(int,int)
  7. }
  8. public Cell(){
  9. this(0,0);
  10. }

2.1 引用类型数组

2.1.1 数组是对象

· 在Java中,数组属于引用数据类型;

· 数组对象在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指向数组对象。

· 数组的元素可以看成数组对象的成员变量(只不过类型全都相同)。

image.png

2.1.2 引用类型数组的声明

· 数组的元素可以是任何类型,当然也包括引用类型。

· 例如:Cell[] c=new Cell[4];

image.png

注意:new Cell[4]实际是分配了4个空间用于存放4个Cell类型的引用,并不是分配了4个Cell类型的对象。

2.1.3 引用类型数组的初始化

· 引用类型数组的默认初始值都是null。

· 如果希望每一个元素都指向具体的对象,需要针对每一个数组元素进行”new”运算。

image.png

引用类型数组的初始化(续1)

  1. Cell[] cells=new Cell[]{new Cell(0,4),new Cell(1,3),new Cell(1,4),new Cell(1,5)};

image.png

2.1.4 数组的类型是基本类型数组

· 数组的元素可以为任意类型,也包括数组类型

  1. int[][] arr=new int[3][];
  2. arr[0]=new int[2];
  3. arr[1]=new int[3];
  4. arr[2]=new int[2];
  5. arr[1][1]=100;

图111.jpg

arr指向一个数组,该数组有三个元素,每个元素都是int类型数组,长度分别为2,3,2。

数组的类型是基本类型数组(续1)

  1. int row=3;
  2. int col=4;
  3. int[][] arr=new int[row][col];
  4. for(int i=0;i<row;i++){
  5. for(int j=0;j<col;j++){
  6. arr[i][j]=0;
  7. }
  8. }

数组的类型是基本类型数组(续2)

· (接上)这样的数组可以用来表示类似”矩阵”这样的数据结构。arr[i][j]可以认为访问行号为i,列号为j的那个元素。在其他的一些语言中有专门表示这样结构的所谓二维数组;而严格的讲,Java语言中没有真正的二维数组。

image.png

学习网址:http://java.itkzhan.com/

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读