其实也可以不提供,只不过这样的话构造对象的时候一定要先拿到有参数的构造方法,然后赋予参数再构建对象。
比如
package .mldn.demo;
import java.lang.reflect.Constructor;
class Person
{ CTRL + K
private String name;
private int age;
public Person(String name, int age)
{
this.name = name;
this.age = age;
}
@Override
public String toString()
{
return "Person [name=" + name + ", age=" + age + "]";
}
}
public class TestDemo
{
public static void main(String[] args) throws Exception
{
Class<?> cls = Class.forName(".mldn.demo.Person"); 取得Class对象
取得指定参数类型的构造方法
Constructor<?> cons = cls.getConstructor(String.class, int.class);
Object obj = cons.newInstance("张三", 20); 为构造方法传递参数
System.out.println(obj);
}
}
第一个错误是因为在类里面用的是 getNamet()的方式的。你在主函数中却是getName();
第二个措施是因为在类中根本就没有getAge()这个函数的。只有一个Age()函数的。。
这样写没有问题
public Student(String name,String sex,int age)
{
this.name=name;
this.sex=sex;
this.age=age;
}
这样写也没有问题
public Student(String name,String sex,int age)
{
this(name);
this.sex=sex;
this.age=age;
}
两个一起写一定有问题,方法签名是一样的。
你在Xx类里定义了一个带参数的构造方法,那么这个Xx类就没有无参数的构造方法了。
子类在继承父类时,如果没有相同的带参构造方法,那么他就需要在其构造方法中明确的通过super()调用父类的带参构造方法,否则构造不出父类,从而也构造不出他自己了。
你如果在父类中写个不带参数的构造方法,就可以不用实现父类的带参构造方法了。
这么说吧,你想创建出一个新的对象,并且在创建的时候就给里面的变量赋值,这时你就需要一个带参数的构造方法!
如果你的变量时私有的,你在用这个新的对象的时候可以直接通过get方法把值取到!
带参数的构造方法就是初始化的时候赋值!
如果父类中已经构建过无参方法,子类不需要重新构建,也就是说必须有一个继承类中有无参构造方法。
如果父类中没有此构造方法,那么必须在子类中进行无参构造,否则子类会一直提示需要重写父类方法。
备注:这个建议根据java规范,每次创建类(需要构建)的时候就构建一个无参的构造方法,肯定不会报错。
使用类名作为方法名,参数列表为空就可以了。
例:有一个类A(class A),则其无参数构造方法为
public A(){
system.out.println("这是类A的无参数构造方法");
}
这个重载的构造方法的参数是一个a类对象的实例,还是很好理解的啊。比如:
a m=new a(); 这时m.x=1;m.y=2;
m.x=3; 给m的两个属性赋值
m.y=4;
a n=new a(m); 这时n.x=3;n.y=4;
可以不写
但如果子类需要带参数的构造方法,就必须写一个无参的,然后super();
我举个例子:
有个Circle类如下
class Circle{
private double r=0;
public Circle(){
}
public Circle(double x){
r=x;
}
public double setR(double x){
r=x;
}
}
然后在main中使用该类
Circle circle=new Circle();
circle.setR(5);
这两句等价于
Circle circle=new Circle(5);
换句话说有参与无参的区别就是有参构造能够在new的时候同时给创建的对象中的数据赋值
为什么Java反射对象必须有一个无参数的构造方法?
JAVA带参数的构造方法 第一个错误是因为在类里面用的是 getNamet()的方式的。你在主函数中却是getName(); 第二个措施是因为在类中根本就没有getAge()这个函数的。只有一个Age()函数的。。java中 带参数的构造方法 这样写没有问题 public Student(String name,String sex,int age) { ...
java进行构造方法的时候,为什么一定要有一个无参构造方法?
1.子类继承父类的时候会自动继承父类的默认构造函数(也就是继承那个无参数的构造函数)。2.无参构造函数是所有构成函数的父类,如果没有写那个默认的不带参数的构造函数的话,继承的时候子类就会报错,因为系统不知道要不继承哪个构造函数,必须明确的使用super()关键字来描述。所以一般为了避免这种错误...
java中无参数构造方法有何作用?
1、java中无参数构造方法的存在是因为在创建子类的时候实例化对象报错。2、创建子类的对象实例的时候,必先调用父类的无参数的构造函数(默认构造函数),假如父类有带参数的构造函数,那么系统将不会给它创建无参数的构造函数,这时,子类在实例化的时候,因为找不到父类的默认构造函数,编译器将会报错...
为什么javaBean要有一个公有的无参构造方法?
因为很多框架\/程序通过反射技术实例化javabean对象的时候,不知道应该传什么参数给javabean对象,所以需要有一个无参的构造方法。如果类中没有显式地定义一个构造方法,类会有默认的构造方法,如果类中显式地定义了一个有参构造方法,那么就一定要再定义一个无参构造方法 ...
为什么简单JAVA类一定要保留一个无参构造
构造函数是用来实例化对象的,当你实例化一个对象,就相当于执行了构造函数创建了对象。大多数面向对象编程语言都是这样的。当然你也可以写有参构造函数,但你实例化对象的时候需要传入参数
为什么使用set注入,一定要给类提供一个无参的构造函数,否则Spring不...
因为set注入,需要先利用无参的构造方法 反射创建一个对象,再使用set方法 给属性赋值
Java构造函数 为什么需要无参构造函数
~“但是如果你创造了一个带有参数的构造方法,那么无参的构造方法必须显式的写出来,否则会编译失败"这句话有点不妥,应该这么理解:每个类至少要有一个构造函数,如果你自己构建了一个带有参数的构造函数而没有再显示的写出无参的构造函数也是可以的,不过当你尝试通过一个无参的构造函数来构建(new...
java中无参数构造方法有何作用
1、普通情况 a.首先你要了解 构造方法的重载 。有的人喜欢在 构造方法中 直接给 该对象的变量赋值,而有的人就喜欢 创建无参 的对象。比如说JFrame 有的人喜欢 JFrame frame = new JFrame();frame.title = "XXX";而有的人 就喜欢 JFrame frame = new JFrame("XXX");。b.其实 无参 的...
java创建带参构造方法必须创建无参构造方法吗
如果你没有定义构造方法,编译器会自动给你加一个无参的,但是当你定义了有参的构造方法时,就不会给你自己加一个了,所以这时候需要自己写一个无参的。
“java”中为什么“Object”类要有一个空的构造函数?
其他的类之所以可以不用给他写无参的构造函数(方法),就是因为这些类继承了Object类,也就继承了Object的构造方法。而Object是所有类的父类(基类),它没有父类,没有其他类给它继承了,所以必须要有无参的构造函数,否则不能进行Object的实例化。Java是一种可以撰写跨平台应用软件的面向对象的程序设计...