构造方法参数问题

来源:3-4 自由编程

饭勺超人

2019-07-02 20:49:06

public class GoodsTest {
    public static void main(String[] args) {
        try {
            Class  goodsClass = Class.forName("com.imooc.test.Goods");
            Constructor cs1 = goodsClass.getConstructor();
            Goods goods = (Goods)cs1.newInstance();
            goods.disPlay();

            Constructor cs2 = goodsClass.getConstructor(String.class, String.class,Float.TYPE, String.class);
            Goods goods1 = (Goods)cs2.newInstance("001", "手机", 5000.00, "很漂亮");
            goods1.disPlay();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
public class Goods {
    private String goodsId;
    private String goodsName;
    private Float goodsPrice;
    private String goodsDesp;

    public Goods() {
    }

    public Goods(String goodsId, String goodsName, Float goodsPrice, String goodsDesp) {
        this.goodsId = goodsId;
        this.goodsName = goodsName;
        this.goodsPrice = goodsPrice;
        this.goodsDesp = goodsDesp;
    }

    public String getGoodsId() {
        return goodsId;
    }

    public void setGoodsId(String goodsId) {
        this.goodsId = goodsId;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public float getGoodsPrice() {
        return goodsPrice;
    }

    public void setGoodsPrice(float goodsPrice) {
        this.goodsPrice = goodsPrice;
    }

    public String getGoodsDesp() {
        return goodsDesp;
    }

    public void setGoodsDesp(String goodsDesp) {
        this.goodsDesp = goodsDesp;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "goodsId='" + goodsId + '\'' +
                ", goodsName='" + goodsName + '\'' +
                ", goodsPrice=" + goodsPrice +
                ", goodsDesp='" + goodsDesp + '\'' +
                '}';
    }
    public void disPlay(){
        System.out.println(toString());
    }
}
Goods{goodsId='null', goodsName='null', goodsPrice=null, goodsDesp='null'}
java.lang.NoSuchMethodException: com.imooc.test.Goods.<init>(java.lang.String, java.lang.String, float, java.lang.String)
	at java.lang.Class.getConstructor0(Class.java:3082)
	at java.lang.Class.getConstructor(Class.java:1825)
	at com.imooc.test.GoodsTest.main(GoodsTest.java:13)
	老师帮忙看下,float.class可以,Float.TYPE 报错(类和测试类同时修改的)

老师帮忙看下

写回答

1回答

芝芝兰兰

2019-07-03

同学你好。关键是float类型需要使用以f结尾的小数来赋值。

1、如果直接写小数,java会认为是double类型:

    可以看到声明即报错

    http://img.mukewang.com/climg/5d1c155b0001d08f02340122.jpg

    报错信息如下:

    http://img.mukewang.com/climg/5d1c15a40001043c02660156.jpg

    http://img.mukewang.com/climg/5d1c15c00001cb4503130162.jpg

2、无论Goods的属性声明为Float包装类还是float基本数据类型,使用修改后的test运行结果均如下:

http://img.mukewang.com/climg/5d1c14340001d20213480497.jpg

http://img.mukewang.com/climg/5d1c14450001ec0706760087.jpg

如果解答了同学的疑问,望采纳~

祝学习愉快~



0

0 学习 · 8016 问题

查看课程