Java中如何使用new运算符(代码示例)

当您在java中声明一个类时,您只是在创建一个新的数据类型。类为对象提供蓝图。您可以从类中创建对象。然而,获取类的对象需要两个步骤:
声明:首先,必须声明一个类类型的变量。这个变量没有定义对象。相反,它只是一个可以引用对象的变量。下面是声明的一般语法和一个示例:

Syntax : class-name var-name; Example : // declare reference to an object of class Box Box mybox;

处于这种状态的变量当前不引用任何对象, 可以如下所示(变量名称mybox加上指向无内容的引用):
Java中如何使用new运算符(代码示例)

文章图片
实例化和初始化:其次,您必须获得对象的实际、物理副本,并将其赋值给该变量。您可以使用new操作符来实现这一点。new操作符通过动态分配(i。e,在运行时分配)新对象的内存,并返回对该内存的引用。然后,这个引用被存储在变量中。因此,在Java中,所有类对象都必须动态分配。
在new操作符之后还有对类构造函数的调用,用于初始化新对象。构造函数定义了创建类的对象时发生的事情。构造函数是所有类的重要组成部分,具有许多重要的属性。。
在下面的例子中,我们将使用默认构造函数。下面是实例化和初始化的一般语法示例:
Syntax : var-name = new class-name(); Example : // instantiation via new operator and // initialization via default constructor of class Box mybox = new Box();

在理解new如何动态分配内存之前,让我们先来看看class Box prototype。
class Box { double width; double height; double depth; }

变量在第二步之后,当前引用的是一个类对象,如下所示(变量名mybox,加上一个指向Box对象的引用):
Java中如何使用new运算符(代码示例)

文章图片
因此, 可以一起说明类变量的声明, 类的实例化和类的对象的初始化:
Java中如何使用new运算符(代码示例)

文章图片
重要事项:
  1. 以上两个语句可以重写为一个语句。
    Box mybox = new Box();

  2. 引用返回的新运算符不必分配给类变量。也可以直接在表达式中使用。例如:
    double height = new Box().height;

  3. 以来数组是Java中的对象, 因此在实例化数组时, 我们使用新操作员。例如:
    int arr[] = new int[5];

  4. 此时, 你可能想知道为什么不需要使用新运算符基本数据类型。答案是Java的原始类型未实现为对象。相反, 它们被实现为"普通"变量。这样做是为了提高效率。有关原始数据类型的对象版本, 请参见包装类.
  5. 短语"实例化一个类"的含义与"创建对象"相同。创建对象时, 将创建类的"实例", 因此将"实例化"一个类。
分配对象参考变量
当将一个对象引用变量分配给另一对象引用变量时, 你不是在创建对象的副本, 而只是在创建引用的副本。让我们通过一个例子来理解这一点。
// Java program to demonstrate assigning // of object reference variables// Box class class Box { double width; double height; double depth; }// Driver class public class Test { // Driver method public static void main(String[] args) { // creating box object Box b1 = new Box(); // assigning b2 to b1 Box b2 = b1; // height via b1 and b2 System.out.println(b1.height); System.out.println(b2.height); // changing height via b2 b2.height = 20 ; // height via b1 and b2 // after modification through b2 System.out.println(b1.height); System.out.println(b2.height); }}

输出:
0.0 0.0 20.0 20.0

说明:
首先让我们了解上面程序中以下片段的作用。
Box b1 = new Box(); Box b2 = b1;

你可能会认为b2被分配了对所引用对象的副本的引用b1。也就是说, 你可能会认为b1和b2指的是独立的对象。但是, 这将是错误的。相反, 在执行此片段后, b1和b2都将引用同一个对象。的分配b1tob2没有分配任何内存或复制原始对象的任何部分。它只是使b2引用相同的对象b1。因此, 通过b2会影响到哪个对象b1是指, 因为它们是同一对象。当我们更改时可以通过输出验证相同高度盒装b2.
【Java中如何使用new运算符(代码示例)】这种情况可以说明如下:
Java中如何使用new运算符(代码示例)

文章图片
注意 :虽然b1和b2两者都引用同一个对象, 因此没有其他任何链接。例如, 后续分配给b1只会脱钩 b1从原始对象开始, 而不影响对象或影响b2。例如 :
Box b1 = new Box(); Box b2 = b1; // ... b1 = null;

这里, b1已设置为null, 但是b2仍然指向原始对象。
将对象引用变量传递给方法
当我们将对象引用传递给方法时, 接收该方法的参数将引用与参数所引用的对象相同的对象。要了解更多有关示例的信息, 请参阅Java中的传递和返回对象。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

    推荐阅读