Java 什么是类、引用和对象?
我已经为java编程2年了,显然我遇到了一个问题,我无法再次理解和区分类、引用和对象(我不明白为什么我会忘记这些概念) 让我们开始讨论问题,我不确定类或引用是否相同,尽管我已经知道什么是对象 有人能以一种友好、易懂和完整的方式区分什么是类、引用和对象吗Java 什么是类、引用和对象?,java,oop,class,object,reference,Java,Oop,Class,Object,Reference,我已经为java编程2年了,显然我遇到了一个问题,我无法再次理解和区分类、引用和对象(我不明白为什么我会忘记这些概念) 让我们开始讨论问题,我不确定类或引用是否相同,尽管我已经知道什么是对象 有人能以一种友好、易懂和完整的方式区分什么是类、引用和对象吗 我所知道的是,类更像是对象的模板(房子的蓝图,其中类是蓝图,房子是对象)。当您编写代码时,您会构建一个 实例(发生、复制) 属于 反对 一个说 阶级 并保持 参考文献 对其进行调用,以便可以调用其方法 还有一些基础知识:,,和。类是一个模板,您是
我所知道的是,类更像是对象的模板(房子的蓝图,其中类是蓝图,房子是对象)。当您编写代码时,您会构建一个 实例(发生、复制) 属于 反对 一个说 阶级 并保持 参考文献 对其进行调用,以便可以调用其方法
还有一些基础知识:,,和。类是一个模板,您是对的。它是关于数据结构的一些知识。对象是内存中的结构实例。引用是该实例的内存地址
如果您所说的
Object
是指java标识符,那么Object
是所有复杂java类的基本类。假设您在这里写了两行代码:
Engine app1 = new Engine(); //LINE 1
Engine app2 = app1; //LINE 2
在第1行中,引擎是一个类,基本上是一个蓝图
new Engine()是在堆上生成的实例
通过在代码中使用app1和app2,可以引用该实例
因此,app1和app2是引用当您创建一个对象时,场景后面发生的事情是为包含该对象保留了一段内存。这可能是大记忆景观中的任何地方;这取决于操作系统和编译器,而您实际上无法控制或了解它的最终位置 问问你自己,如果你不知道它在内存中的位置,你如何使用它?如果不知道值存储在哪里,如何从中读取值?这就是推荐人为您所做的。它们是与物体保持联系的一种方式。这是一条附在气球上的小绳子,它是一个参照物
您可以使用引用来表示“我现在想触摸这个对象!”或“我想从这个对象读取一个值!”。如果您喜欢住房隐喻:
- 班级就像房子的蓝图。使用这个蓝图,你可以建造任意多的房子
- 你建造的每个房子(或用OO术语实例化的房子)都是一个对象,也称为实例
- 当然,每家每户都有一个地址。如果你想告诉某人房子在哪里,你可以给他们一张写有地址的卡片。该卡是对象的参考
- 如果你想参观这所房子,你要看卡片上写的地址。这称为取消引用
Foo myFoo = new Foo(); // 1
callBar(myFoo); // 2
myFoo.doSomething() // 4
void callBar(Foo foo) {
foo = new Foo(); // 3
}
那么让我们看看发生了什么
newfoo()
告诉JVM使用Foo
蓝图建造一座新房子。JVM执行此操作,并返回对房屋的引用。然后将此引用复制到myFoo
。这基本上就像让承包商给你盖房子一样。他知道了,然后告诉你房子的地址;你把这个地址写下来callBar
。接下来让我们跳到那个方法Foo-Foo
。Java是按值传递的,因此callBar
中的foo
是myFoo
引用的副本。想象一下,这就像给callBar
一张自己的卡片,上面写着房子的地址。callBar
对这张卡有什么作用?它要求建造一座新房子,然后用你给它的卡片写下新房子的地址。请注意,callBar
现在无法到达第一栋房子(我们在第1行中建造的那栋房子),但那栋房子没有改变,因为一张卡片上曾经有它的地址,现在上面有其他房子的地址myFoo
,对其调用一个方法(doSomething()
)。这就像看着卡片,去卡片上地址的房子,然后在房子里做一些事情。请注意,myFoo
卡的地址通过callBar
方法保持不变——请记住,我们给了callBar
一份参考资料myFoo
的卡上callBar
。在此之前,我们将写在myfoo
上的地址复制到一张新卡上,并将其交给callBar
。它称那张卡为foocallBar
向JVM请求另一所房子。它创建它,并返回新房子的地址callBar
将此地址复制到我们给它的卡上对象
是类
定义的运行时表示形式。以及使用对象的名称
MyClass ref = new MyClass();
String s;
String s = "asdf";
String s = new String("asdf");
class Car {
private String tier;
private String tierFriction;
private double weight;
private double gasFedToEngine;
}
class Tier {
private String tierMaterial;
private String tierFriction;
private double weight;
private double tierDiameter;
}
class Car {
private Tier tier; // getting all properties of Tier here itself
private double weight;
private double gasFedToEngine;
}
static List<Car> showroomCars = new ArrayList<Car>();
public boolean addCarToShowroom() {
Car carNissan = new Car(); // always creates a new objects and allocates some memory in heap
carNissan.setName("Nissan");
carNissan.setColor(RED);
carNissan.setWeight(300);
showroomCars.add(carNissan);
Car carAudi = new Car();
carAudi.setName("Audi");
carAudi.setColor(BLACK);
carAudi.setWeight(270);
showroomCars.add(carAudi);
}
class Car {
void test() {
Car car1 = new Car(); // (1)
Car car2 = new Car(); // (2)
car2 = car1;
/**
Says that car2 should point to where car1 points, so now both points to first object of Car
But for this car2 has to loose its current object-(2), making it an Abandoned object (An object with no active reference from the stack).
**/
}
}
//We have a Student class. Below are some attributes which we will use:
class Student
{
string Name;
int Age;
string Address;
}
Student student=new Student();
static void Main(string[] args)
{
Student student = new Student();
student.Name = "Vivek";
student.Age = 24;
student.Address = "Address";
Console.Write("Student Name is " + student.Name + " whose age is " + student.Age + " and he/she stays at " + student.Address);
}
//By writing a function/method and write the code which student should handle as below:
class Student
{
public string Name;
public int Age;
public string Address;
public void Run()
{
//Write some code
}
public void Walk()
{
//Write some code
}
}
//String is also class which represents text as a sequence of UTF-16 code units
public string Name;
//Integer is a struct which represents a 32-bit signed integer
public int Age;
//String is also class which represents text as a sequence of UTF-16 code units
public string Address;