009-了解面向对象

一、面向对象

一、什么是面向对象

  面向对象就是将现实世界分割成不同的单元,然后每一个单元都实现成对象,然后给一个环境驱动一下,让各个对象之间协作起来形成一个系统;

二、面向对象优点

  耦合度低,扩展力强

三、面向对象实现一个软件的过程

分析( A ) –> 设计( D ) –> 编程( P )

  • OOA:面向对象分析
  • OOD:面向对象设计
  • OOP:面向对象编程

四、面向对象的特征

  • 封装
  • 继承
  • 多态

二、类与对象的概念

一、什么是类

  类实际在现实世界中是不存在的,是一个抽象的概念,类的本质是现实世界当中某些事物具有的共同特征,将这些共同特征提取出来形成的概念就是一个类,相当于一个模板;

  比如说我们定义一个学生的类,此时该类就相当于一个模板,我们就可以通过该类创造出一个个具体的学生对象出来。

  1. 类的组成:类 = 属性 + 方法

  2. 类的定义方式
     [修饰符列表] class 类名 {
       //类体 = 属性 + 方法
       // 属性在代码上以“变量”的形式存在(描述状态)
       // 方法描述动作/行为
     }
     注意:
      修饰符列表可以省略。
      属性对应的是“数据”,数据在程序中只能放到变量中也就是说:属性其实就是变量。

// 定义一个学生类
public class Student {
   
   //定义类的属性,也就是学生的共同具有的属性
    private int age;  //年龄
    private String name;    //学生姓名
   
   //定义类方法,也就是描述学生所具有的共同行为
    public void eat() {
        System.out.println("学生吃饭");
    }
}

二、什么是对象

  1. 对象:对象就是实际存在的个体

  2. 对象的创建
    类名 变量名 = new 类名();

// 通过刚刚在上面定义的学生类,我们就可以new出一个学生对象了。

import com.domain.User;//如果学生类和该类不在同一个文件中,记得导入学生类所在的包
public class TestStudent {
   
    public static void main(String[] args) {
        Student stu = new Student();
    }
}  

三、类与对象的关系

  在Java语言中,想要得要“对象”,就必须先定义“类”,“对象”是通过“类”这个模板创造出来的;

  • 类:不存在的,人类总结出来的一个模板(这个模板描述的共同特征);
  • 对象:实际存在的个体;
  • 实例:对象的另外一个名字;
  • 实例化:通过类这个模板创建对象的过程;
  • 抽象:多个对象具有共同特征,进行思考总结抽取共同特征的过程;
    • 类 –【实例化】–> 对象(实例)
    • 对象 –【抽象】–> 类

四、创建对象是JVM的变化

  1. 实例:Student stu = new Student();

  2. 凡是通过 new 运算符创建出来的对象,都是存储在堆内存中,new 运算符的作用就是在堆内存中开辟一块空间,来存储即将创建的对象,如下图:
    在这里插入图片描述

  3. 接下里再通过 = 号将创建出来的对象的对象地址 0x1234 赋给 stu ;

  4. 接下来我们就可以通过 stu 来操作刚刚创建的对象中的属性,方法了;

  5. 注意事项
      * 在创建对象之后,都会在无手动赋值的前提下,都会默认给对象的属性赋初值,赋值的结果有属性的数据类型决定;
      * 每执行一个 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的访问权限控制符和包导入机制.