Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是类、引用和对象?_Java_Oop_Class_Object_Reference - Fatal编程技术网

Java 什么是类、引用和对象?

Java 什么是类、引用和对象?,java,oop,class,object,reference,Java,Oop,Class,Object,Reference,我已经为java编程2年了,显然我遇到了一个问题,我无法再次理解和区分类、引用和对象(我不明白为什么我会忘记这些概念) 让我们开始讨论问题,我不确定类或引用是否相同,尽管我已经知道什么是对象 有人能以一种友好、易懂和完整的方式区分什么是类、引用和对象吗 我所知道的是,类更像是对象的模板(房子的蓝图,其中类是蓝图,房子是对象)。当您编写代码时,您会构建一个 实例(发生、复制) 属于 反对 一个说 阶级 并保持 参考文献 对其进行调用,以便可以调用其方法 还有一些基础知识:,,和。类是一个模板,您是

我已经为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术语实例化的房子)都是一个对象,也称为实例
  • 当然,每家每户都有一个地址。如果你想告诉某人房子在哪里,你可以给他们一张写有地址的卡片。该卡是对象的参考
  • 如果你想参观这所房子,你要看卡片上写的地址。这称为取消引用
你可以随心所欲地复制参考资料,但只有一所房子——你只是复制上面有地址的卡片,而不是房子本身

在Java中,您不能直接访问对象,只能使用引用。Java不会相互复制或分配对象。但是您可以复制和分配变量的引用,以便它们引用相同的对象。Java方法总是按值传递,但值可以是对象的引用。因此,如果我有:

Foo myFoo = new Foo();     // 1
callBar(myFoo);            // 2
myFoo.doSomething()        // 4

void callBar(Foo foo) {
    foo = new Foo();       // 3
}
那么让我们看看发生了什么

  • 在第1行中发生了一些事情
    newfoo()
    告诉JVM使用
    Foo
    蓝图建造一座新房子。JVM执行此操作,并返回对房屋的引用。然后将此引用复制到
    myFoo
    。这基本上就像让承包商给你盖房子一样。他知道了,然后告诉你房子的地址;你把这个地址写下来
  • 在第2行中,您将此地址提供给另一个方法,
    callBar
    。接下来让我们跳到那个方法
  • 在这里,我们有一个参考
    Foo-Foo
    。Java是按值传递的,因此
    callBar
    中的
    foo
    myFoo
    引用的副本。想象一下,这就像给
    callBar
    一张自己的卡片,上面写着房子的地址。
    callBar
    对这张卡有什么作用?它要求建造一座新房子,然后用你给它的卡片写下新房子的地址。请注意,
    callBar
    现在无法到达第一栋房子(我们在第1行中建造的那栋房子),但那栋房子没有改变,因为一张卡片上曾经有它的地址,现在上面有其他房子的地址
  • 回到第一个方法中,我们取消引用
    myFoo
    ,对其调用一个方法(
    doSomething()
    )。这就像看着卡片,去卡片上地址的房子,然后在房子里做一些事情。请注意,
    myFoo
    卡的地址通过
    callBar
    方法保持不变——请记住,我们给了
    callBar
    一份参考资料
  • 整个过程大致如下:

  • 请你盖一所房子。是的,它给了我们地址。我们将此地址复制到名为
    myFoo
    的卡上
  • 我们调用
    callBar
    。在此之前,我们将写在
    myfoo
    上的地址复制到一张新卡上,并将其交给
    callBar
    。它称那张卡为foo
  • callBar
    向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;