为什么在Java中实例化新对象时必须键入两次类名?
在Java中创建新对象时,我们使用以下语法:为什么在Java中实例化新对象时必须键入两次类名?,java,class,object,instantiation,Java,Class,Object,Instantiation,在Java中创建新对象时,我们使用以下语法: ClassName instancename = new ClassName(); 我的问题是为什么我们必须在开头键入类名?为什么没有“object”关键字 例如: object instancename = new ClassName(); 对象是所有java类的父类。当你第一次给班级打电话时 ClassName instancename 它为该变量名创建内存引用,但该引用尚未指向实际对象,因为它尚未在内存中创建。当你第二次叫它的时候 ins
ClassName instancename = new ClassName();
我的问题是为什么我们必须在开头键入类名?为什么没有“object”关键字
例如:
object instancename = new ClassName();
对象是所有java类的父类。当你第一次给班级打电话时
ClassName instancename
它为该变量名创建内存引用,但该引用尚未指向实际对象,因为它尚未在内存中创建。当你第二次叫它的时候
instancename = new ClassName();
它调用ClassName的默认构造函数,该构造函数分配内存并实际在内存中创建对象
在处理多个类时,更安全的做法是创建ClassName的实例,而不是对象。如果使用object来声明类,则通常必须频繁使用类型转换,以便代码能够编译,因为编译器将知道查看哪个类以找到相应类的方法。有许多新语言可以直观地显示所创建对象的类型。Java就是其中之一
new ArrayList<String> ()
或者-在Java7中更简洁
List<String> myList = new ArrayList<> ();
listmylist=newarraylist();
或
Iterable myList=newarraylist();
我的问题是为什么我们必须在开头键入类名?为什么没有“object”关键字
您正在做两件“事情”:创建一个可以保存类名的引用,以及创建类名的实例
许多语言可以从一个方面推断另一个方面,但是Java(默认情况下,请参阅)不能。从内存开始,最初是这样做的,以保持语言规范的简单 在左手边:
ClassName instancename
ClassName
正在声明变量instancename
的类型(=class)
在右边:
new ClassName();
ClassName()
正在调用名为ClassName()
的(构造函数)方法
所以,你同时在做两件事
ClassName instancename; // declaring type
instancename = new ClassName(); // invoking method
你的例子是:
ClassName instancename = new ClassName();
这只是两个指令的缩写形式
还有其他获取类实例的方式--newInstance()
或getInstance()
也就是说:类型声明和实例化方法是分开的。它们是出于各自的目的而需要的。有趣的是,objectinstancename=new Classname()代码>将编译:)那么在泛型对象类型上使用类名有什么好处呢?声明的类不必与实例化的类相同:List aList=new ArrayList()
。值得思考……因为Java是静态类型的。@LuiggiMendoza:这是部分原因,但不是全部原因。现在很多语言都有一些“auto”或“value”关键字,基本上是说“嘿,compile,你知道它的类型,别让我再写了”。Java没有理由不具备这种能力。你是说List是一个接口吗?是的,它是一个接口。但是接口不能实例化正确-List myList=new ArrayList()代码>注意使用新建ArrayList…
实例化列表
。
ClassName instancename; // declaring type
instancename = new ClassName(); // invoking method
ClassName instancename = new ClassName();