如果存在用户定义的构造函数,则无法使用默认构造函数

时间:2014-03-27 16:14:38

标签: java debugging exception constructor

似乎我们被迫使用用户定义的构造函数(如果已经定义了构造函数)并且无法使用已提供的默认构造函数。

如果没有提供用户定义的构造函数,我可以这样做(默认构造函数)

Student s = new student() ; 

一旦提供了用户定义的构造函数,我就不能再这样做了,这与C ++不同,我仍然可以使用提供的构造函数

我定义构造函数但无法执行Student s = new student()

的代码示例
package javaapplication1;
import java.util.*;
import java.io.*;
import java.lang.*;


public class JavaApplication1
{

    public static void main(String[] args)
    {  
        Student s = new Student(); // will get compiler error

        System.out.println(s.getname());


    }

    public static class Student
 {
     private String name;
     private int mark;

     public Student(String namevalue , int markvalue) // user defined constructor
     {
        name = namevalue;
        mark = markvalue;
     }
     public String getname()
     {
         return name;
     }
     public void setname(String value)
     {
         name = value;
     }

 }

}

我的分析是否正确,为什么会这样?

3 个答案:

答案 0 :(得分:4)

您需要了解默认构造函数仅由Java编译器提供,如果您未能提供自己的构造函数。你做的那一刻,你也需要提供一个无参数的构造函数。这对新的程序员来说很困惑,但是如果你考虑一下它实际上很有意义 - 你真的希望Java在没有你控制的情况下为你创造东西吗?

答案 1 :(得分:1)

如果您想使用Student s = new student() ;,只需在Stundent - 类中定义第二个构造函数,不带参数: public Student() { }

答案 2 :(得分:0)

行为是有充分理由的。

如果您想阻止开发人员在没有姓名和标记的情况下意外创建学生,该怎么办?如果Java总是添加自己的构造函数,那么你无法做到这一点,无论你编写什么构造函数。