公告

👇 QQ 👇 --- 👇 赞赏 👇


Skip to content

Java | 面向对象

更新: 7/22/2025 字数: 0 字 时长: 0 分钟


Java | 面向对象

面向对象概述

软件开发方法:面向过程面向对象

  1. 面向过程:关注点实现功能的步骤上
  • PO:Procedure Oriented。代表语言:C语言

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

  • 例如开汽车:启动、踩离合、挂挡、松离合、踩油门、车走了

  • 再例如装修房子:做水电、刷墙、贴地砖、做柜子和家具、入住

  • 对于简单的流程是适合使用面向过程的方式进行的。复杂的流程不适合使用面向过程的开发方式

  1. 面向对象:关注点实现功能需要哪些对象的参与
  • OO:Object Oriented 面向对象。包括OOA,OOD,OOP。OOA:Object Oriented Analysis 面向对象分析OOD:Object Oriented Design 面向对象设计OOP:Object Oriented Programming 面向对象编程。代表语言:Java、C#、Python等。

  • 人类是以面向对象的方式去认知世界的。所以采用面向对象的思想更加容易处理复杂的问题

  • 面向对象就是分析出解决这个问题都需要哪些对象的参加,然后让对象与对象之间协作起来形成一个系统。

  • 例如开汽车:汽车对象、司机对象。司机对象有一个驾驶的行为。司机对象驾驶汽车对象

  • 再例如装修房子:水电工对象,油漆工对象,瓦工对象,木工对象。每个对象都有自己的行为动作。最终完成装修。

  • 面向对象开发方式耦合度低,扩展能力强。例如采用面向过程生产一台电脑,不会分CPU、内存和硬盘,它会按照电脑的工作流程一次成型。采用面向对象生产一台电脑,CPU是一个对象内存条是一个对象硬盘是一个对象,如果觉得硬盘容量小后期是很容易更换的,这就是扩展性

面向对象概念

面向对象三大特征:封装、继承、多态

  • 封装(Encapsulation)
  • 继承(Inheritance)
  • 多态(Polymorphism)

类与对象

  • 现实世界中,事物与事物之间具有共同特征,例如:刘德华和梁朝伟都有姓名、身份证号、身高状态,都有吃、跑、跳行为。将这些共同的状态和行为提取出来,形成了一个模板,称为类

  • 类实际上是人类大脑思考总结的一个模板是一个抽象的概念

  • 状态在程序中对应属性属性通常用变量来表示

  • 行为在程序中对应方法方法通常用函数来表示

  • 类 = 属性 + 方法。

对象

  • 实际存在个体

  • 对象又称为实例(instance)

  • 通过类这个模板可以实例化n个对象。(通过类可以创造多个对象

  • 例如通过“明星类”可以创造出“刘德华对象”和“梁朝伟对象”

  • 明星类中有一个属性姓名String name;

  • “刘德华对象”和“梁朝伟对象”由于是通过明星类造出来的,所以这两个都有name属性,但是值是不同的。因此这种属性被称为实例变量

类与对象的关系

对象的创建和使用

更新: 7/22/2025 字数: 0 字 时长: 0 分钟

类的定义

语法格式:

Java
java
[修饰符列表] class 类名 {
    // 属性(描述状态)
    // 方法(描述行为动作)
}

例如:学生类

Java
java
package com.powernode.javase.oop01;
/*
1.定义类的语法格式:
     [修饰符列表] class 类名{
          类体 = 属性 + 方法

     //属性(实例变量),描述的是状态

     //方法,描述的是行为动作

     }

2.为什么定义类?
   因为要通过类实例化对象,有了对象,让对象和对象之间协作起来形成系统

3.一个类可以实例化多个java对象,(通过一个类可以造出多个java对象)

4. 实例变量是一个对象一份,比如创建3个学生对象,每个学生对象中应该都有name变量。

5. 实例变量属于成员变量,成员变量如果没有手动赋值,系统会赋默认值
    数据类型        默认值
    ----------------------
    byte            0
    short           0
    int             0
    long            0L
    float           0.0F
    double          0.0
    boolean         false
    char            \u0000
    引用数据类型      null
 */
public class Student {

    //属性:姓名,年龄,性别,它们都是实例变量

    //姓名
    String name;

    //年龄
    int age;

    //性别
    boolean gender;
}

对象的创建和使用

语法格式:

Java
java
类名 对象名 = new 类名();

对象的创建:

Java
java
Student s = new Student();

在Java中,使用class定义的类,属于引用数据类型。所以Student属于引用数据类型。类型名为:Student。

Student s; 表示定义一个变量。数据类型是Student。变量名是s

对象的使用:

Java
java
读取属性值:s.name
修改属性值:s.name = “jackson”;

通过一个类可以实例化多个对象:

Java
java
Student s1 = new Student();
Student s2 = new Student();

例如:创建一个学生对象

Java
java
package com.powernode.javase.oop01;

public class StudentTest01 {
    public static void main(String[] args) {
        // 局部变量
        int i = 10;

        // 通过学生类Student实例化学生对象(通过类创造对象)
        // Student s1; 是什么?s1是变量名。Student是一种数据类型名。属于引用数据类型。
        // s1也是局部变量。和i一样。
        // s1变量中保存的是:堆内存中Student对象的内存地址。
        // s1有一个特殊的称呼:引用
        // 什么是引用?引用的本质上是一个变量,这个变量中保存了java对象的内存地址。
        // 引用和对象要区分开。对象在JVM堆当中。引用是保存对象地址的变量。
        Student s1 = new Student();

        // 访问对象的属性(读变量的值)
        // 访问实例变量的语法:引用.变量名
        // 两种访问方式:第一种读取,第二种修改。
        // 读取:引用.变量名 s1.name; s1.age; s1.gender;
        // 修改:引用.变量名 = 值; s1.name = "jack"; s1.age = 20; s1.gender = true;
        System.out.println("姓名:" + s1.name); // null
        System.out.println("年龄:" + s1.age); // 0
        System.out.println("性别:" + (s1.gender ? "男" : "女"));

        // 修改对象的属性(修改变量的值,给变量重新赋值)
        s1.name = "张三";
        s1.age = 20;
        s1.gender = true;

        System.out.println("姓名:" + s1.name); // 张三
        System.out.println("年龄:" + s1.age); // 20
        System.out.println("性别:" + (s1.gender ? "男" : "女")); // 男

        // 再创建一个新对象
        Student s2 = new Student();

        // 访问对象的属性
        System.out.println("姓名=" + s2.name); // null
        System.out.println("年龄=" + s2.age); // 0
        System.out.println("性别=" + (s2.gender ? "男" : "女"));

        // 修改对象的属性
        s2.name = "李四";
        s2.age = 20;
        s2.gender = false;

        System.out.println("姓名=" + s2.name); // 李四
        System.out.println("年龄=" + s2.age); // 20
        System.out.println("性别=" + (s2.gender ? "男" : "女")); // 女
    }
}

JVM内存分析

JVM内存分析

  • 堆内存:存储new出来的对象。堆内存中的对象是有生命周期的。堆内存中的对象不使用时,由GC回收

  • 栈内存:存储局部变量。栈内存中的局部变量使用完毕,立即出栈,空间被释放。

  • 方法区:存储类信息。方法区中的类信息不会被回收。


封装

更新: 7/22/2025 字数: 0 字 时长: 0 分钟

面向对象三大特征之一:封装

  1. 现实世界中封装:

液晶电视也是一种封装好的电视设备,它将电视所需的各项零部件封装在一个整体外壳中,提供给用户一个简单而便利的使用接口,让用户可以轻松地切换频道、调节音量、等。液晶电视内部包含了很多复杂的技术,如显示屏、LED背光模块、电路板、扬声器等等,而这些内部结构对于大多数普通用户来说是不可见的,用户只需要通过遥控器就可以完成电视的各种设置和操作,这就是封装的好处。液晶电视的封装不仅提高了用户的便利程度和使用效率,而且还起到了保护设备内部部件的作用,防止灰尘、脏物等干扰。同时,液晶电视外壳材料的选择也能起到防火、防潮、防电等效果,为用户的生活带来更安全的保障。

  1. 什么是封装?

封装是一种将数据和方法加以包装,使之成为一个独立的实体,并且把它与外部对象隔离开来的机制。具体来说,封装是将一个对象的所有“状态(属性)”以及“行为(方法)”统一封装到一个类中,从而隐藏了对象内部的具体实现细节,向外界提供了有限的访问接口,以实现对对象的保护和隔离。

  1. 封装的好处?

封装通过限制外部对对象内部的直接访问和修改,保证了数据的安全性,并提高了代码的可维护性和可复用性。

  1. 在代码上如何实现封装?

属性私有化,对外提供getter和setter方法。

封装概述

  • 封装是面向对象三大特性之一。

  • 封装就是把对象的属性方法结合成一个独立的体,对外隐藏内部实现细节。

  • 封装的好处:隐藏实现细节提高安全性和易用性

  • 封装的体现:方法就是一种封装。也是一种封装。

封装的实现方式

  • 将属性私有化(private),提供公共的(public)方法访问私有属性。

  • 例如:学生类

Java
java
package com.powernode.javase.oop02;

public class Student {
    // 属性:姓名,年龄,性别,它们都是实例变量
    // 姓名
    private String name;
    // 年龄
    private int age;
    // 性别
    private char gender;// true表示男,false表示女


    public void setName(String name) { // 设置姓名

        this.name = name;
    }

    public String getName() { // 获取姓名
        return name;
    }

    public void setAge(int age) { // 设置年龄
        this.age = age;
    }

    public int getAge() { // 获取年龄
        return age;
    }

    public void setGender(char gender) { // 设置性别
        this.gender = gender;
    }

    public char getGender() { // 获取性别
        return gender;
    }
    public void show() { // 显示信息
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
        System.out.println("性别:" + (gender ? "男" : "女"));
    }
}

封装的使用

Java
java
package com.powernode.javase.oop02;

public class StudentTest02 {
    public static void main(String[] args) {
        // 创建学生对象
        Student s = new Student();

        // 读取属性值
        // System.out.println("姓名:" + s.name); // 编译错误。name是私有的,不能直接访问。
        // System.out.println("年龄:" + s.age); // 编译错误。age是私有的,不能直接访问。
        // System.out.println("性别:" + s.gender); // 编译错误。gender是私有的,不能直接访问。

        // 修改属性值   
        s.setName("张三");
        s.setAge(20);
        s.setGender(true);

        // 读取属性值
        System.out.println("姓名:" + s.getName()); // 张三
        System.out.println("年龄:" + s.getAge()); // 20
        System.out.println("性别:" + (s.getGender() ? "男" : "女")); // 男


        // 调用方法
        s.show();
    }
}

贡献者

The avatar of contributor named as XingJi-love XingJi-love

页面历史