对象和实例是同一概念。
个人而言,我更倾向于在引用某个特定类型的特定对象时使用“实例”这个词,例如“类型为Foo的一个实例”。但当谈论对象时,我会使用“对象”而不是“实例”。
引用要么指向特定对象,要么是空引用。
他们说必须要创建应用程序的一个实例,这是什么意思?
他们可能意味着你需要编写类似以下的内容:
Foo foo = new Foo();
如果您不确定应该实例化哪种类型,您应该联系应用程序的开发人员,并要求提供更完整的示例。
应用程序实例(instance to an application)没有具体含义。
"对象(object)"和"实例(instance)"是同一个概念,有一个定义结构的“类(class)”及其实例(通过new ClassName()
获得)。例如有一个名为Car
的类,它有不同属性的实例,如里程、最大速度、马力、品牌等。
在Java上下文中,引用(reference)是一个变量* - 它指向一个对象/实例。例如,String s = null;
- s
是一个引用,目前没有指向任何实例,但可以引用String
类的实例。
*Jon Skeet提到了变量和引用之间的区别。请参见他的注释。这是关于Java如何在调用方法时工作的重要区别 - 传值传递(pass-by-value)。
"s的值是一个引用(reference),重要的是要区分变量和值以及对象和引用。
j
甚至不是一个引用。它是一个变量。 j
的 值 是一个引用。在变量和值,对象和引用之间进行区分非常重要。 - Jon Skeetj
是以 JFrame 类型创建的对象。 这意味着 j
是一个引用类型的变量,其数据类型为 JFrame
。 - Alpine我认为Object(对象)等同于Instance(实例)。Reference(引用)是指向一个Object的“链接”。
Car c = new Car();
Computer c= new Computer()
这里创建了一个来自Computer
类的对象。一个名为"c"的引用允许程序员访问该对象。
主要区别是当你说 ClassName obj = null; 时,你只是创建了该类的一个对象。它不是该类的实例。
这个声明只会为静态成员变量分配内存,而不会为普通成员变量分配内存。
但是当你说 ClassName obj = new ClassName(); 时,你正在创建该类的一个实例。这个声明将为所有成员变量分配内存。
基本上,"对象(object)"和"实例(instance)"这两个词可以互换使用。 一个类是一个对象的模板,而一个对象是一个类的实例。
class A
{
int x=0;
public static void main(String [] args)
{
int y=0;
y=y+1;
x=x+1;
}
}
让我们编译并运行这段代码。
步骤1:javac A.class(生成了字节码的.class文件)
步骤2:java A(.class文件被转换为可执行代码)
在第二步中,主方法和静态元素被加载到RAM中以进行执行。在上述情况下,直到y=y+1这一行都没有问题。但是,每当执行x=x+1时,就会抛出运行时错误,因为JVM不知道在主方法之外(非静态)声明的变量x是什么。
因此,如果某种方式使.class文件的内容在内存中可用于CPU执行,则不再有问题。
这是通过创建对象和关键字NEW来实现的。
“在运行时为硬盘(这里是.class文件)内容在RAM中保留内存的概念称为实例”
创建一个类的实例
在库中叫做Nacho的类
变量Libre用于保存将要更改的"实例"
Nacho Libre = new Nacho(Variable、Scanner输入或其他内容,这是接受更改并将值放入等号左侧的"Libre"的位置(你知道"Nacho Libre = new Nacho(Scanner.in)","Nacho Libre"在=号的左侧(那不是技术术语,而是我解释的方式)
我认为这比说"类型的实例"或"类的实例"更好。实际上,重点是需要更详细地解释......"类型或类的实例"对于初学者来说不够好......哇,就像是一句绕口令,大脑无法很好地专注于绕口令......"instance"这个词非常烦人,仅仅听到它的声音就让我抓狂......它需要更多的细节......它需要更好地被分解。我不得不Google什么是"instance"才能搞清楚方向......试着跟你的奶奶说"类的实例"......天啊!
实例变量:它必须附加到对象上。在实例化类之后才能使用此类中的实例变量。
public class Test{
static int a = 13;
int b = 14;
public static void main(String[] args){
int d = new Test().b;
System.out.println(d);
}
}