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 快速创建构造器

类的内存分析

image-20200510145204489

小结

  1. 类与对象

    类是一个模板:抽象

    对象是一个具体的实例

  2. 方法的定义和调用!

  3. 对象的引用

    引用类型--基本类型(8)

    对象都是通过引用来操作的:栈-->堆

  4. 属性:字段Field 成员变量

    默认初始化

    修饰符 属性类型 属性名 = 属性值;

  5. 对象的创建和使用

    • 必须使用new关键字创建对象,构造器

      Person person = new Person();

    • 对象的属性 person.name

    • 对象的方法 person.sleep()

  6. 类:

    • 静态的属性-->属性
    • 动态的行为-->方法
posted @ 2020-05-13 15:34  小橘子ღ  阅读(255)  评论(0编辑  收藏  举报