【java问题】为什么测试类里面要加一个无参构造方法..去掉那个无参构造方法又会出错,是用来干嘛的

 

第1张图第26行,使用了无参构造方法创建对象:Student s = new Student();  如果Student类没有无参构造方法就会报错。

另外,如果一个类没有任何构造方法时,会默认生成无参构造。而你写了一个有参构造方法(第2张图第7行),所以不会自动生成无参构造方法,需要手动写无参构造方法。

因为你的主函数调用了Student类的无参构造方法,所以删掉会报错。

如果你不想报错,又想删掉这个方法,你可以在main函数里面删掉第26行到第28行,改成这样构造Student

new Student(name,age);

 

一个类如果不写构造方法会自动生成无参构造方法。写了有参构造方法没有写无参构造方法那这个类只能使用有参构造方法,不会自动生成无参构造方法。

你这里使用了无参构造方法创建了这个对象。如果你删去了类中的无参构造方法,你就不能使用无参构造方法生成对象。

当类中写了有参构造器的时候,默认的无参构造器就会失效,解决的方法一种是在子类中显式调用,另一种就是手写无参构造器。一般的话应该手写无参构造器

一个类中一定会有一个构造器,就算你不写,那么这个类会自动生成一个无参构造器,如果你写了,这个类在实例化的时候会去找你写的构造器.

构造器分为两种,一种是无参的,一种是有参的,构造器并且可以重载,也就说,一个类里面构造器是可以多个的,只要您参数个数不同就可以,你在new这个对象的时候会根据你new传入的参数去寻找对应的构造器.

比如:

你的26行里面Student s = new Student()是一个无参构造器,他会去寻找你Student里面第6行定义的无参构造器,你的Student第七行是一个有参构造器,你也可以在你的main方法中这样写Studeng s = new Student(name,age);这样它就会去找你定义的有参构造器.

1.类中默认有无参构造

2.当类中存在有参构造时,无参消失,如果还想使用,就要手动创建

3.面向对象的知识你没理解

  1. 你new他,就是调用的他的构造方法,你调用无参构造方法,你又不写无参构造方法肯定报错。
  2. 在你不写构造方法的情况下,它默认有一个无参构造,你写了构造方法,它默认的构造方法就没了

你可以理解为,你没写构造方法,那么JVM在编译的时候,会默认给你植入一个无参数的构造方法。

但是你写了构造方法,那么就不会植入了。new的时候,必须要按照你设定好的1个或者多个构造方法。

java基本语法来的

  1. 当你定义一个类的时候,如果没有写构造方法,系统默认给你一个无参的构造方法;
  2. 如果你定义自己的构造方法,那么系统就仅仅使用你定义的构造方法;
  3. 提醒一下构造方法的可以多个的。

 

分析

你已经定义构造方法public Student(String name, int age){ ...},所以要显式地写public Student(){...}