构造函数和getter以及setter之间的区别

时间:2017-04-02 23:42:05

标签: java

我一直在为大学项目做作业。有一点,当你真正使用构造函数方法来实现相同的结果时,我对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;
    }
}

4 个答案:

答案 0 :(得分:3)

吸气者总是很好。如果你忘记了你在创作时设置的品牌,那么有一种方法可以让它从这个对象中脱颖而出。如果从其他地方获得该对象怎么办?使用吸气剂确定品牌很容易。但是吸气剂应该仅适用于直接暴露的值。如果不应公开知道,则无需为internalVersionString创建一个getter。但是对colour有一个吸气剂会很好......毕竟,你可以通过查看笔记本电脑来看到颜色(这对于OOP来说是一个不好的比喻,但它适合恕我直言)。< / p>

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

不使用setter的一个很好的例子是Java中的String类。 Java String是不可变的;一旦创建,它就无法改变。如果要替换字符或删除某些部分,您获得的不是更改的字符串,而是具有所需更改的全新字符串。但是,如果您有一个名为TextDocument的类,其中包含整个文件的数据,该怎么办?

,无法在不创建全新TextDocument的情况下替换那部分部分。

自动设置setter意味着你的对象是可变的;这意味着,您的对象在创建时不会被修复,但可以在以后更改。 ArrayList就是一个很好的例子。您当然不希望仅为更改单个值分配一个全新的列表。

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

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

答案 1 :(得分:2)

我告诉你一个简单的方法:

getters()和setters():

  • 实际上getter()和setter在POJO / Bean类中可用。
  • java类中getters()setters()的主要原因是获取Java封装机制。
  • 在POJO / Bean类中,我们将所有属性声明为 private。,这意味着这些类属性不能在其他类和包中使用,因此,我们可以实现Encapsulation。 / LI>

<强> 构造():

  • 我想你知道构造函数的定义,构造函数用于初始化给出我们自己的值而不是存储默认值的属性
  • 我们可以说另一种方式,即用于创建对象的构造函数和用于更改对象内部值的setter,getters()用户获取值,这只是主要区别。

答案 2 :(得分:0)

扩展具有私有数据成员的类时,则getters和setters方法将帮助您访问子类中的数据成员。而构造函数仅初始化数据成员。

答案 3 :(得分:0)

  1. 构造函数用于初始化对象。
  2. 当我们使用参数化构造函数传递参数时,它只调用一次。
  3. 表示只能传递一次参数。
  4. 如果每次在内存中创建一个新对象时调用它超过 1 次。
  5. 虽然可以根据您的使用多次调用 getter 和 setter 来设置或获取值