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

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

【问题讨论】:

标签: java oop object reference 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();
              
              }
              

              我希望这会有所帮助!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-11-09
                • 2010-09-17
                • 1970-01-01
                • 2023-04-06
                • 2013-05-17
                • 2014-04-11
                • 2014-10-26
                • 2012-10-30
                相关资源
                最近更新 更多