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

2021年3月30日15:57:07 发表评论 1,432 次浏览

当您在java中声明一个类时,您只是在创建一个新的数据类型。类为对象提供蓝图。您可以从类中创建对象。然而,获取类的对象需要两个步骤:

声明:首先,必须声明一个类类型的变量。这个变量没有定义对象。相反,它只是一个可以引用对象的变量。下面是声明的一般语法和一个示例:

Syntax :
class-name var-name;

Example :
// declare reference to an object of class Box
Box mybox;

处于这种状态的变量当前不引用任何对象, 可以如下所示(变量名称mybox加上指向无内容的引用):

Java中如何使用new运算符?代码示例1

实例化和初始化:其次,您必须获得对象的实际、物理副本,并将其赋值给该变量。您可以使用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运算符?代码示例2

因此, 可以一起说明类变量的声明, 类的实例化和类的对象的初始化:

Java中如何使用new运算符?代码示例3

重要事项:

  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运算符?代码示例4

注意 :虽然b1和b2两者都引用同一个对象, 因此没有其他任何链接。例如, 后续分配给b1只会脱钩 b1从原始对象开始, 而不影响对象或影响b2。例如 :

Box b1 = new Box();
Box b2 = b1;
// ...
b1 = null;

这里, b1已设置为null, 但是b2仍然指向原始对象。

将对象引用变量传递给方法

当我们将对象引用传递给方法时, 接收该方法的参数将引用与参数所引用的对象相同的对象。要了解更多有关示例的信息, 请参阅Java中的传递和返回对象。

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: