对象创建后,其成员变量可以按照默认的方式初始化:
1、数值类型(byte、short、int、long、float、double)都为0;
2、boolean型为false;
3、char型为\u0000,\u表示这个是Unicode字符编码,\u0000表示NUL;
4、引用类型为null。
除8种基本类型之外,用类、接口、数组等声明的变量称为引用类型变量,简称“引用”。
引用类型变量中存储的是某个对象在内存中的地址信息,通常称为指向该类的对象。引用的功能在于访问对象。
可以给引用类型变量赋值为null,表示不指向任何对象。当某个引用类型变量为null时无法对对象实施访问。此时,如果通过引用访问成员变量或调用方法,会产生NullPointerException异常。
相同类型的引用类型变量之间赋值,不会创建新的对象,只是使其指向同一个对象。
方法的签名包含两个方面:方法名和参数列表。一个类中,不可以有两个方法的签名完全相同。
在Java语言中,允许多个方法的名称相同,但参数列表不同,称之为方法的重载(overload)。
编译器在编译时会根据签名来绑定调用不同的方法。
this关键字用在方法体中,用于指向调用该方法的当前对象。
在Java语言中可以通过构造方法实现对对象成员变量的初始化。构造方法是在类中定义的方法。但不同于其他的方法。
1、构造方法的名称必须与类名同名。
2、构造方法没有返回值,但也不能写void。
3、任何一个编译后的类都必须含有构造方法。如果源程序中没有定义,编译器在编译时将为其添加一个无参的空构造方法(称之为“默认的构造方法”)。
4、当自定义了构造方法后,Java编译器将不再添加默认的构造方法。
//构造方法的重载
package oo.day02;
//格子类
public class Cell {
int row; //行号
int col; //列号
Cell(int row,int col){
this.row = row;
this.col = col;
}
Cell(int n){
this(n,n); //调用构造方法
}
Cell(){
this(0,0); //调用构造方法
}
void drop(){ //下落1格
row++;
}
void drop(int n){ //下落n格
row += n;
}
void moveLeft(){ //左移1格
col--;
}
void moveLeft(int n){ //左移n格
col -= n;
}
String getCellInfo(){ //获取格子坐标
return row+","+col;
}
}
在Java中,数组属于引用数据类型。数组对象在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指向数组对象。
数组的元素可以看成数组对象的成员变量(只不过类型全都相同)。数组的元素可以是任何类型,当然也包括引用类型。
需要掌握以下四种形式的引用类型数组:
(1)
Cell[] cells = new Cell[4];
cells[0] = new Cell();
cells[1] = new Cell(2);
cells[2] = new Cell(5,4);
cells[3] = new Cell(2,6);
(2)
Cell[] cells = {
new Cell(),
new Cell(1),
new Cell(5,4),
new Cell(2,7)
};
(3)
Cell[] cells = new Cell[]{
new Cell(),
new Cell(1),
new Cell(5,4),
new Cell(2,7)
};
(4)
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[2];
arr[1][1] = 100;
package oo.day02;
//T型俄罗斯方块
public class T {
Cell[] cells;
T(){
this(0,0);
}
T(int row,int col){
cells = new Cell[4];
cells[0] = new Cell(row,col);
cells[1] = new Cell(row,col+1);
cells[2] = new Cell(row,col+2);
cells[3] = new Cell(row+1,col+1);
}
void drop(){ //下落
for(int i=0;ivoid moveLeft(){ //左移
for(int i=0;ivoid moveRight(){ //右移
for(int i=0;ivoid print(){ //打印每个格子的坐标
for(int i=0;iout.println(s);
}
}
}