Java SE:类与对象的认识
类与对象的认识
- 1.对于类与对象的认识
- 2.类的定义及使用
- 2.1类与对象的初步认识
- 2.2类的定义格式
- 3.类的实例化
- 3.1什么是实例化?
- 3.2 类和对象的说明
- 4.this引用
- 4.1 为什么要用this引用?
- 4.2this引用的特性
- 5.对象的构造及初始化
- 5.1构造方法
1.对于类与对象的认识
我们之前学习c语言就是在面向过程。面向过程注重过程是如何实现的。
以洗衣服为例,面向过程的解决思路如下:
面向过程维护或者扩展起来会比较麻烦。
Java是一门面向对象的语言,注重对象间的协作与交互而不需要关注具体细节如何实现。
依旧以洗衣服为例,面向对象的解决思路如下:
此时我们就只需要关注人,衣服,洗衣液,洗衣机之间的关系,不需要关注洗衣机内部如何工作。
2.类的定义及使用
2.1类与对象的初步认识
类是对对象的特性的描述,对象是类的具体实例。
以洗衣机为例,所有洗衣机都有品牌,功率,型号,容量,工作方式等特性。依据这些特性我们才能生产出符合要求的洗衣机。
2.2类的定义格式
定义类需要使用 class
关键字。
class text {
field; //字段/属性/成员变量
method; //方法
}
- class 紧随其后的是类名。{ }内部是类的主体。
- 类包含的内容称为类的成员。
- 属性是用来描述类的,称为类的成员属性或类成员变量。
- 方法用于说明类的功能,称为类的成员方法。
这样我们就可以创建一个洗衣机类:
class WashingMachine{public String brand;//品牌public String type;//型号public double capacity;//容量public double power;//功率public void washClothes(){System.out.println("洗衣功能");}public void dryClothes(){System.out.println("脱水功能");}
}
注意: 类名命名为大驼峰,方法命名为小驼峰。
3.类的实例化
3.1什么是实例化?
定义一个类后相当于在计算机中创建了一个类型,类似于int , double
。
用类创建对象的过程就成为类的实例化。
Java中使用 new
关键字来实例化对象。
public static void main1(String[] args) { WashingMachine w1 = new WashingMachine(); w1.washClothes(); w1.dryClothes();}
注意:
- 类后紧跟对象的命名。
- 使用
.
来访问对象的属性或方法。
运行结果:
3.2 类和对象的说明
- 类相当于模型,用于对一个实体进行描述,限定了成员。
- 类是一种自定义类型,可以定义定义变量。
- 一个类可以实例化多个对象,实例化出的对象占用实际的物理空间,储存类成员变量。
- 做一个比方,类相当于建筑图纸,并没有占用实际空间。而实例化对象相当于照着图纸建造房子,此时可以储存数据。
4.this引用
4.1 为什么要用this引用?
举个例子:构造函数形参与成员变量不同命名时,我们可以很好的区分
class Date {public int year;public int month;public int day;public void setDay(int y, int m, int d){year = y;month = m;day = d;}public void printDate(Date this){System.out.println(this.year + "/" + this.month + "/" + this.day);}
}
public class C0507 {public static void main(String[] args) {// 构造三个日期类型的对象 d1 d2 d3Date d1 = new Date();Date d2 = new Date();Date d3 = new Date();// 对d1,d2,d3的日期设置d1.setDay(2020, 9, 15);d2.setDay(2020, 9, 16);d3.setDay(2020, 9, 17);// 打印日期中的内容d1.printDate();d2.printDate();d3.printDate();}
但如果当形参名与成员变量名相同,我们就需要思考:
- 究竟是谁赋值给谁?是成员变量给成员变量?还是参数给参数?
public void setDay(int year, int month, int day){year = year;month = month;day = day;}
- 三个对象都调用了setDay()和printDate()函数,但是这两个函数没有任何有关对象的说明,那么setDay()是如何知道应该设置哪个对象的信息,printDate()是如何知道应该打印哪个对象的信息??
事实上,编译器不会报错,这是的变量默认为最近小括号内部的变量,这里也就是形参。这相当于自己给自己赋值,是无效的。
为了方便区分局部变量和成员变量,用 this.变量 来指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有的成员变量的操作都可以通过this引用去访问。
public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = day;}
4.2this引用的特性
- this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型。
- this只能在成员方法中使用。
- 在成员方法中,this只能引用当前对象,不可以指向其他对象。
- this是成员方法的第一个隐藏参数,编译器会自动传递,不需要手动编写。当成员方法执行时,编译器会负责将调用成员方法对象的引用传递给成员方法,this负责接收。
5.对象的构造及初始化
Java中未初始化的局部变量不能使用。
这时只需要在创建变量时初始化就可以直接使用。
类中的字段也可以初始化。
5.1构造方法
构造方法是一个特殊的成员方法,名字与类名相同,在创建对象时,由编译器自动调用,并且整个对象的生命周期只调用一次。
注意:
- 名字必须与类名相同,没有返回值,也不可以写
void
- 创建对象由对象自动调用,并且在对象的生命周期只调用一次(相当于人出生,每个人只能出生一次)
- 构造函数的作用是对对象中的成员进行初始化,并不负责为对象开辟空间
- 构造方法可以重载(可以根据需求输入不同参数来调用不同的构造方法)
public class Date {public int year;public int month;public int day;// 无参构造方法public Date(){this.year = 1900;this.month = 1;this.day = 1;
}// 带有三个参数的构造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
Date d = new Date();
d.printDate();
}
}
上述两个构造方法名字相同,参数列表不同,因此构成了方法的重载。
注意:
- 如果没有显式定义,编译器会自动生成默认的无参的构造方法。