07-面向对象编程基础

1. 面向对象编程

1.1. 好处

更符合人的思维习惯,编程更直观。

1.2. 对象和类

1.2.1. 是什么

类是对象的模板。对象是类的实例。

//类的定义
public class 类名 {
	//1.成员变量 描述类/对象 可以处理的数据
	修饰符 数据类型 变量名;
	
	//2.构造器
	
	//3.成员方法 面熟类/对象 的功能
	修饰符 返回值类型 方法名(参数列表){
		//方法体
		////局部变量:方法内定义的变量,没默认值,需要赋初始值()才能使用。
		数据类型 变量名 = 初始值;
	}
}
package com.juna;  
  
public class Demo {  
    public static void main(String[] args) {  
        student s = new student(90);  
        boolean pass = s.pass(80);  
        System.out.println("pass = " + pass);  
    }  
}  
class student {  
    private double score;  
    public student() {}  
    public student(double score) {  
        this.score = score;  
    }  
    public boolean pass(double score) {  
        double diff;  
        diff = this.score - score;  
        System.out.println("diff = " + diff);  
        return this.score >= score;  
    }  
}

assets/01-入门/07-面向对象编程基础/IMG-20250513-083218-724.png

1.2.2. 类中有哪些部分构成

Important

final 表示不能不修改,只能赋值一次

static 上下文(static 方法)不能用访问 static 字段/方法。static 代码块可以。
简单理解为:

静态的成员(静态方法、静态内部类)不能访问非静态的成员(非静变量、放态方法)。
类的访问对象的不可以,对象访问类的,可以。

static

静态内部类

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

区别 成员变量 局部变量
类中位置不同 类中,方法外 在方法、代码块、构造函数中定义的变量,包括参数
初始化值不同 有默认值, 不需要初始化赋值 没有默认值,使用之前必须完成赋值
内存位置不同 非静态的成员变量在堆内存 栈内存(Java 虚拟机栈(JVM Stack)栈帧(Stack Frame)中的局部变量表)
作用域不同 整个对象 在所归属的大括号中
生命周期不同 与对象共存亡 随着方法的调用而生,随着方法的运行结束而亡
Important

关于变量的默认值:记住局部变量没用默认值,其他的都有。

静态成员变量的存放位置

1.3. 思路

万物皆对象。

1.4. 对象的执行原理

例如:Student s = new Student();

1.5. 引用数据类型

一个变量保存的是对象的地址,那么这个变量是引用数据类型

1.6. this

public class Student {
	String name;
	double score;
	
	public void checkPass(double score) {
		//score 是形参的值
		//this.score 是成员变量 score 的值 
		return this.score >= score ? "pass" : "on pass";
	}
}

方法里的 this 如何拿到调用它的对象?

静态方法中为什么不能使用 this?

方法类型 是否有 this? 原因
实例方法 调用方法时有明确对象,this 指向它
静态方法 没有对象参与调用,JVM 无法传递 this

1.7. 构造器

class student {  
    private double score;  
  
    public student() {}  
  
    public student(double score) {  
        this.score = score;  
    }  
}

1.8. 封装

Java 中封装(Encapsulation)是面向对象编程(OOP)的四大基本特性之一,其核心思想是隐藏对象的内部实现细节,仅暴露必要的接口。封装提高了代码的安全性、可维护性和模块化程度。


1.8.1. 封装的定义(简洁版)

封装是将数据(成员变量)和操作数据的方法(成员方法)绑定在一起,并通过访问控制来隐藏对象的内部状态,从而保护对象的完整性和安全性。


1.8.2. 封装的实现方式(Java)

public class User {
    // 私有属性(不允许直接访问)
    private String name;
    private int age;

    // 提供公有的 Getter 和 Setter 方法供外部访问
    public String getName() {
        return name;
    }

    public void setName(String name) {
        // 可以加入校验逻辑
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age >= 0) {
            this.age = age;
        }
    }
}

1.8.3. 关键点总结

说明
私有化成员变量 使用 private 修饰字段,禁止外部直接访问
提供公有访问方法 使用 public 的 getter/setter 控制访问
可添加校验逻辑 在 setter 中添加校验,提高安全性
增强灵活性 若内部实现变更,外部代码无需改动

1.8.4. 封装的好处


1.9. JavaBean

是实体类,复合封装的定义,要求:

实体类的对象只负责数据存取,数据的处理交给其他类的对象完成,从而实现数据和业务处理分离。

2. Demo

模仿电影信息浏览系统

//展示所有电影信息
///根据id查电影信息

上一节:06-编程思想
下一节:08-常用-api