009-了解面向对象
一、面向对象
一、什么是面向对象
面向对象就是将现实世界分割成不同的单元,然后每一个单元都实现成对象,然后给一个环境驱动一下,让各个对象之间协作起来形成一个系统;
二、面向对象优点
耦合度低,扩展力强
三、面向对象实现一个软件的过程
分析( A ) --> 设计( D ) --> 编程( P )
- OOA:面向对象分析
- OOD:面向对象设计
- OOP:面向对象编程
四、面向对象的特征
- 封装
- 继承
- 多态
二、类与对象的概念
一、什么是类
类实际在现实世界中是不存在的,是一个抽象的概念,类的本质是现实世界当中某些事物具有的共同特征,将这些共同特征提取出来形成的概念就是一个类,相当于一个模板;
比如说我们定义一个学生的类,此时该类就相当于一个模板,我们就可以通过该类创造出一个个具体的学生对象出来。
-
类的组成:类 = 属性 + 方法
-
类的定义方式
[修饰符列表] class 类名 {
//类体 = 属性 + 方法
// 属性在代码上以“变量”的形式存在(描述状态)
// 方法描述动作/行为
}
注意:
修饰符列表可以省略。
属性对应的是“数据”,数据在程序中只能放到变量中也就是说:属性其实就是变量。
// 定义一个学生类
public class Student {
//定义类的属性,也就是学生的共同具有的属性
private int age; //年龄
private String name; //学生姓名
//定义类方法,也就是描述学生所具有的共同行为
public void eat() {
System.out.println("学生吃饭");
}
}
二、什么是对象
-
对象:对象就是实际存在的个体
-
对象的创建
类名 变量名 = new 类名();
// 通过刚刚在上面定义的学生类,我们就可以new出一个学生对象了。
import com.domain.User;//如果学生类和该类不在同一个文件中,记得导入学生类所在的包
public class TestStudent {
public static void main(String[] args) {
Student stu = new Student();
}
}
三、类与对象的关系
在Java语言中,想要得要“对象”,就必须先定义“类”,“对象”是通过“类”这个模板创造出来的;
- 类:不存在的,人类总结出来的一个模板(这个模板描述的共同特征);
- 对象:实际存在的个体;
- 实例:对象的另外一个名字;
- 实例化:通过类这个模板创建对象的过程;
- 抽象:多个对象具有共同特征,进行思考总结抽取共同特征的过程;
- 类 --【实例化】--> 对象(实例)
- 对象 --【抽象】--> 类
四、创建对象是JVM的变化
-
实例:Student stu = new Student();
-
凡是通过 new 运算符创建出来的对象,都是存储在堆内存中,new 运算符的作用就是在堆内存中开辟一块空间,来存储即将创建的对象,如下图:
-
接下里再通过 = 号将创建出来的对象的对象地址 0x1234 赋给 stu ;
-
接下来我们就可以通过 stu 来操作刚刚创建的对象中的属性,方法了;
-
注意事项
* 在创建对象之后,都会在无手动赋值的前提下,都会默认给对象的属性赋初值,赋值的结果有属性的数据类型决定;
* 每执行一个 new 运算符就会创建一个对象,每一个对象在堆内存中的地址都是不一样的;
* 像 stu 这种保存了对象内存地址的变量,有一个特殊的名字:引用;
三、构造方法
一、构造方法的作用
构造方法是一个比较特殊的方法,通过构造方法可以完成对象的创建,以及实例变量的初始化,也就是说,构造方法是用来创建对象,并且同时给对象的属性赋值,实际上我们在通过 new 来创建对象的时候,就是利用类里面的构造方法来创建的,;
注:
* 当一个类没有提供构造方法,系统会默认提供一个无参数的构造方法,这个构造方法被称为缺省构造器,这也是我们没有写构造方法还可以用 new 创建对象的原因;
* 当一个类定义了有参构造方法时,系统将不再默认提供无参构造方法,此时无参构造方法需要自定义,不然会报一下异常;
二、构造方法的语法结构
[修饰符列表] 构造方法名 (形式参数列表){
构造方法体,通常在构造方法体当中给属性赋值,完成属性的初始化。
}
注:
* 构造方法名和类名必需一致
* 构造方法不需要指定返回值类型,也不能写void,写上void就表示普通方法,就不是构造方法了;
// 定义一个学生类
public class Student {
//定义类的属性,也就是学生的共同具有的属性
private int age; //年龄
private String name; //学生姓名
public Student() {}//定义无参构造方法
public Student(int stuAge, String stuName) {//定义有参构造方法,可以给属性赋值;
age = stuAge;
name = stuName;
}
}
// 通过刚刚在上面定义的学生类,我们就可以new出一个学生对象了。
import com.domain.User;//如果学生类和该类不在同一个文件中,记得导入学生类所在的包
public class TestStudent {
public static void main(String[] args) {
Student stu1 = new Student();//通过无参构造方法创建对象;
Student stu2 = new Student(12,"小明");//通过有参构造方法创建对象,此时该学生对象的名字是小明,年龄12岁;
}
相关链接:
链接: 008-Java中方法的使用(进阶篇).
链接: 007-Java中方法的使用(基础篇).
链接: 006-Java的访问权限控制符和包导入机制.