我所说的是从编码方式的绝对起点开始的不到一周的时间(如果正确的话,不到4天)。
所以,这是我的问题。我制作了一个类User
,然后给了它一些变量(很抱歉,如果我的编写方式很随意并且不像编程那样)。
public class User
{
String name;
short age;
int height;
然后我创建了一些构造函数。那就是其中之一:
public User(String name,short age,int height) {
this.name=name;
this.age=age;
this.height=height;
System.out.println(name);
System.out.println("Age: "+age);
System.out.println("Height: "+height);
System.out.println();
}
然后,在main
方法中,我使类User
的主题具有指定的大量变量:
public static void main(String[] args) {
User user1=new User("Dan",20,190);
}
但是当我运行程序时,出现一个错误,提示没有任何(String,int,int)类型的构造函数。同时,如果写入(short)
,即指定数据类型,则programm可以工作。 Java为什么将与short
要求的金额类型匹配的数字视为int
?
答案 0 :(得分:1)
Java数字文字位于int
处,因此20是int
,不会隐式转换为short(某些初始化除外)。
然后,编译器正在寻找一种将至少个int作为第二个参数的方法。您的定义最多接受 个短裤(short
是int
中的严格子集)。然后,编译器将呼叫拒绝为未解决。
在编写(short)20
时,您命令编译器将32位int
缩短为16位short
的值。太危险了(某些int值可以表示为shorts)以使其隐式创建,因此您需要自己编写并执行转换(前提是您知道自己在做什么)。
答案 1 :(得分:0)
编译器错误告诉您年龄不是short
类型,(除非您另行告诉,否则它会自动将年龄设为int
)
尝试一下,用这种方式告诉编译器您的年龄是short
public static void main(String[] args)
{
String name = "Dan";
short age = 20;
int height = 190;
User user1=new User(name,age,height);
}