关于使用new
关键字创建对象的语法。我知道创建对象的语法是:
Foo ref = new Foo();
java语言本身是否提供了一些机制,可以创建除上述标准语法之外的对象?
我知道Scala具有这样的功能,或者可能是其他一些JVM兼容的语言,但我想从核心java的角度来看。
不使用关键字'new'和赋值operatior'='。例如,它可以像Foo ref Create()。 ?现在我想开发'Create'方法来取代传统语法。
答案 0 :(得分:4)
另一种创建对象的方法是通过反射:
Foo ref = Foo.class.newInstance()
答案 1 :(得分:2)
以下是您要找的内容:
在Java中创建对象的不同方法
这是一个琐事。是的,这是一个棘手的问题,人们常常感到困惑。我经常搜索以清除所有疑虑。
在java中创建对象有四种不同的方式(我真的不知道有没有第五种方法):
- 使用新关键字 这是在java中创建对象的最常用方法。我在某处读到,几乎99%的对象都是以这种方式创建的。
醇>MyObject object = new MyObject();
- 使用Class.forName() 如果我们知道班级的名称&如果它有一个公共默认构造函数,我们可以用这种方式创建一个对象。
醇>MyObject object =(MyObject)Class.forName(“subin.rnd.MyObject”)。newInstance();
- 使用clone() clone()可用于创建现有对象的副本。
醇>MyObject anotherObject = new MyObject(); MyObject对象= anotherObject.clone();
- 使用对象反序列化 对象反序列化只不过是从序列化形式创建对象。
醇>ObjectInputStream inStream = new ObjectInputStream(anInputStream); MyObject object =(MyObject)inStream.readObject();
现在您知道如何创建对象了。但它建议只在必要时才创建对象。
来源:http://javabeanz.wordpress.com/2007/09/13/different-ways-to-create-objects/
P.S:我从帖子中复制了文本,因此即使链接断开也可以看到它。
我希望这会有所帮助。
答案 2 :(得分:0)
Class.newInstance()
使用反射API,例如
Foo ref = Foo.class.newInstance();
请阅读Class API上的doc。转到Spring Dependency injection,它会对你有帮助。
这page可以给你一个良好的开端
答案 3 :(得分:0)
您可以通过在班级上创建静态工厂方法来避免在大多数代码中使用new
运算符:
class Foo
{
public static Foo create()
{
return new Foo();
}
}
然后实例化看起来像这样:
Foo f = Foo.create();
这不是更简洁,但它确实有几个优点,如Effective Java的第1部分所详述:它允许类型推断泛型类型(Map<String,String> m = Maps.newHashMap();
而不是Map<String,String> m = new HashMap<String,String>();
),并允许你将方法改为例如记住对象而不是在每次调用时创建一个新对象。