Java - 构造函数和方法冗余

时间:2015-09-05 19:03:47

标签: java

我是Java新手,正在处理家庭作业问题。该问题指定使用构造函数创建一个Temperature类,该构造函数接受华氏温度(作为double)并将其存储在using (OleDbConnection connection = new OleDbConnection(cs)) { string cb1 = "INSERT INTO User([User_Name],[User_Password],[Entry_Date],[Entry_Time]) VALUES (@val1,@val2,@val3,@val4)"; using (OleDbCommand comm = new OleDbCommand(cb1, connection)) { connection.Open(); comm.Parameters.AddWithValue("@val1", txtUserName.Text); comm.Parameters.AddWithValue("@val2", txtPassword.Text); comm.Parameters.AddWithValue("@val3", DateTime.Now.ToString("d")); comm.Parameters.AddWithValue("@val4", DateTime.Now.ToString("t")); comm.ExecuteNonQuery(); } } 字段中。 setFahrenheit方法接受华氏温度(作为双精度)并将其存储在ftemp字段中。

这对我来说似乎是多余的。 setFahrenheit方法不会完全与构造函数一样吗?

7 个答案:

答案 0 :(得分:1)

不。如果温度变化会发生什么?您无法创建新的Temperature类,因为这意味着您正在创建一个全新的对象。 setFarenheit()允许您更改特定类中的温度。

这是另一个更好的例子:假设你有一个名为Person的类,你在构造函数中传递了这个人的年龄。你应该在类中有一个setAge()方法,因为Person最终会变老,如果你创建一个人的副本只是为了改变他/她的年龄,那将是相当低效的。

答案 1 :(得分:1)

1)假设您还有一个空构造函数,并且您要创建一个Temperature对象temp

temp=new Temparature();

对于临时,ftemp字段仍为空。因此,如果您要设置ftemp,则会将setFahrenheit方法用作

temp.setFahrenheit(12);

2)同样,如果您在构造函数中使用Temparature创建ftemp对象,

temp=new Temparature(22); 

接下来,如果要更改此临时对象的ftemp,您将会怎么做? 您将再次使用setFahrenheit()方法和新的ftemp值,对吗?

希望这可以解除你的怀疑。

答案 2 :(得分:0)

引用以下网址给出的答案:Methods vs Constructors in Java

  

构造函数和方法之间的重要区别在于构造函数创建并初始化尚不存在的对象,而方法对已存在的对象执行操作。构造函数不能直接调用;当new关键字创建对象时,它们会被隐式调用。可以直接在已使用new创建的对象上调用方法。构造函数和方法的定义在代码中看起来类似。它们可以带参数,它们可以有修饰符(例如public),并且它们在大括号中有方法体。必须使用与类名相同的名称命名构造函数。它们不能返回任何东西,甚至是void(对象本身就是隐式返回)。必须声明方法返回一些东西,尽管它可能是无效的。

由rgettman提供

答案 3 :(得分:0)

构造新的Temperature对象时,会给它一个华氏度值。但是,如果要更改对象的值,会发生什么?您不能再使用构造函数,因为这将创建一个新对象而不是更改当前对象。因此,您可以在对象上调用setFahrenheit方法,这将改变其华氏温度值。

答案 4 :(得分:0)

是和否。构造函数用于实例化Temperature对象,然后将温度设置为传递给它的值。该方法允许您在代码中的任何位置更改温度值。

答案 5 :(得分:0)

构造函数只调用一次。创建对象后,您无法“重新创建”它,您只能创建一个新对象。如果要更改现有,则需要使用setter。

答案 6 :(得分:0)

是的,但除了表面上可能出现的内容之外,还有更多内容。

  • 如果这是该类中仅构造函数,则添加该setter会使类可变;也就是说,即使您必须在实例化时指定值,也可以在以后更改它而不使用新实例。

    如果想要创建一个可变对象,这是一种常见的模式。有时,允许这样做比强制使用不可变模式更简单(尽管如果希望在多线程上下文中使用它,这是不好的做法,因为你不能很容易地保证它的线程安全性。)

    < / LI>
  • 如果那是不是唯一的构造函数;也就是说,你有一个没有初始化的无参数构造函数,然后该变量将被设置为其默认值。在这种情况下,您必须实例化对象,然后ftemp字段设置为您关心的内容。

    这在POJO中很常见,您可以通过多种方式实例化对象。根据您与对象的接口方式,这种方法可能更合适。