public class TestObjectArgs {
/**
* @param args
*/
public static void main(String[] args) {
new TestObjectArgs("aa","bb","cc");
}
public TestObjectArgs(Object... args){
System.out.println("Object...");
for(Object arg:args){
System.out.println(arg);
}
}
public TestObjectArgs(String arg1, Object... args){
System.out.println("String, Object...");
for(Object obj:args){
System.out.println(obj);
}
}
}
对于new TestObjectArgs("aa","bb","cc"), 猜一猜是TestObjectArgs(Object... args)还是TestObjectArgs(String arg1, Object... args)被执行。
答案是TestObjectArgs(String arg1, Object... args)
**************************
下面转关于object... args 的用法
可变参数(Varargs)
可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是
函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象,
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
…
在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得
不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) {
for (Object obj: objs)
System.out.println(obj);
}
在引入可变参数以后,Java的反射包也更加方便使用了。对于
c.getMethod("test", new Object[0]).invoke(c.newInstance(), new Object[0])),现在我们可以这样写了
c.getMethod("test").invoke(c.newInstance()),这样的代码比原来清楚了很多。