java反射中的newInstance的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java反射中的newInstance的使用相关的知识,希望对你有一定的参考价值。
代码如下
class A
private int i;
public void set(int i)
this.i=i;
public int get()
return this.i;
class Test01
public static void main(String args[])
Class c=null;
try
c=Class.forName("A");//创建了A类的Class对象
catch(ClassNotFoundException e)
System.out.println("ClassNotFoundException");
System.exit();
//利用A类的Class对象来创建A类的实例对象
Object obj=null;
try
obj=c.newInstance();//obj指向的A类的对象
catch(InstantiationException e)
System.out.println("InstantiationException");
catch(IllegalAccessException e)
System.out.println("IllegalAccessException");
//obj.set(10);
//System.out.println(obj.get());
obj=c.newInstance();求问obj指向的是哪里?newInstance返回的类型只能使用Object接收?
请教大神解答下,谢谢,中金酬谢
public static void main(String args[])
Class c = null;
try
c = Class.forName("A");// 创建了A类的Class对象
catch (ClassNotFoundException e)
System.out.println("ClassNotFoundException");
// 利用A类的Class对象来创建A类的实例对象
Object obj = null;
try
obj = c.newInstance();// obj指向的A类的对象
catch (InstantiationException e)
System.out.println("InstantiationException");
catch (IllegalAccessException e)
System.out.println("IllegalAccessException");
// obj.set(10); // 肯定不行的,Object咋会有这个方法呢?
// System.out.println(obj.get());
// 请这样,并且newInstance默认调用无参构造器,更多请google
A a = new A();
a.set(1);
System.out.println(a.get());
A aa;
try
aa = A.class.newInstance();
aa.set(2);
System.out.println(aa.get());
catch (InstantiationException e)
// TODO Auto-generated catch block
catch (IllegalAccessException e)
// TODO Auto-generated catch block
try
Class<?> Clazz = Class.forName("A");
A aaa = (A) Clazz.newInstance();
aaa.set(2);
System.out.println(aaa.get());
catch (ClassNotFoundException e)
// TODO Auto-generated catch block
catch (InstantiationException e)
// TODO Auto-generated catch block
catch (IllegalAccessException e)
// TODO Auto-generated catch block
参考技术A 其实类就是一个对象么。object就是对象的意思。
object就是泛指所有的类,而我们常用的 A a = new A();这种写法就是具体化了。其实也可以写成Object ojb = new A();
newIntance()就是对象的实例化,返回的一个对象,如果知道具体对象的时很么的话,也可以直接用该对象来接受 A a = c.newInstance()追问
我也是这么认为的,但是为什么不能用obj访问我的get、set方法
参考技术B Object obj=Class.forName("A").newInstance();这个obj就是A类的一个实例。 参考技术C class Test01
public static void main(String args[])
Class c = null;
try
c = Class.forName("A");// 创建了A类的Class对象
catch (ClassNotFoundException e)
System.out.println("ClassNotFoundException");
// 利用A类的Class对象来创建A类的实例对象
Object obj = null;
try
obj = c.newInstance();// obj指向的A类的对象
catch (InstantiationException e)
System.out.println("InstantiationException");
catch (IllegalAccessException e)
System.out.println("IllegalAccessException");
// obj.set(10); // 肯定不行的,Object咋会有这个方法呢?
// System.out.println(obj.get());
// 请这样,并且newInstance默认调用无参构造器,更多请google
A a = new A();
a.set(1);
System.out.println(a.get());
A aa;
try
aa = A.class.newInstance();
aa.set(2);
System.out.println(aa.get());
catch (InstantiationException e)
// TODO Auto-generated catch block
catch (IllegalAccessException e)
// TODO Auto-generated catch block
try
Class<?> Clazz = Class.forName("A");
A aaa = (A) Clazz.newInstance();
aaa.set(2);
System.out.println(aaa.get());
catch (ClassNotFoundException e)
// TODO Auto-generated catch block
catch (InstantiationException e)
// TODO Auto-generated catch block
catch (IllegalAccessException e)
// TODO Auto-generated catch block
反射异常 java.lang.InstantiationException处理
查看这个InstantiationException:异常的api所说的是:
当应用程序试图使用 Class
类中的 newInstance
方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常。实例化失败有很多原因,包括但不仅限于以下原因:
- 类对象表示一个抽象类、接口、数组类、基本类型、
void
- 类没有非 null 构造方法
是使用反射的时候编写使用class实例化其他类的对象的时候,一定要自己定义无参的构造方法。。。
注意了,被反射的类显式的给出无参的构造方法。
以上是关于java反射中的newInstance的使用的主要内容,如果未能解决你的问题,请参考以下文章