layout: post
title: Java 反射
date: 2015-10-20
categories: blog
tags: [Java,反射]
category: Java
description: 本文简单的介绍java下的反射调用
在解析json成Bean对象的时候经常使用反射与注解
今天在写的过程中遇到一个小的错误
public class Test {
public class InnerClass{
//.....
}
}
在实例化InnerClass的时候是通过反射
try {
Class cls = Class.forName("Test$InnerClass");
Test.InnerClass instance = (Test.InnerClass) cls.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
然后就报了错误
java.lang.InstantiationException: Test$InnerClass
at java.lang.Class.newInstance(Class.java:418)
at Main.main(Main.java:5)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.lang.NoSuchMethodException: Test$InnerClass.<init>()
at java.lang.Class.getConstructor0(Class.java:2971)
at java.lang.Class.newInstance(Class.java:403)
... 6 more
因为非静态内部类的实例化必须是在外部类的基础之上
Test t = new Test();
Test.InnerClass innerClass = t.new InnerClass();
在没有外部类的实例的情况下是没办法实例化内部类的,如想直接实例化内部类就把内部类改为静态内部类