java中new的作用

Point originOne = new Point(23, 94);
1、声明Declaration:粗体代码是将变量名称与对象类型关联的变量声明。

2、实例化Instantiating :new关键字是一个java运算符,它用来创建对象。

3、初始化Initialization:new运算符,随后调用构造函数,初始化新创建的对象。
1、声明一个变量来指向一个对象,即引用

在此之前,你知道,要声明一个变量,你需要写:

 type name;

这将告诉编译器你将使用name引用一个type类型的对象。用一个原始变量,这个声明也保留了适当的内存量的变量。

你也可以在自己的行上声明一个引用变量。例如:

Point  originone;

如果你只是声明一个像originone这样的引用变量,其价值将待定,直到有一个对象真正被创造和分配给它。只是简单地声明一个引用变量而并没有创建一个对象。对于这样,你需要使用new运算符。在你的代码中使用它之前,你必须指定一个对象给originone。否则,你会得到一个编译器错误-----空指针异常。

处于这种状态的变量,目前没有引用任何的对象,可以说明如下(变量名,originone,一个引用没指向任何对象)。

2、实例化一个类对象

new运算符实例化一个类对象,通过给这个对象分配内存并返回一个指向该内存的引用。new运算符也调用了对象的构造函数。

注意:“实例化一个类的对象”的意思就是“创建对象”。创建对象时,你正在创造一个类的“实例”,因而“实例化”一个类的对象。

new运算符需要一个单一的,后缀参数,需要调用构造函数。构造函数的名称提供了需要实例化类的名称。

new运算符返回它所创建的对象的引用。此引用通常被分配给一个合适的类型的变量,如:Point originone =new Point(23,94);

由new运算符返回的引用可以不需要被赋值给变量。它也可以直接使用在一个表达式中。例如: int height = new Rectangle().height;
3、初始化一个类对象

这是Point类的代码

public class Point {
      public int x = 0;
      public int y = 0;
      //constructor
      public Point(int a, int b) {
         x = a;
         y = b;
      }
}

这个类包含一个单一的构造函数。你可以识别一个构造函数,因为它的声明使用与类具有相同的名称,它没有返回类型。

Q:Map map=new HashMap() 的类名和构造函数的名字为什么不一样?

答:不能写成Map map = new Map()是因为:Map是接口,hashMap是Map的一种实现。接口不能被实例化,只能使用其实现类来实例化,而Map map=new Map()是错误的

在Java中 Map map = new HashMap()为什么不写成HashMap map = new HashMap()呢?

这是出于代码的维护性来考虑。

对于:Map map = new HashMap()是定义了一个接口,我们直接调用这个接口就可以完成我们想要的动作,别人在使用时调用此接口便可以,而不用管内部实现逻辑。以后如果有变动,不用管这个接口,只需要修改实现这个接口的类即可。

而对于 :HashMap map = new HashMap()我们定义的就是一个实现类,把这个类给别人用,在出现问题和改动的话,那么程序就无法运行,凡是用到这个类的地方都要修改,维护起来很麻烦,而上面的接口,你只需要改你实现这个接口的实现类就可以了

发布了19 篇原创文章 · 获赞 2 · 访问量 1248

猜你喜欢

转载自blog.csdn.net/weixin_38377637/article/details/99622762