学习Java22天

面向对象(Object-Oriented)

核心思想

  • 对象为中心:将现实世界的事物抽象为对象

  • 三大特征:封装、继承、多态

  • 编程范式:以对象为基本单位组织代码

类和对象

类(Class)

  • 定义:具有相同属性和行为的对象的抽象描述

  • 作用:对象的蓝图或模板

  • 特点:描述"是什么",而不是具体实例

对象(Object)

  • 定义:类的具体实例

  • 特点:真实存在的具体个体

  • 关系:基于类创建的具体实体

类和对象的关系

  • 类 → 对象:类是创建对象的模板

  • 对象 → 类:对象是类的具体实现

  • 一对多:一个类可以创建多个对象

类的定义

基本结构

java

复制代码
public class 类名 {
    // 1. 成员变量(属性)
    // 2. 成员方法(行为)
    // 3. 构造方法
    // 4. 代码块
    // 5. 内部类
}

类名规范

  • 首字母大写:遵循驼峰命名法

  • 见名知意:体现类的功能或属性

  • 名词形式:通常使用名词

一个Java文件的规则

  1. 可以定义多个class

  2. 只能有一个public修饰的class

  3. public类的类名必须与文件名相同

对象的创建与使用

创建对象

java

复制代码
类名 对象名 = new 类名();
  • new:在堆内存中分配空间

  • 类名():调用构造方法初始化对象

使用对象

java

复制代码
// 访问属性
对象名.成员变量;

// 调用方法
对象名.方法名(参数);

JavaBean类

特点

  1. 专用描述类:仅用于描述一类事物

  2. 无main方法:不包含程序入口

  3. 标准结构:私有属性 + 公共getter/setter

示例

java

复制代码
// JavaBean类 - 描述学生
public class Student {
    // 私有属性
    private String name;
    private int age;
    
    // 公共构造方法
    public Student() {}
    
    // 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) {
        this.age = age;
    }
}

测试类

特点

  1. 包含main方法:程序入口

  2. 用于测试:创建并测试其他类的对象

  3. 分离关注点:业务逻辑和测试逻辑分离

示例

java

复制代码
// 测试类
public class Test {
    public static void main(String[] args) {
        // 创建JavaBean对象
        Student stu = new Student();
        
        // 设置属性
        stu.setName("张三");
        stu.setAge(20);
        
        // 获取并显示属性
        System.out.println("姓名:" + stu.getName());
        System.out.println("年龄:" + stu.getAge());
    }
}

封装(Encapsulation)

封装的概念

  • 数据保护:隐藏对象的内部实现细节

  • 接口暴露:只提供必要的访问方式

  • 安全控制:防止外部随意修改内部数据

Private关键字

作用
  1. 访问限制:仅允许本类内部访问

  2. 数据保护:防止外部直接修改

  3. 强制规范:要求通过特定方法操作

使用示例

java

复制代码
public class Person {
    // 私有成员变量
    private String name;
    private int age;
    private double salary;
    
    // 公共构造方法
    public Person() {}
    
    // Getter方法 - 获取值
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
    
    // Setter方法 - 设置值(可添加验证)
    public void setName(String name) {
        if (name != null && !name.trim().isEmpty()) {
            this.name = name;
        }
    }
    
    public void setAge(int age) {
        if (age >= 0 && age <= 150) {
            this.age = age;
        }
    }
}

封装的优势

1. 提高安全性

  • 防止非法数据赋值

  • 控制访问权限

  • 隐藏实现细节

2. 提高灵活性

  • 内部实现可随时修改

  • 不影响外部调用

  • 便于维护和升级

3. 提高可维护性

  • 代码结构清晰

  • 职责分离明确

  • 易于调试和测试

4. 提高代码复用性

  • 标准化接口

  • 便于其他类使用

  • 促进代码复用

封装的最佳实践

1. 属性私有化

java

复制代码
private 数据类型 属性名;

2. 提供公共访问方法

java

复制代码
public 数据类型 get属性名() {
    return 属性名;
}

public void set属性名(数据类型 参数) {
    // 可添加验证逻辑
    this.属性名 = 参数;
}

3. 方法命名规范

  • Getter方法:get + 属性名(首字母大写)

  • Setter方法:set + 属性名(首字母大写)

  • 布尔属性:is + 属性名(首字母大写)

4. 添加数据验证

java

复制代码
public void set属性名(数据类型 值) {
    if (验证条件) {
        this.属性名 = 值;
    } else {
        // 处理错误情况
    }
}

封装的实际意义

  1. 符合现实逻辑:现实中的对象都有其内部状态

  2. 促进模块化:每个类都是独立的模块

  3. 降低耦合度:类之间依赖减少

  4. 提高开发效率:便于团队协作

    java 复制代码
    public class Phone {
        //属性
        String brand ;
        double price ;
    
        //行为
        public void call(){
            System.out.println("手机在打电话");
        }
        public void  playGame(){
            System.out.println("手机在玩游戏");
        }
    }
    java 复制代码
    public class PhoneTest {
        public static void main(String[] args) {
            //创建手机的对象
            Phone p = new Phone();
            //给手机赋值
            p.brand = "小米";
            p.price = 1999.98;
    
            //获取手机对象中的值
            System.out.println(p.brand);
            System.out.println(p.price);
    
            //调用手机中的方法
            p.call();
            p.playGame();
        }
    }
    java 复制代码
    public class GirlFriend {
        //属性
        private String name ;
        private int age ;
        private String gender ;
    
        //针对每一个私有化的成员变量,都提供get和set方法
        //set方法:给成员变量赋值
        //get方法:对外提供成员变量
    
        public void  setName(String n){
            name = n;
        }
        public String getName(){
            return  name;
        }
        public void  setAge(int a){
            if (a >= 18 && a <= 50){
                age = a;
            }else {
                System.out.println("非法参数");
            }
    
        }
        public int getAge(){
            return  age;
        }
        public void  setGender(String g){
            gender = g;
        }
        public String getGender(){
            return  gender;
        }
    
        //行为
        public void sleep(){
            System.out.println("女朋友在睡觉");
    
        }
        public  void  eat(){
            System.out.println("女朋友在吃饭");
        }
    }
    java 复制代码
    public class GirlFriendText {
        public static void main(String[] args) {
            GirlFriend g = new GirlFriend();
            g.setName ("刘亦菲");
            g.setAge(18);
            g.setGender("女");
    
            System.out.println(g.getName());
            System.out.println(g.getAge());
            System.out.println(g.getGender());
    
            g.sleep();
            g.eat();
    
        }
    }
相关推荐
电子_咸鱼1 小时前
【QT SDK 下载安装步骤详解 + QT Creator 导航栏使用教程】
服务器·开发语言·网络·windows·vscode·qt·visual studio code
西岭千秋雪_1 小时前
MySQL日志梳理(存储引擎层)
java·数据库·分布式·mysql·oracle
AAA阿giao1 小时前
深入理解 JavaScript 中的面向对象编程(OOP):从构造函数到原型继承
开发语言·前端·javascript·原型·继承·原型模式·原型链
jllllyuz1 小时前
MATLAB雷达系统设计与仿真
开发语言·matlab
IMPYLH1 小时前
Lua 的 type 函数
开发语言·笔记·后端·junit·lua
老华带你飞1 小时前
英语学习|基于Java英语学习系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端·学习
qq_479875431 小时前
C++ 模板元编程
java·开发语言·c++
codingPower2 小时前
Java EasyExcel创建复杂表格的完整指南:WriteTable
java·开发语言
爱装代码的小瓶子2 小时前
【cpp知识铺子】map与set的底层AVL树
开发语言·数据结构·c++·b树·算法·链表