Java 中的实例到底是啥?

Posted

技术标签:

【中文标题】Java 中的实例到底是啥?【英文标题】:What exactly is an instance in Java?Java 中的实例到底是什么? 【发布时间】:2011-07-04 19:23:46 【问题描述】:

对象、实例和引用之间有什么区别?他们说他们必须为他们的应用程序创建一个实例?这是什么意思?

【问题讨论】:

Difference between object and instance 的可能重复项 【参考方案1】:

对象和实例是同一件事

我个人更喜欢在指代特定类型的特定对象时使用“实例”一词,例如“Foo 类型的实例”。但是,在谈论一般对象时,我会说“对象”而不是“实例”。

一个引用要么引用一个特定的对象,要么它可以是一个空引用。


他们说他们必须为他们的应用程序创建一个实例。什么意思?

他们可能意味着你必须写这样的东西:

Foo foo = new Foo();

如果您不确定应该实例化什么类型,您应该联系应用程序的开发人员并要求提供更完整的示例。

【讨论】:

我无法编辑它,因为它只有一个字符。请在您的答案中的引用中添加“y”。 “说 [y] 必须……”【参考方案2】:

“应用程序的实例”没有任何意义。

“对象”和“实例”是一回事。有一个定义结构的“类”和该类的实例(通过new ClassName() 获得)。比如有Car这个类,有里程、最大速度、马力、品牌等不同属性的实例。

在 Java 上下文中,引用是一个变量* - 它是指向一个对象/实例的东西。例如,String s = null; - s 是一个引用,当前不引用任何实例,但可以引用 String 类的实例。

*Jon Skeet 记录了变量和引用之间的区别。见他的评论。调用方法时 Java 的工作方式有一个重要区别——按值传递。

s 的值是一个参考。区分变量和值、对象和引用非常重要。

【讨论】:

【参考方案3】:

当您使用关键字new(例如JFrame j = new JFrame();)时,您正在创建JFrame 类的实例。

new 运算符实例化一个 通过为新的分配内存来上课 对象并返回一个引用 注意:短语“实例化一个类”的含义与 “创建一个对象。”当你创建 一个对象,你正在创建一个 一个类的“实例”,因此 “实例化”一个类。

看这里Creating Objects


Java 编程的类型 语言分为两种 类别:primitive typesreference 类型。reference 类型 是class 类型、interface 类型和 array 类型。 还有一个特别的 null 类型。 一个对象是一个 动态创建的实例 class 类型或动态创建的 array.reference 的值 type 是对对象的引用。

更多信息请参考Types, Values, and Variables

【讨论】:

我不认为 j 是一个对象。它只是存储对对象的引用。 请注意,j 甚至也不是参考。这是一个变量。 j 是一个参考。区分变量和值、对象和引用非常重要。 我说存储参考不是参考。也许我表达得不好,但这就是我的意思。 @Jon 我说过j 是创建的JFrame类型的对象。我的意思是j是一个引用类型的变量,它是一个JFrame 数据类型。 如果这就是你的意思,那就是你应该说的。鉴于这个问题是关于术语的细节,所以准确无误非常重要。【参考方案4】:

我认为 Object = Instance。引用是指向对象的“链接”。

Car c = new Car();

变量 c 存储对 Car 类型对象的引用。

【讨论】:

【参考方案5】:
Computer c= new Computer()

这里的对象是从Computer 类创建的。名为 c 的引用允许程序员访问该对象。

【讨论】:

【参考方案6】:

主要区别是当你说 ClassName obj = null;您只是为该类创建一个对象。它不是那个类的实例。

此语句只会为静态成员变量分配内存,而不是为普通成员变量分配内存。

但是当你说 ClassName obj = new ClassName();您正在创建该类的一个实例。该语句将为所有成员变量分配内存。

【讨论】:

【参考方案7】:

基本上,对象和实例是可以互换使用的两个词。 类是对象的模板,对象是类的实例。

【讨论】:

【参考方案8】:

“创建一个类的实例”怎么样,“你正在学习一个类并为该类创建一个新变量,该变量将根据输入的变化而变化”

库中名为 Nacho 的类

变量 Libre 保存将要改变的“实例”

Nacho Libre = new Nacho(Variable, Scanner Input, or anything going here, 这是接受更改的地方,然后将值放在等号左侧的“Libre”中(你知道“Nacho Libre = new Nacho(Scanner.in)" "Nacho Libre" 在 = 的左边(这不是技术谈话,这是我的解释方式)

我认为这比说“类型实例”或“类实例”要好。真正的重点是它只需要详细说明......“类型或类的实例”对初学者来说还不够好......哇,它就像绕口令,你的大脑不能专注于绕口令很好......那个“实例”这个词很烦人,光是它的声音就让我发疯......它需要更多细节......它需要更好地分解。我不得不用谷歌搜索“实例”是什么意思,只是为了弄清楚我的方位......试着对你奶奶说“类实例”......哎呀!

【讨论】:

这应该是个评论。【参考方案9】:

instance 的字面意思是“某事的一个例子或单次出现”。这与 Java 术语中的实例非常接近。

Java 遵循动态加载,这不像 C 语言在运行时将所有代码复制到 RAM 中。让我们用一个例子来捕捉这一点。

   class A
    
    int x=0;
    public static void main(String [] args)    
     
    int y=0;
    y=y+1;
    x=x+1;
        

    

让我们编译并运行这段代码。

第一步:javac A.class(生成.class文件,为字节码)

第二步:java A(.class文件转换成可执行代码)

在第2步中,main方法和静态元素被加载到RAM中执行。在上述情况下,直到 y=y+1 行之前没有问题。但是每当执行 x=x+1 时,都会抛出运行时错误,因为 JVM 不知道在 main 方法之外声明的 x 是什么(非静态)。

所以如果通过某种方式 .class 文件的内容在内存中可供 CPU 执行,则没有更多问题。

这是通过创建对象和关键字NEW来完成这项工作的。

"在运行时为硬盘内容(这里是.class文件)在RAM中保留内存的概念称为Instance"

Object 也称为类的实例。

【讨论】:

【参考方案10】:

对象,也被称为实例,是具有相关功能的程序的自包含元素和数据。大多数情况下,您使用该类只是为了创建实例,然后使用这些实例。

- 定义取自《Sams 在 21 天内自学 Java》一书。

假设您有 2 个类,public class MainClasspublic class Class_2,并且您想在 MainClass 中创建 Class_2 的实例

这是一种非常简单且基本的方法:

public MainClass()      /*******this is the constructor of MainClass*******/



 Class_2 nameyouwant = new Class_2();


我希望这会有所帮助!

【讨论】:

以上是关于Java 中的实例到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Android中ClipData中的“标签”参数到底是啥?

Java 中的 INFINITY 常量到底是啥?

Java中的Double到底是啥意思?

Java中的上下文到底是啥? [复制]

Java中的上下文到底是啥? [复制]

Java I/O 中的“Stream”和“Buffer”到底是啥意思?