1.什么是类?什么是对象?
1)现实世界是由很多很多的对象组成的
基于对象抽出了类
2)对象:真实存在的单个的个体
类:类型/类别,代表一类个体
3)类中可以包含:
3.1)所有对象所共有的属性(静)———成员变量
3.2)所有对象所共有的行为(动)———方法
4)一个类可以创建多个对象,
同一个类创建的对象,结构相同,数据不同
5)类是对象的模板,对象是类的具体的实例
2.如何创建类?如何创建对象?如何访问成员?
1).定义一个类,包括了成员变量的的定义和方法的定义(方法的修饰词不能有static),用于体现对象共有的属性和描述对象的行为,封装对象的功能。其中成员变量用于描述该类型对象共同的数据结构。如没主动创建方法,系统会自动为这个类生成一个无参构造方法。
class 类名{
成员变量类型 变量名称;
……
修饰词 返回值类型 方法名称([参数列表]){
方法体…..
}
……
}
2).类定义后,用new 类名();创建对象,这个过程通常称为实例化。
对象创建后,其成员变量可以按照系统默认值初始化。
byte,short,int,long,char————–0
float,double————————–0.0
boolean——————————-false
char型——————————–/u0000
String(引用类型)———————-null
3).对对象进行访问控制需要使用一个特殊的变量—引用。引用类型变量存放的是该类对象的地址,也叫“指向该类的对象”,通过这个变量,就可以访问控制对象的成员变量或调用方法。同类型“引用”可以相互赋值,不会在堆中创建新对象,但在栈中存储同样的对象地址。对于“引用”可以赋值为null,表示没有存放任何地址,此时不能通过它访问对象,会报空指针NullPointException错误。
类名 引用 = new 类名();
练习:
1.完成Student与StudentTest类:
1)Student类:
1.1)成员变量:name,age,address,className,stuId
1.2)方法:study(),sayHi()
2)StudentTest类:
2.1)main()方法中创建学生对象并测试
2.完成Car与CarTest类:
1)Car类:
1.1)成员变量:brand,color,price
1.2)方法:setInfo(..),stop(),forward(..),getInfo()
2)CarTest类:
2.1)main()方法中创建汽车对象并测试
HW:
1.描述类和对象的关系
对象是一个客观存在的实体,是面向对象编程过程中分析与解决问题的出发点与基础。对象的实质就是内存中的一块数据存储区域,其数据结构由定义它的类来决定。
类是抽象的引用数据类型,用于构建对象的模板,对象通过类的实例化产生,基于对象抽出了类,一个类可以创建多个对象,每个对象拥有自己的数据和行为。
2.请描述引用类型和基本类型的区别
除8种基本类型之外,用类名(接口、数组)声明的变量称为引用类型变量,简称“引用”。引用的功能在于访问对象。
基本类型变量本身就包含了其实例数据,而引用类型变量中存储的是某个对象在内存中的地址信息。当一个引用类型变量指向该类的对象时,就可以通过这个变量访问对象。
3.在Tetris项目中实现格子的下落、左移以及获取格子的位置信息的功能
class Cell {
int row, column;
Cell(int r, int c) {
row = r;
column = c;
}
void Drop() {
row++;
}// 每下落一格,行数加一
void MoveLeft(int n) {
column -= n;
}// 每左移一格,列数减一
void MoveRight(int n) {
column += n;
}
String GetCellInfo() {// 获取行号,列号信息
return row + "," + column;
}
public static void main(String[] args) {
Cell c=new Cell(1,3);
PrintWall(c);
String receipt=c.GetCellInfo();
do{
System.out.println("请输入数字1、2 、3 、0选择相应的功能:");
Scanner sc=new Scanner(System.in);
String prompt=sc.next();
if(prompt.equals("1")){
System.out.println("格子下落一行");
c.Drop();
PrintWall(c);
}
if(prompt.equals("2")){
System.out.println("格子左移一列");
c.MoveLeft();
PrintWall(c);
}
if(prompt.equals("3")){
System.out.println("格子右移一列");
c.MoveRight();
PrintWall(c);
}
if(prompt.equals("0")){
System.out.println("Tks for use");
break;
}
}while(true);
}
public static void PrintWall(Cell cc){
for(int r=1;r<=9;r++){
for(int c=1;c<=5;c++){
if(r==cc.row&&c==cc.column){
System.out.print("* ");
}else{
System.out.print("- ");
}
}
System.out.println();
}
}
}
tips:重点是俄罗斯方块项目,一定要掌握。