java中的默认构造函数,当java已将变量设置为默认值时

java中的默认构造函数,当java已将变量设置为默认值时,java,constructor,default,Java,Constructor,Default,我们知道基本数据类型的默认值是由java提供的,例如:对于int,我们有0。我们在java中有一个默认构造函数,它也做同样的工作。有什么必要?如果java没有默认构造函数,那么任何对象的状态在默认情况下都是相同的 我不是在问关于bean的答案,而是为了唯一的目的,即初始化。为什么我们有一个默认构造函数?默认构造函数的主要目的是调用基类的构造函数。鉴于以下类别: public class Default { private int result; private Object r

我们知道基本数据类型的默认值是由java提供的,例如:对于int,我们有0。我们在java中有一个默认构造函数,它也做同样的工作。有什么必要?如果java没有默认构造函数,那么任何对象的状态在默认情况下都是相同的


我不是在问关于bean的答案,而是为了唯一的目的,即初始化。为什么我们有一个默认构造函数?

默认构造函数的主要目的是调用基类的构造函数。鉴于以下类别:

public class Default {

    private int result;
    private Object result1;

    public int getResult() {  return result; }
    public Object getResult1() {  return result1; }
}
产生以下反汇编字节码:

> javap -c Default.class
Compiled from "Default.java"
public Default {
  public Default();
    Code:
       0: aload_0
       1: invokespecial #12                 // Method java/lang/Object."<init>":()V
       4: return

  public int getResult();
    Code:
       0: aload_0
       1: getfield      #20                 // Field result:I
       4: ireturn

  public java.lang.Object getResult1();
    Code:
       0: aload_0
       1: getfield      #24                 // Field result1:Ljava/lang/Object;
       4: areturn
}
public Default();
代码:
0:aload_0
1:invokespecial#12//方法java/lang/Object。“:()V
4:aload_0
5:bipush 42
7:putfield#14//字段结果:I
10:返回

它不仅涉及基本数据类型初始化,还涉及类成员数据类型的初始化

例如: 当您创建一个类的对象而不定义默认构造函数和任何参数化构造函数时,JVM将添加默认构造函数,该构造函数将调用其基类的构造函数,以确保所有基类成员变量都已初始化

另外,请查看此以了解更多详细信息

Java构造函数在对象创建时被调用。它构造值,即为对象提供数据,这就是它被称为构造函数的原因

显然,构造函数为对象提供数据

class Student{  
int id;  
String name;  

void display(){System.out.println(id+" "+name);}  

public static void main(String args[]){  
Student s1=new Student();  
s1.display();  
}  
}  
输出为
0空

class Student{  
int id;  
String name;  

Student()
{
  id=1;
  name="abc";
}

void display(){System.out.println(id+" "+name);}  

public static void main(String args[]){  
Student s1=new Student();  
s1.display();  
}  
}  
在这种情况下,输出将是
1abc

定义默认构造函数不是强制性的,但如果您正在编写Hibernate持久类、JPA实体或使用Spring framework管理对象创建和关联依赖项,则需要稍微小心一点。许多开源框架在运行时根据类名使用反射创建实例或对象。例如,当Hibernate使用反射创建实体实例时,它使用Class.newInstance()方法,该方法需要无参数构造函数来创建实例。它实际上相当于新实体()。如果在实体类中找不到任何无参数构造函数,该方法将抛出InstanceionException,这就是建议提供无参数构造函数的原因


Java中的数据类型比原始数据类型多得多。这就是我们拥有默认构造函数的方式。这个问题不是由编译器创建的默认构造函数解决的。为此,我们手动定义了一个默认构造函数。。。。。维斯兰特,这是与超级有关的,朋友。我想说什么是初始化的需要,如果默认情况下java有默认值,请考虑如何以及何时进行初始化,至少必须在某个地方指定这些默认值(即使是基元类型),所以,如果您将开始调试,您将发现当调用到达构造函数时,它将首先初始化类级变量,然后光标将移动到构造函数的下一行。
class Student{  
int id;  
String name;  

void display(){System.out.println(id+" "+name);}  

public static void main(String args[]){  
Student s1=new Student();  
s1.display();  
}  
}  
class Student{  
int id;  
String name;  

Student()
{
  id=1;
  name="abc";
}

void display(){System.out.println(id+" "+name);}  

public static void main(String args[]){  
Student s1=new Student();  
s1.display();  
}  
}