Java面向对象
## 面向对象OOP
什么是面向对象?
面向对象编程(Object-Oriented Programming,OOP)
本质
以类的方式组织代码,以对象的形式封装数据
以类的方式组织代码,以对象的形式封装数据
以类的方式组织代码,以对象的形式封装数据
面向过程的思想
- 步骤清晰简单,第一步做什么,第二步...
- 适合处理一些较为简单的问题
面向对象的思想
-
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。
最后,才对某个分类下的细节进行面向过程的思索。
-
适合处理复杂的问题,适合处理需要多人协作的问题
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
类和对象的关系
类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。
如:动物、植物、手机、电脑等等
对象是抽象概念的具体实例
张三就是一个具体的人,张三家的旺财就是动物的一个具体实例。
能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念。
创建对象
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字new来创建一个对象。
- 初始化:使用new创建对象时,会调用构造方法初始化对象。
public class Application {
public static void main(String[] args) {
// 类:抽象的模板 Student类
// 对象:具体的个体 小明
Student xiaoMing = new Student();
xiaoMing.name = "小明";
xiaoMing.age = 18;
xiaoMing.study();
// 实例化得到 小红 对象
Student xiaoHong = new Student();
xiaoHong.name = "小红";
xiaoHong.age = 18;
xiaoHong.study();
}
}
class Student {
// 属性:字段
String name;
int age;
// 方法
public void study(){
System.out.println(this.name+"在学习");
}
}
构造器
构造器也称构造方法,每个类都有构造方法。
构造方法的特点:
- 必须和类名相同
- 不能有返回类型,也不能写void
作用
- new 本质在调用构造方法
- 初始化对象的值
如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
下面是一个构造方法示例:
默认构造器
Application.java
public class Application {
public static void main(String[] args) {
// 类:抽象的模板 Student
// 对象:具体的个体 小明
Student xiaoMing = new Student();
}
}
class Student {}
Application.class
public class Application {
public Application() {
}
public static void main(String[] args) {
new Student();
}
}
Student.class
class Student {
Student() {
}
}
可以看到如果在java代码中没有显式定义构造方法,编译器将每个类编译成对应的class文件时,添加了一个无参构造器。
public class Application {
public static void main(String[] args) {
// 一旦自己定义了构造器,原始的默认构造器就失效了,需要自己显式定义。
// Student xiaoMing = new Student(); //报错
Student xiaoMing = new Student("xiaoMing");
System.out.println(xiaoMing.name);
}
}
class Student {
public String name;
public Student(String name) {
this.name = name;
}
}
Student.class
class Student {
public String name;
public Student(String name) {
this.name = name;
}
}
在class文件中原来的无参构造器不见了。
IDEA快捷键 Alt + Insert 快速创建构造器
类的内存分析
小结
-
类与对象
类是一个模板:抽象
对象是一个具体的实例
-
方法的定义和调用!
-
对象的引用
引用类型--基本类型(8)
对象都是通过引用来操作的:栈-->堆
-
属性:字段Field 成员变量
默认初始化
修饰符 属性类型 属性名 = 属性值;
-
对象的创建和使用
-
必须使用new关键字创建对象,构造器
Person person = new Person();
-
对象的属性 person.name
-
对象的方法 person.sleep()
-
-
类:
- 静态的属性-->属性
- 动态的行为-->方法