Aru*_*run 9 java xml new-operator objectinstantiation
在一次java访谈中,提出以下问题:
在java中有没有一种方法来实例化一个对象而不使用new
运算符?我回答他说没有其他的实例化方法.但他问我如何使用java中的xml
文件(在spring框架中)中的java 配置实例化java中的对象.我说,内部弹簧用于reflection utils
创建一个带有new
操作符的对象.但面试官并不相信我的回答.
我看到这个链接很有用但是有一个new
操作员间接参与了一个或另一个内部方法.
有没有办法在不使用new
运算符的情况下在java中实例化对象?
san*_*hat 10
您可以使用Java Reflection API执行此操作.这就是Spring框架的DI工作原理(从xml实例化对象).
Class<YourClass> c = YourClass.class;
YourClass instance = c.newInstance();
Run Code Online (Sandbox Code Playgroud)
另外,考虑enum
到a special class
,枚举的实例是在不使用new
Operator 的情况下创建的.
public enum YourEnum { X, Y }
Run Code Online (Sandbox Code Playgroud)
以下形式的数组初始值设定项未new
明确使用.
int ia[][] = { {1, 2}, null };
Run Code Online (Sandbox Code Playgroud)
这通过自动装箱创建了一个对象:
Integer big = 9999;
Run Code Online (Sandbox Code Playgroud)
最后,以下结果是在程序生命周期的某处创建对象:-)
Class c = ThisClass.class;
String s = "a literal";
enum SomeEnum { WON, CHEW, TREE }
Run Code Online (Sandbox Code Playgroud)
(使用库方法或本机代码有许多方法可以做到这一点)
在封面下,纯Java中任何新对象的创建都涉及new
字节码或3个new array
字节码之一.这可能包括我的所有例子.
有趣的是,Object.clone()
和 ObjectInputStream.readObject()
两个用于创建不涉及上述字节码,并且不叫构造以正常方式实例"神奇"的机制.
归档时间: |
|
查看次数: |
23334 次 |
最近记录: |