目录
一、理解面向对象
1.1 什么是OOP ?
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象!面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。OOP的核心概念包括:类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)。
1.2 OOP的优势
- 代码重用:通过继承,可以减少代码的重复编写。
- 易于维护和扩展:封装和模块化使得代码更易于理解和维护。
- 提高代码的可读性:通过将数据和行为封装在对象中,代码更加直观。
- 灵活性:多态性提供了高度的灵活性,允许在不修改现有代码的情况下引入新的对象类型。
二、类和对象
2.1 概念理解
什么是类?
- 类是对现实生活中一类具有共同属性和行为的事物的抽象。
- 可以理解为对象的设计图或蓝图。

什么是对象?
- 对象是类的实体,是看得见摸得着的实体。
- 类是对象的抽象,对象是类的实体。

对象的属性和行为
- 属性:对象具有的各种特征。
- 行为:对象能够执行的操作。

2.2 类的定义
类是用来对一个实体(对象)来进行描述,主要描述该对象具有哪些属性、哪些功能,描述完成后计算机就可以识别了。
比如手机类
属性:手机品牌、价格、型号、内存、颜色等…
功能:打电话、上网等…
定义类需要使用关键字class,格式如下:
class className{
//成员变量
变量1的数据类型 变量1;
变量2的数据类型 变量2;
...
//成员方法
方法1;
方法2;
...
}
类中包含的内容称为类的内容。
- 属性主要是用来描述类的,所以称为类的成员属性或者类的成员变量。
- 方法主要说明类具有哪些功能,称为类的成员方法。
例如一个手机的类如下:
public class Phone {
//成员属性
public String brand;//品牌
public String type;//型号
public double price;//价格
public String color;//颜色
//...
//成员方法
public void call(){
System.out.println("打电话...");
}
public void playGames(){
System.out.println("玩游戏...");
}
//...
}
注意事项:
- 类名要采用大驼峰命名。
- 一般一个文件当中只定义一个类。
- main方法所在的类一般要使用public修饰。
- public修饰的类必须要和文件名相同。
Java语言当中:
- 【小驼峰法】适用于变量的命名。第一个单词首字母小写,其后每个单词首字母均大写,例如myName
- 【大驼峰法】适用于类,函数,属性等的命名。第一个单词首字母大写,其后的每个单词首字母也是大写。例如MyName
【小结】:类,也可以认为是类型的意思,如int、double类型。定义了一个类,就相当于在计算机内定义了一种新的类型,只不过与int、double这些Java自带的内置类型不同是的是,类是我们自定义的一种新类型。
2.3 类的实例化(创建对象)
用类类型创建对象的过程,就称为类的实例化。Java采用new关键字,配合类名来实例化对象。
创建对象:
- 格式:类名 对象名 = new 类名();
- 例如:Phone p = new Phone();
使用对象:
1、使用成员变量
- 格式:对象名 . 变量名
- 例如:p.brand;
2、使用成员方法
- 格式:对象名 . 方法名(参数)
- 例如:p.playGames();

通过new关键字实例化一个对象:
通过new关键字实例化多个对象:
2.4 小结
类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员,它算是一种自定义类型。类和我们平时看到的图纸一样,可以“一纸多用”、“一类多用” !一个类可以实例化多个对象,实例化出的对象,占用用实际的物理空间,存储类成员变量,类实例化出来的对象就像现实中使用建筑设计图建造出来的房子,是实际存在的实体。
三、this关键字
1 什么是this关键字
this关键字是Java中的一个特殊引用变量,它持有当前对象的引用。在类的非静态方法和构造函数中,可以使用this关键字访问当前对象的成员变量和方法。简单来说,this关键字可以理解为“当前对象自身”的代称。
2 this关键字的基本使用
1、访问当前对象的成员变量
当成员变量和局部变量同名时,我们可以用this关键字去区分它们。

成员变量和局部变量的区别:
我们很容易混淆的成员变量和局部变量,我们可以从以下方面去理解它们:
| 区别 | 成员变量 | 局部变量 |
|---|---|---|
| 类中位置不同 | 类里方法外 | 方法内或者方法声明上 |
| 内存中位置不同 | 堆内存 | 栈内存 |
| 生命周期不同 | 随着对象的存在而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的调用完毕而消失 |
| 初始化值不同 | 有默认的初始值 | 没有默认的初始值,必须先定义,赋值。才能用 |
2、调用当前对象的方法
可以使用this关键字调用当前对象的方法

3、调用当前类的构造函数
在类的构造函数中,可以使用this关键字调用另一个构造函数。但是需要注意的是,调用构造函数的语句必须是构造函数中的第一条语句。

3 使用this关键字的注意事项
- this的指向:
- this关键字代表了所属函数的调用者对象,即哪个对象在调用this所在的函数,this就代表哪个对象。
- 不能使用场景:
- this不能在类定义的外部使用,只能在类定义的方法、构造器或初始化块中使用。
- 避免混淆:
- 在编写代码时,应清晰地使用this关键字来避免成员变量与局部变量的混淆。
- 同时,也应注意构造器之间的相互调用关系,避免死循环和无限递归。
四、构造方法
1、什么是构造方法?
构造方法是一种特殊类型的方法,用于在创建对象时初始化对象的状态。
构造方法具有以下特点:
- 名字与类名相同:构造方法的名称必须与类名相同,包括大小写。
- 无返回类型:构造方法没有返回类型,甚至连 void 都没有。
- 自动调用:当使用 new 关键字创建对象时,构造方法会自动被调用,并且再对象的生命周期内只调用一次。。
- 重载:一个类可以有多个构造方法,这些构造方法可以有不同的参数列表,称为构造方法的重载
2、为什么要使用构造方法
主要有一下几个原因:
-
对象初始化:构造方法的主要目的是在创建对象时初始化其状态。通过为对象的属性设置初始值,构造方法确保对象在创建时具有有效的、预期的状态。
-
封装:构造方法支持封装原则,即隐藏对象的内部状态并仅通过公共方法(如getter和setter)来访问和修改这些状态。通过提供私有的构造方法,类可以控制其对象的创建过程,防止外部代码直接访问或修改对象的内部状态。
-
灵活性:通过提供多个构造方法(构造方法重载),类可以灵活地支持不同的初始化场景。例如,一个类可能有一个无参构造方法用于创建具有默认值的对象,以及一个或多个有参构造方法用于创建具有特定值的对象。
-
代码重用:构造方法允许在对象创建时执行初始化代码,这有助于避免在多个地方重复相同的初始化逻辑。通过将初始化逻辑封装在构造方法中,可以提高代码的可重用性和可维护性。
-
对象创建的一致性:使用构造方法可以确保所有对象在创建时都遵循相同的初始化过程。这有助于保持对象之间的一致性,并减少因手动初始化而导致的错误。
-
依赖注入:在复杂的系统中,构造方法常用于依赖注入(Dependency Injection),即通过将依赖项作为参数传递给构造方法来创建对象。这有助于降低类之间的耦合度,并提高系统的可测试性和可维护性。
-
防止非法状态:构造方法可以在创建对象时执行验证逻辑,以确保对象的状态是合法的。如果提供的参数无效,构造方法可以抛出异常或返回null(尽管在Java中通常不推荐后者),从而防止创建处于非法状态的对象。
-
单例模式:在某些情况下,构造方法可以用于实现单例模式(Singleton Pattern),即确保一个类只有一个实例。这通常通过将构造方法设为私有,并提供一个公共的静态方法来获取类的唯一实例来实现。
3、构造方法的基本使用
名字与类名相同:构造方法的名称必须与类名相同,包括大小写。

无返回类型:构造方法没有返回类型,甚至连 void 都没有。

自动调用:当使用 new 关键字创建对象时,构造方法会自动被调用,并且再对象的生命周期内只调用一次。

重载:一个类可以有多个构造方法,这些构造方法可以有不同的参数列表,称为构造方法的重载

当我们没有写任何构造方法时,Java会帮我们提供一个默认的不带参数的构造方法,但是,一旦有了其它的构造方法,Java就不会再给我们提供不带参数的构造方法了



被折叠的 条评论
为什么被折叠?



