在Java中,什么决定数组是否可以保存对象
我有一个Image类,我初始化了一个数组,如下所示。在这里,Java允许在images数组中只包含图像对象。为什么我无法将字符串或任何其他值指定给图像数组?如果在Java中,什么决定数组是否可以保存对象,java,Java,我有一个Image类,我初始化了一个数组,如下所示。在这里,Java允许在images数组中只包含图像对象。为什么我无法将字符串或任何其他值指定给图像数组?如果String[]names=新字符串[3]names数组可以保存字符串值。那么,String类中是否有任何东西只允许字符串分配给names数组,而不能将任何对象分配给names数组 Image[] images = new Image[3]; public class Image { /** Instance variables *
String[]names=新字符串[3]
names数组可以保存字符串值。那么,String类中是否有任何东西只允许字符串分配给names数组,而不能将任何对象分配给names数组
Image[] images = new Image[3];
public class Image {
/** Instance variables **/
private String imgLoc;
private String imgDesc;
private int dimensionX;
private int dimensionY;
private boolean defaultImg;
/** Getter method for image location **/
public String getImgLoc() {
return imgLoc;
}
/** Setter method for image location **/
public void setImgLoc(String imgLoc) {
this.imgLoc = imgLoc;
}
public String getImgDesc() {
return imgDesc;
}
public void setImgDesc(String imgDesc) {
this.imgDesc = imgDesc;
}
public int getDimensionX() {
return dimensionX;
}
public void setDimensionX(int dimensionX) {
this.dimensionX = dimensionX;
}
public int getDimensionY() {
return dimensionY;
}
public void setDimensionY(int dimensionY) {
this.dimensionY = dimensionY;
}
public boolean isDefaultImg() {
return defaultImg;
}
public void setDefaultImg(boolean defaultImg) {
this.defaultImg = defaultImg;
}
}
数组的类型决定了可以放入的内容。Java是一种语言。字符串类中不需要任何东西。这就是
数组
的工作原理
Type[]数组代码>只接受类型
实例或类型
子类型的ex
如果您希望能够访问所有内容:Object[]
为什么我无法将字符串或任何其他值指定给图像数组
Java类型系统阻止它。使用类型Image[]
声明的数组只能包含Image
实例或Image
子类型(或null
值)的实例的对象。编译器将阻止您这样做
这就是我们说Java是静态类型语言的意思
此外,运行时系统的设计使得不可能“打破”数组的静态类型规则。例如,如果尝试使用反射将字符串
放入图像[]
,则会立即出现异常
这就是我们说Java是强类型语言的意思
(泛型类型和不安全转换存在一些问题,但即使你弄错了,最糟糕的情况是一些隐藏的类型转换可能会在意外的地方导致异常。)
(实际破坏类型系统的唯一方法是跳出Java语言;例如,使用本机代码或不安全的类。但如果这样做,可能会使JVM不稳定,导致JVM恐慌。)
如果String[]names=newstring[3]
,names数组可以保存字符串值。那么,String类中是否有任何东西只允许字符串分配给names数组,而不能将任何对象分配给names数组
Image[] images = new Image[3];
public class Image {
/** Instance variables **/
private String imgLoc;
private String imgDesc;
private int dimensionX;
private int dimensionY;
private boolean defaultImg;
/** Getter method for image location **/
public String getImgLoc() {
return imgLoc;
}
/** Setter method for image location **/
public void setImgLoc(String imgLoc) {
this.imgLoc = imgLoc;
}
public String getImgDesc() {
return imgDesc;
}
public void setImgDesc(String imgDesc) {
this.imgDesc = imgDesc;
}
public int getDimensionX() {
return dimensionX;
}
public void setDimensionX(int dimensionX) {
this.dimensionX = dimensionX;
}
public int getDimensionY() {
return dimensionY;
}
public void setDimensionY(int dimensionY) {
this.dimensionY = dimensionY;
}
public boolean isDefaultImg() {
return defaultImg;
}
public void setDefaultImg(boolean defaultImg) {
this.defaultImg = defaultImg;
}
}
当然。类型系统。这种情况与使用Image
数组的示例相同
但请注意,并不是字符串类在执行此操作。。。除了String
是一个final
类之外,所以String
的子类型是不可能的。这就是数组的工作方式。可能重复