安卓基础(get和set)

在 Java 中,​get 和 set​ 方法是面向对象编程中 ​​封装(Encapsulation)​​ 的核心实现,用于安全地访问和修改类的私有字段(private 成员变量)。它们的核心作用是 ​​控制对数据的访问,并确保数据完整性​​。

1. 为什么需要 get 和 set?​

  • ​直接访问字段的问题​​:

    public class Person {
        public String name; // 直接暴露字段
    }
    
    // 外部可直接修改字段,可能导致非法值
    Person p = new Person();
    p.name = ""; // 名字被设为空字符串(无效值)
  • ​封装后的安全访问​​:

    public class Person {
        private String name; // 私有字段,外部无法直接访问
    
        // 通过 set 方法控制赋值
        public void setName(String name) {
            if (name != null && !name.isEmpty()) {
                this.name = name; // 只有合法值才允许设置
            }
        }
    
        // 通过 get 方法提供安全读取
        public String getName() {
            return name;
        }
    }

​2. get 方法(Getter)​

  • ​作用​​:获取私有字段的值。
  • ​命名规则​​:get + 字段名(首字母大写)
  • ​示例​​:
    public class Person {
        private int age;
    
        // Getter 方法
        public int getAge() {
            return age;
        }
    }

​3. set 方法(Setter)​

  • ​作用​​:设置私有字段的值,通常包含数据校验逻辑。
  • ​命名规则​​:set + 字段名(首字母大写)
  • ​示例​​:
    public class Person {
        private int age;
    
        // Setter 方法(带校验)
        public void setAge(int age) {
            if (age >= 0 && age <= 150) { // 校验年龄合法性
                this.age = age;
            } else {
                System.out.println("年龄无效");
            }
        }
    }

​4. 实际使用场景​

​(1) 数据验证​
public class BankAccount {
    private double balance;

    public void setBalance(double amount) {
        if (amount >= 0) { // 禁止设置负数余额
            this.balance = amount;
        }
    }

    public double getBalance() {
        return balance;
    }
}
​(2) 延迟加载(Lazy Initialization)​
public class DataCache {
    private List<String> cache;

    public List<String> getCache() {
        if (cache == null) { // 首次访问时初始化
            cache = loadDataFromDatabase();
        }
        return cache;
    }
}
​(3) 隐藏实现细节​
public class Temperature {
    private double celsius;

    // 对外暴露华氏度接口,隐藏内部摄氏度存储
    public double getFahrenheit() {
        return celsius * 1.8 + 32;
    }

    public void setFahrenheit(double fahrenheit) {
        this.celsius = (fahrenheit - 32) / 1.8;
    }
}
  • ​没有 get/set​:代码会变得脆弱、不可控,容易引发隐蔽的 Bug。


123

public static Component createPathComponent(long pathId) {
    Component component = new Component();     // 1️⃣ 创建空对象(id=0, type=null, componentId=0)
    component.setType(ComponentType.PATH);    // 2️⃣ 设置 type = PATH
    component.setComponentId(pathId);         // 3️⃣ 设置 componentId = pathId
    return component;                         // 3️⃣ 返回对象(id=0, type=PATH, componentId=1001)
}

使用示例​

// 创建路径组件(关联路径ID=1001)
Component pathComponent = Component.createPathComponent(1001);

// 打印组件信息
System.out.println("类型: " + pathComponent.getType());      // 输出: PATH
System.out.println("组件ID: " + pathComponent.getComponentId()); // 输出: 1001
System.out.println("内部ID: " + pathComponent.getId());       // 输出: 0(需后续设置)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aaiier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值