我对java中的默认构造函数有疑问 尽管我已经阅读了java中的构造函数,但默认构造函数会将所有实例变量初始化为其默认值。但是如果我们为一个类定义一个构造函数,那么如果我们想要将变量初始化为默认值呢?
假设我有2个文件 a.java
public class a
{
int x;
public a(int z)
{
if(z > 0)
{
x = z;
}
}
public void get()
{
System.out.println(x);
}
}
和b.java
public class b
{
public static void main(String[] args)
{
a obj = new a(-4);
obj.get();
}
}
现在这里条件(z> 0)失败,因此x被初始化为零。但这究竟是什么,因为它们在类a中没有默认构造函数。
答案 0 :(得分:10)
答案 1 :(得分:2)
在您编写的a
课程(下面重命名为A
以遵循惯例)中,没有默认构造函数。类的默认构造函数是public
且没有参数的构造函数。
使用您编写的代码,这将失败:
A a = new A();
只要在类中声明另一个构造函数,就不再有默认构造函数了。
对于实例变量,如果不显式初始化它们,则将它们设置为默认值。那就是:
public class A
{
private int x;
public int getX()
{
return x;
}
}
如果你这样做:
final A a = new A();
System.out.println(a.getX());
这将打印出0
。上面的类完全等同于:
public class A
{
private int x /* = 0 -- default value for uninitialized int instance variables */;
// redundant
public A()
{
}
public int getX()
{
return x;
}
}
答案 2 :(得分:0)
在java中声明变量时,默认情况下将其初始化为默认值。
对于原始类型是0(或它是等价的),对象是null
因此,在您的示例中,x
初始值为0,您永远不会覆盖它。
答案 3 :(得分:0)
在java中,如果我们不定义任何构造函数,它将自己的默认构造函数作为默认值。在创建对象时,我们将值初始化为构造函数。
public class Car{
int numOfWheels;
public Car(int numOfWheels){ //created constructor//
this.numOfWheels=numOfwheels;
}
}
public static void main(string[]args){
Car skoda = new Car(4);
} *//initialized value to the object using constructor in parenthesis//*
答案 4 :(得分:0)
public class a
{
int x;
public a(int z)
{
//as we know that every class base class is Object class this constructor first statement is super(); means compiler automatically add this statement that call object class default constructor and initialize default values
if(z > 0)
{
x = z;
}
}
public void get()
{
System.out.println(x);
}
}
答案 5 :(得分:0)
公共课a
{
int x;
public a(int z)
{
/ *我们知道每个类基类都是Object .....
编译器自动添加super();调用Object类的默认构造函数
初始化实例变量* /
的值if(z> 0)
{
x = z;
}
}
public void get()
{
的System.out.println(X);
}
} 公共课b
{
public static void main(String[] args)
{
a obj = new a(-4);
obj.get();
}
}
//其他例子在
之下/ * A类
{
公开A()
{
System.out.println(" Arjun Singh Rawat和Ashish Chinaliya");
}
}
B类延伸A
{
公共B()
{
//编译器自动添加super();
}
}
课程调用
{
public static void main(String arg [])
{
B bb = new B();
}
} * /
感谢...
答案 6 :(得分:0)
function findcontrol()
{
var textBoxQuantity = document.getElementsByClassName("field-text1");
for (var i = 0; i < textBoxQuantity.length; i++) {
findvalue(textBoxQuantity[i].id);
}
}
function findvalue()
{
var Quantity = document.getElementById(quantity).value;
if (Number(Quantity) > 0){
// your calculations here
}
默认构造函数不是将字段初始化为默认值, 在这个程序中,即使没有默认构造函数,静态字段a也被初始化为0 由编译器添加。在调用构造函数之前,它也被初始化为0.