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 types
和reference
类型。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 MainClass 和 public class Class_2,并且您想在 MainClass 中创建 Class_2 的实例。
这是一种非常简单且基本的方法:
public MainClass() /*******this is the constructor of MainClass*******/
Class_2 nameyouwant = new Class_2();
我希望这会有所帮助!
【讨论】:
以上是关于Java 中的实例到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章