newInstance()获取类实例对象
实例:
public class ReflexTest {
public static void main(String[] args){
Class<U> uClass = U.class;
try {
U u = uClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
class U{
}
结果:
运行正常!
实例:
public class ReflexTest {
public static void main(String[] args){
Class<U> uClass = U.class;
try {
U u = uClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
class U{
private U() {
}
}
结果:
java.lang.IllegalAccessException: Class ReflexTest can not access a member of class U with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
at java.lang.Class.newInstance(Class.java:436)
at ReflexTest.main(ReflexTest.java:8)
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:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
实例:
public class ReflexTest {
public static void main(String[] args){
Class<U> uClass = U.class;
try {
U u = uClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
abstract class U{
}
结果:
java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at ReflexTest.main(ReflexTest.java:8)
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:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
实例:
public class ReflexTest {
public static void main(String[] args){
Class<U> uClass = U.class;
try {
U u = uClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
interface U{
}
结果:
java.lang.InstantiationException: U
at java.lang.Class.newInstance(Class.java:427)
at ReflexTest.main(ReflexTest.java:8)
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:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.lang.NoSuchMethodException: U.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
... 6 more
总结:
得到类对象后可以通过newInstance()获取该类的实例对象(默认构造函数私有,抽象类,接口的是无法通过该方法获取实例)
实例:
public class ReflexTest {
public static void main(String[] args){
Class<U> uClass = U.class;
for (Annotation annotation : uClass.getAnnotations()) {
System.out.println(annotation.toString());
}
}
}
@testAnnotation
@Deprecated
class U{
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface testAnnotation{
int value() default -1;
}
结果:
@testAnnotation(value=-1)
@java.lang.Deprecated()
总结:
对于指定了生命周期为运行环境的注解总是可以通过getAnnotations()获得到他们的集合
isAnnotationPresent(xxx.class)
总结:
该方法用来查看(类,方法,参数,成员变量)是否被打上了对应的注解