在Java中,什么决定数组是否可以保存对象

在Java中,什么决定数组是否可以保存对象,java,Java,我有一个Image类,我初始化了一个数组,如下所示。在这里,Java允许在images数组中只包含图像对象。为什么我无法将字符串或任何其他值指定给图像数组?如果String[]names=新字符串[3]names数组可以保存字符串值。那么,String类中是否有任何东西只允许字符串分配给names数组,而不能将任何对象分配给names数组 Image[] images = new Image[3]; public class Image { /** Instance variables *

我有一个Image类,我初始化了一个数组,如下所示。在这里,Java允许在images数组中只包含图像对象。为什么我无法将字符串或任何其他值指定给图像数组?如果
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
的子类型是不可能的。

这就是数组的工作方式。可能重复