Java 实例变量默认值
我的书中说,局部变量和实例变量之间的一个关键区别是我们必须初始化局部变量 如果不进行初始化,实例变量将获得默认值Java 实例变量默认值,java,Java,我的书中说,局部变量和实例变量之间的一个关键区别是我们必须初始化局部变量 如果不进行初始化,实例变量将获得默认值0。在此之前不久,我做了一个示例,介绍了构造函数,以及public void和public double和 returndo 考虑一下我在书中刚刚做的例子。这里balance是一个实例变量。它下面有两个构造函数。如果实例变量的默认值为零,为什么需要第一个构造函数 public Account(){ balance = 0; } 如果我调用类似于acco
0
。在此之前不久,我做了一个示例,介绍了构造函数,以及public void
和public double
和
return
do
考虑一下我在书中刚刚做的例子。这里balance是一个实例变量
。它下面有两个构造函数。如果实例变量的默认值为零,为什么需要第一个构造函数
public Account(){
balance = 0;
}
如果我调用类似于accountacc=newaccount()的东西代码>余额=0
。它不是自动归零吗?至少这是我在书中的理解
这是我正在编写的完整代码
public class Account {
private double balance;
public Account(){
balance = 0;
}
public Account(double initialBalance){
balance = initialBalance;
}
public void deposit(double amount){
balance = balance+amount;
}
public void withdraw(double amount){
balance = balance-amount;
}
public double getBalance(){
return balance;
}
}
public class Test {
public static void main(String [] args){
Account acc = new Account(500);
acc.deposit(500);
System.out.println(acc.getBalance());
}
}
您不需要第一个构造函数,因为您从未在任何地方调用它
假设它是在某个地方调用的,您不需要在其中添加行balance=0
,但有些人仍然会添加它,只是为了让它显式可见并清楚地表明它是有意的(有时会无意中使用自动的东西)
如果您完全删除了构造函数,并尝试仅使用new Account()
(没有任何参数)实例化Account
,那么这将不起作用,因为您不再有零参数构造函数(另一个神奇的事情:当且仅当您没有任何其他构造函数时,Java才会为您生成一个构造函数).您不需要第一个构造函数,因为您从不在任何地方调用它
假设它是在某个地方调用的,您不需要在其中添加行balance=0
,但有些人仍然会添加它,只是为了让它显式可见并清楚地表明它是有意的(有时会无意中使用自动的东西)
如果您完全删除了构造函数,并尝试仅使用new Account()
(没有任何参数)实例化Account
,那么这将不起作用,因为您不再有零参数构造函数(另一个神奇的事情:当且仅当您没有任何其他构造函数时,Java才会为您生成一个构造函数).是的,默认值为0.0
所有基本类型(int
,double
,…)将初始化为0
,所有对其他类型的引用(以某种方式扩展对象
)将初始化为null
最好将成员(重新)初始化为0(或对类有意义的任何其他值),以表明您没有忘记变量。当您稍后添加新成员时,如果其值未在构造函数中初始化,则可能提示您忘记了它
您还可以决定在声明期间将其初始化为任何值:
private double balance = 0.0;
并对所有其他成员执行同样的操作。在这种情况下,当构造函数没有指定任何特定的值时,它们将收到该值。该模式可用于显示将这些值作为默认值的意图,以及由构造函数设置为“覆盖”的值。是的,它确实将0.0
作为默认值
所有基本类型(int
,double
,…)将初始化为0
,所有对其他类型的引用(以某种方式扩展对象
)将初始化为null
最好将成员(重新)初始化为0(或对类有意义的任何其他值),以表明您没有忘记变量。当您稍后添加新成员时,如果其值未在构造函数中初始化,则可能提示您忘记了它
您还可以决定在声明期间将其初始化为任何值:
private double balance = 0.0;
并对所有其他成员执行同样的操作。在这种情况下,当构造函数没有指定任何特定的值时,它们将收到该值。该模式可用于显示将这些值作为默认值的意图,以及由构造函数设置为“覆盖”的那些值。是的,所有基元类型(int
,double
,long
…)都自动用0
初始化。正如我的前一位发言者所说,增加一行是一种很好的做法,可以使事情变得更清楚、更清晰
但也要考虑复杂类型(String
、Integer
、Double
,或者您自己的类)。它们将被初始化为null
。如果您尝试访问此默认值,您将得到一个NullPointerException
,因此现有的默认值会更好。是的,所有基本类型(int
,double
,long
)都会自动用0
初始化。正如我的前一位发言者所说,增加一行是一种很好的做法,可以使事情变得更清楚、更清晰
但也要考虑复杂类型(String
、Integer
、Double
,或者您自己的类)。它们将被初始化为null
。如果尝试访问此默认值,您将得到一个NullPointerException
,因此现有的默认值会更好。使用构造函数来初始化实例变量。默认值为0(在int情况下初始化后)。但是,在代码中甚至没有调用默认构造函数。因此,在代码中可以删除默认构造函数。
此外,即使您调用默认构造函数,值也将自动初始化。您甚至不必在代码中提及balance=0
。仅此即可:
public account(){}
但是,如果您不调用任何构造函数并尝试通过引用变量访问实例变量,您将得到与局部变量相同的错误-
变量可能不是initia