gpt4 book ai didi

java - 构造函数与getter和setter的区别

转载 作者:行者123 更新时间:2023-11-29 07:30:45 24 4
gpt4 key购买 nike

我一直在为大学项目做作业。有一次,当您实际上可以使用构造函数方法来实现相同的结果时,我对 getter 和 setter 的实际用途感到困惑。我搜索并找到了很多答案,但没有令人满意的解释。我有 laptop.java 如下

public class laptop {
private String model;

public laptop(String brand){
model=brand;
}

public String toString(){
return "Laptop Brand is: "+ model;
}
}

和调用构造函数的 laoptopRecords.java

public class laptopRecords {

public static void main(String[] args) {
// TODO Auto-generated method stub
laptop laptop1=new laptop("Dell");
System.out.println(laptop1);
}

}

这里我没有使用 getter 和 setter 方法,我为每个笔记本电脑对象都得到了想要的结果。

如果我以另一种方式在 laptopRecord.java 中使用 getter 和 setter 方法,如下所示,我会得到相同的结果。但是如果实际上我们也可以使用构造函数获得结果,我不知道 getter 和 setter 方法的用途是什么。

带有 getter 和 setter 的 laptop.java

public class laptop {
private String model;

public laptop(String brand){
model=brand;
}
public void setlaptop(String brand){
model=brand;
}
public String getlaptop(){
return model;
}
public String toString(){
return "Laptop Brand is: "+ model;
}
}

最佳答案

setter/getter 总是很好。如果您忘记了在创建时设置的品牌,最好有办法从该对象中取出它。如果您从其他地方获得该对象怎么办?使用 setter/getter 弄清楚品牌很容易。但是 getter 应该只对直接公开的值可用。如果不应公开,则无需为 internalVersionString 创建 getter。但是有一个 colour 的 getter 会很好......毕竟,你可以通过看笔记本电脑来看到颜色(这对于 OOP 来说是一个糟糕的类比,但恕我直言,它很适合这里)。

关于二传手...如果您只有一个属性,则确实没有太大(可见)差异。但除此之外还有更深层次的主题……可变性。当然,使用构造函数比简单地设置属性(为整个新对象获取内存与为字符串获取内存)有更大的开销。

不使用 setter 的一个很好的例子是 Java 中的 String 类。 Java String 是不可变的;一旦创建,就无法更改。如果你想替换字符或删除一些部分,你得到的不是一个改变的字符串,而是一个做了所需更改的全新字符串。但是,如果您有一个名为 TextDocument 的类,它包含整个文件的数据值(value)怎么办?如果不创建全新的 TextDocument 就无法替换其中的一部分,这可能会造成阻碍。

自动拥有 setter 意味着您的对象是可变的;这意味着,您的对象在创建时不是固定的,而是可以在以后更改。 ArrayList 就是一个很好的例子。您当然不希望只为了更改单个值而分配一个全新的列表。

当使用像 laptop 类这样的简单案例时,可变和不可变之间的区别并不那么明显。在进行并行工作时使用不可变类会派上用场,在处理需要分配大量内存的大对象时使用可变类会派上用场。

对于这个问题,没有万能的解决方案。但是对于应该可以直接更改的公开属性, setter 会很方便,而不必构造一个全新的对象。想象一个具有多个属性的类...以您的 laptop 为例,它具有品牌、尺寸、颜色等等。如果您只想更改颜色,则必须构建一台新笔记本电脑并复制所有其他属性会很乏味,不是吗?在这种情况下,二传手会让你的生活更轻松。只需调用 yourLaptop.setBrand("Dill"); 并继续使用该笔记本电脑。没有理由再花 500 美元(或者更确切地说……字节)买另一个。

关于java - 构造函数与getter和setter的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43174735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com