Day8 面向对象编程(1)

一、面向过程&面向对象

  • 面向过程思想:

    • 步骤清晰简单,第一步做什么,第二步做什么……
    • 面向过程适合处理一些较为简单的问题。
  • 面向对象思想:

    • 物以类聚,分类思维模式。思考解决问题时首先需要哪些分类,然后对这些分类进行单独思考,最后才对某个分类下的细节进行面向过程的思索。
    • 面向对象适合处理复杂的问题,适合处理需要多人协作的问题。
  • 宏观上:面向对象,整体把握;微观上:面向过程,细节处理。

  • 面向对象编程的本质:以类的方式组织代码,以对象的组织(封装)数据。

二、回顾方法的定义

package base.com.object.Demo;

import java.io.IOException;

public class Demo01 {
    
    // main 方法
    public static void main(String[] args) {
        
    }

    /*
     * 修饰符  返回值类型  方法名(...){
     * // 方法体
     * return 返回值;
     * }
     */
    public String sayHello(){
        return "hello, world!";

    }

    public int max(int a, int b){
        return a>b ? a:b;
    }

    // return 返回值与定义的类型相同。结束方法,返回一个结果!
    // break 结束当前循环


    // 数组下标越界:Arrayindexoutofbounds
    public void readFile(String file) throws IOException{
        
    }
}

三、回顾方法的调用

  • 静态方法,同一包下可以直接调用该方法
  • 非静态方法,需要实例化这个类才能被调用
package base.com.object.Demo;

public class Demo02 {
    public static void main(String[] args) {
        // 实例化这个类 new
        // 对象类型 对象名 = 对象值;

        Student student = new Student();
        student.say();

    }
}
package base.com.object.Demo;

public class Student {

    // 非静态方法
    public void say() {
        System.out.println("学生说话了");
    }
}

四、类与对象的关系

  • 类是一种抽象的数据类型,对某一类事物整体的描述/定义,但不能代表某一具体事务

    • 动物、植物、手机……
    • Person类、Pet类、Car类等,用来描述/定义某一类具体的事物应该
  • 对象是抽象概念的具体实例

    • 张三就是人的一个具体实例,张三家的旺财就是狗的一个具体实例。
    • 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念。
package base.com.object.Demo;

public class Student {

    // 属性:字段
    String name; // null
    int age; // 0

    // 方法
    public void study() {
        System.out.println(this.name + "在学习");
    }
}
/*
 * // 类: 抽象的,实例化
 * // 类实例化后会返回一个自己的对象!
 * // student 对象就是Student类的具体实例
 * // 在main函数中进行实例化
 * Student xiaoming = new Student();
 * Student xiaohong = new Student();
 * 
 * xiaoming.name = "小明";
 * xiaoming.age = 3;
 * 
 * xiaohong.name = "小红";
 * xiaohong.age = 4;
 * 
 * System.out.println(xiaoming.name + "今年" + xiaoming.age + "岁");
 * System.out.println(xiaohong.name + "今年" + xiaohong.age + "岁");
 * 
 */

五、创建与初始化对象

  • 使用new关键字创建对象
  • 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化,以及对类中构造器的调用。
  • 类中的构造器也称为构造方法,实在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
    • 必须和类的名字相同
    • 必须没有返回类型,也不能写void
package base.com.object.Demo;

//一个项目应该只存在一个main方法
public class Application {
    public static void main(String[] args) {

        // 实例化了一个对象 有参构造时必须传入参数
        Person person = new Person("xxx");

        System.out.println(person.name); // null

    }
}
package base.com.object.Demo;

public class Person {
    // 一个类即使什么都不写,也会存在一个方法

    // 显式的定义构造器

    String name;

    // 无参构造器
    // 实例化初始值
    // 1. 使用new关键字,必须要有构造器,本质实在调用构造器
    // 2. 构造器用来初始化值
    public Person() {
        this.name = "张三";
    }

    // 有参构造: 一旦定义了有参构造,无参就必须显示定义
    // 重载类
    public Person(String name) {
        this.name = name;
    }


}
  • 构造器:
    • 和类名相同
    • 没有返回值
  • 作用:
    • new的本质在调用构造器
    • 初始化对象的值
  • 注意点:
    • 定义有参构造之后,如果想使用无参构造,显式定义一个无参的构造
  • this. 表示当前类

六、创建对象内存分析

在这里插入图片描述

小结:

  • 类与对象

    • 类是一个模板,对象是一个具体的实例。
  • 方法

    • 定义、调用
  • 对应的引用

    • 引用类型: 基本类型(8)

    • 对象是通过引用来操作的:栈—》堆

  • 属性: 字段Field 成员变量

    • 默认初始化:
      • 数字: 0 0.00
      • char: u0000
      • boolean: false
      • 引用: null
  • 对象的创建和使用:

    • 必须使用new 关键字创造对象,构造器 Person xxx = new Person();
    • 对象的属性 xxx.name
    • 对象的方法 xxx.sleep();
  • 类:

    • 静态的属性 属性

      动态的行为 方法

      • 数字: 0 0.00
      • char: u0000
      • boolean: false
      • 引用: null
  • 对象的创建和使用:

    • 必须使用new 关键字创造对象,构造器 Person xxx = new Person();
    • 对象的属性 xxx.name
    • 对象的方法 xxx.sleep();
  • 类:

    • 静态的属性 属性

      动态的行为 方法

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐