第四章_Java中面向对象思想详解

第四章_Java中面向对象思想详解

1.面向对象

1.1什么是面向对象

​ java是一个面向对象的高级编程语言,面向对象就是把现实存在的事物对象化,包括其行为和属性。面向对象编程更贴近实际生活的思想。面向对象的底层还是面向过程,面向过程抽象为类,然后封装,方便使用就是面向对象。

​ 简单来说,我们调用类和方法实现某种业务功能就是面向对象。

1.2什么是面向过程

​ 面向过程简单来说就是自己一步一步的写代码来实现某种业务功能。

1.3面向对象的三大特征

​ 封装,继承,多态

2.类

2.1类的组成

​ 成员变量(属性):描述事物的特征

​ 如:人类(姓名,年龄,性别,身高,体重)

​ 成员方法(行为):描述事务的行为

​ 如:人类(吃饭,睡觉)

2.2对象

​ 客观存在的事物皆为对象,所以说万物皆对象

​ 对象是真实存在的实例。 对象 == 实例

2.3类和对象的关系

​ 类是对事物的一种描述,对象则是具体存在的事物

如:桌子是类还是对象?

​ 答:是类

​ 张三老师正在办公的桌子是类还是对象?
​ 答:是对象

总结

​ 类:是描述生活中一类具有共同属性和行为的事物的抽象。

​ 对象:是具体存在的能够看得见摸的着的事物。

简单理解:类是对事物的一种描述,对象则为具体存在的事物

在Java中,必须先定义类,才能得到对象,有了类和对象就可以描述世界上的所有事物,软件就可以解决许多业务场景。

3.类的定义和组成部分

​ 类的组成是由属性和行为两部分组成的

  • 属性:在类中通过成员变量来体现(类中方法外的变量)
  • 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
3.1类的定义

格式:

修饰符 class 类名{

​ 1.成员变量(member)

​ 2.成员方法(method)

​ 3.构造方法(constructor)

}

3.2类定义的要求

1.类名首字母建议大写,满足驼峰模式,不能用关键字,必须是合法字符

2.一个Java文件中可以定义多个类,但是只能有一个类是用public修饰的,而且public修饰的类名,必须和java文件的文件名一致,否则就会编译错误。

3.一个java文件中建议只定义一个类

定义一个Person类,描述人的姓名,年龄,身高,体重,唱歌,跳舞

其中成员变量为:姓名,年龄,身高,体重

成员方法为:唱歌,跳舞

成员变量一般不需要在定义类的时候给初始化值

代码演示:

public class Person {
    //成员变量
    String name;
    int age;
    double height;
    double weight;
    //成员方法
    public void sing(){
        System.out.println("我会唱歌");
    }
    public void dance(){
        System.out.println("我会跳舞");
    }
}

4.对象的创建和对象的使用了解

4.1对象的创建

​ 格式:

​ 类名 对象名称 = new 类名();

4.2成员调用

成员变量的调用

​ 格式: 对象名.成员变量;

成员方法的调用

​ 格式: 对象名.成员方法();

4.3成员变量的默认值

动态初始化的默认值:

所有数值类型的默认值都是0

类型 初始化默认值值
byte/short/int/long 0
float/double 0.0
boolean false
char 0(char本身就是整数值)
引用类型 null

代码演示:

public class Test {
    public static void main(String[] args) {
        //创建对象的格式:
        Person p = new Person();
        //调用成员变量的格式
        int age = p.age;
        System.out.println(age);//0  成员变量在定义时都会有初始化默认值
        //调用成员方法的格式
        p.sing();//我会唱歌
    }
}

执行效果:在这里插入图片描述

总结:

成员变量(属性):定义在类中方法外 (堆内存)对象存在就存在,对象消失就消失。

局部变量:方法中,随着方法的结束而结束。

成员变量有默认值(一般不给初始值),局部变量没有默认值(必须赋值才能使用)。

5.对象的内存

5.1单个对象内存图

第四章_Java中面向对象思想详解_第1张图片

5.2多个对象内存图

第四章_Java中面向对象思想详解_第2张图片

总结:

​ 多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,成员方法多个对象共用的一份

5.3 多个对象指向相同内存图

第四章_Java中面向对象思想详解_第3张图片

图解:

Student s1 = new Student();
Student s2 = s1;
指向的是同一个地址
多个对象同用相同的成员方法

若其中一个对象对数据进行了改变,
另一方看到的数据也会改变

若s1 = null 把s1对象设置为null。s1会报空指针异常,会切断s1与堆内存对象的连接。实际上并没有对堆内存中的属性进行操作。
对s2不会产生影响。s2还可以看到存储的数据。

总结 :

​ 当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)

​ 只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。

6.成员变量和局部变量的区别

  • 类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上)
  • 内存中位置不同:成员变量(堆内存)局部变量(栈内存)
  • 生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,随着方法的调用完毕而消失)
  • 初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)

7.构造方法

7.1 什么是构造方法

​ 构造器是标准类的组成部分,用于给对象的数据(属性)进行初始化

7.2 构造方法的格式

​ 修饰符 类名 (形参列表){

​ }

格式解析与注意事项:

修饰符:目前阶段都用public

类名:构造器的名称必须是当前的类名,大小写也必须一致,否则报错

形参列表:与普通方法一样

注意:不能申明返回值类型,默认返回对象的地址引用(不能由retrun带回结果数据)

7.3 构造方法的执行时机

创建对象的时候调用,每创建一次对象,就会执行一次构造方法

不能手动调用构造方法

代码演示

class Student {
    private String name;
    private int age;

    //构造方法
    public Student() {//无参构造
        System.out.println("无参构造方法创建对象");
    }

    public Student(String name, int age) {//有参构造
        this.name = name;
        this.age = age;
        System.out.println("有参构造方法创建对象");
    }
    
	public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
public class Test_Student {
    public static void main(String[] args) {
        //无参构造创建对象
        Student student1 = new Student();
        System.out.println(student1.getName()+"..."+student1.getAge());

        System.out.println("--------------------------------");

        //有参构造创建对象
        Student student2 = new Student("鸡哥", 18);
        System.out.println(student2.getName()+"..."+student2.getAge());
    }
}

执行效果:

第四章_Java中面向对象思想详解_第4张图片

7.4 构造方法的注意事项

​ 1.随便写一个类,都会默认自带一个无参数构造方法

​ 2.如果自己又写了一个有参数构造方法,那么默认的无参数构造方法就会消失,

​ 需要自己再写一个无参数构造方法

推荐的使用方式 :

​ 无论是否使用,都手动书写无参数构造方法,和带参数构造方法

标准类的书写代码演示:

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public class Test_Student {
    public static void main(String[] args) {
        //无参构造创建对象
        Student student1 = new Student();
        student1.setName("无E凡");
        student1.setAge(20);
        System.out.println(student1.getName()+"..."+student1.getAge());

        System.out.println("--------------------------------");

        //有参构造创建对象
        Student student2 = new Student("鸡哥", 18);
        System.out.println(student2.getName()+"..."+student2.getAge());
    }
}

执行效果:

第四章_Java中面向对象思想详解_第5张图片

你可能感兴趣的:(面向对象)