1.面向对象的初步认识
什么是面对对象
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好
面对对象的和面向过程
这里拿洗衣服来举例
传统的洗衣服流程:
这里的每一步都是依次进行,少了一个环节就无法完成,顺序也不能打乱,这就是面向过程。
现代的洗衣服:
在这里我们这只需要关注四个对象:人,衣服,洗衣粉,洗衣机。
整个过程是:四个对象之间通过交互合作完成洗衣服的过程,我们并不需要关注洗衣机究竟是如何洗衣服的。这就是面对对象。
注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。
2.类的定义和使用
什么是类?
类是用来对一个实体
(
对象
)
来进行描述的
,主要描述该实体
(
对象
)
具有哪些属性
(
外观尺寸等
)
,哪些功能
(
用来干 啥)
,描述完成后计算机就可以识别了。
比如:洗衣机,它是一个品牌,在 Java 中可以将其看成是一个类别。属性:产品品牌,型号,产品重量,外观尺寸,颜色 ...功能:洗衣,烘干、定时 ....
类的定义格式
在
java
中定义类时需要用到
class
关键字
,具体语法如下:
// 创建类class ClassName {field ; // 字段 ( 属性 ) 或者 成员变量method ; // 行为 或者 成员方法}
class
为
定义类的关键字,
ClassName
为类的名字,
{}
中为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类 具有哪些功能,称为类的成员方法。
采用
Java
语言将洗衣机类在计算机中定义完成,经过
javac
编译之后形成
.class
文件,在
JVM
的基础上计算机就可以识别了。
注意事项
- 类名注意采用大驼峰定义
- 成员前写法统一为public
- 此处写的方法不带 static 关键字.
3.类的实例化
什么是实例化
定义了一个类,就相当于在计算机中定义了一种新的类型
,与
int
,
double
类似,只不过
int
和
double
是
java
语言自 带的内置类型,而类是用户自定义了一个新的类型,比如上述的:PetDog
类和
Student
类。它们都是类
(
一种新定 义的类型)
有了这些自定义的类型之后,就可以使用这些类来定义实例
(
或者称为对象
)
。
用类类型创建对象的过程,称为类的实例化
,在
java
中采用
new
关键字,配合类名来实例化对象。
注意事项
- new 关键字用于创建一个对象的实例.
- 使用 . 来访问对象中的属性和方法.
- 同一个类可以创建对个实例.
类和对象的说明
- 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
- 类是一种自定义的类型,可以用来定义变量.
- 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
- 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间
4.this引用
什么是 this 引用
this
引用指向当前对象
(
成员方法运行时调用该成员方法的对象
)
,在成员方法中所有成员变量的操作,都是通过该
引用去访问
。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
public class Date {
public int year;
public int month;
public int day;
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(this.year + "/" + this.month + "/" + this.day);
}
}
public static void main(String[] args) {
Date d = new Date();
d.setDay(2020,9,15);
d.printDate();
}
注意: this 引用的是调用成员方法的对象 。
为什么要用 this 引用
当形式变量和成员变量名相同时
public void setDay(int year, int month, int day){
year = year;
month = month;
day = day;
}
当这里的形式变量名与成员变量名相同时,这里的名用的是形式变量,因为局部变量和全局变量在这种情况之下局部变量优先,就无法达到赋值的目的。
public void setDay(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}
这样的情况下就将成员变量和形式变量进行了有效区分。
成员方法通过对this的运用有效的对创建的各个对象进行操作
this 引用的特性
- this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
- this只能在"成员方法"中使用
- 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
- this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法
对象的引用传递给该成员方法, this 负责来接收
5.对象的构造以及初始化
构造方法
构造方法
(
也称为构造器
)
是一个特殊的成员方法,
名字必须与类名相同,在创建对象时,由编译器自动调用,并且
在整个对象的生命周期内只调用一次
。
public Date(intyear,intmonth,intday){
this.year=year;
this.month=month;
this.day=day;
System.out.println("Date(int,int,int)方法被调用了");
}
特性
- 名字必须与类名相同
- 没有返回值类型,设置为void也不行
- 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
- 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)