java 基础 之反射

一、概念

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制

二、用途

在运行时判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判断任意一个类所具有的成员变量和方法

在运行时调用任意一个对象的方法

三、方法

1,获取Class 对象   Class.forName("Reflect.Demo");   new Demo().getClass();   Demo.class

2, newInstance():

   创建此 Class 对象所表示的类的一个新实例。

   会抛出  throws IllegalAccessException, InstantiationException。

  自己定义只定义一个有参数的构造函数之后,会出现错误 'java.lang.InstantiationException: ..'

所以大家以后再编写使用Class实例化其他类的对象的时候,一定要自己定义无参的构造函数

3,构造器  getConstructor(Class<?>... parameterTypes),getConstructors()

getDeclaredConstructor(Class<?>... parameterTypes),getDeclaredConstructors()

4,属性 getDeclaredField(String name)getDeclaredFields()

getDeclaredMethod(String name, Class<?>... parameterTypes)getDeclaredMethods()

getField(String name) getFields()

对私有属性赋值

  1.   Field field = demo.getDeclaredField("sex");  
  2.         field.setAccessible(true);  
  3.         field.set(obj, "男");  

5.方法 getMethod(String name, Class<?>... parameterTypes) getMethods() getDeclaredMethods()

getDeclaredMethod(String name, Class<?>... parameterTypes)

调用私有方法  setAccessible,然后 invoke(Object obj, Object... args)

6,注解 getAnnotation(Class<A> annotationClass) getAnnotations() isAnnotation()

isAnnotationPresent(Class<? extends Annotation> annotationClass)

7,其他

cast(Object obj)  将一个对象强制转换成此 Class 对象所表示的类或接口。

 getClassLoader()  返回该类的类加载器。

getComponentType()    返回表示数组组件类型的 Class

getEnumConstants()  如果此 Class 对象不表示枚举类型,则返回枚举类的元素或 null。

getModifiers()    返回此类或接口以整数编码的 Java 语言修饰符。

getPackage() 获取此类的包。

URL  getResource(String name)   查找带有给定名称的资源。

InputStream getResourceAsStream(String name)    查找具有给定名称的资源。

isInterface()   判定指定的 Class 对象是否表示一个接口类型。

isInstance(Object obj)   判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。

getSuperclass() 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class

8、通过反射修改数组大小 

  1.  public static Object arrayInc(Object obj,int len){  
  2.         Class<?>arr=obj.getClass().getComponentType();  
  3.         Object newArr=Array.newInstance(arr, len);  
  4.         int co=Array.getLength(obj);  
  5.         System.arraycopy(obj, 0, newArr, 0, co);  
  6.         return newArr;  
  7.     }  

猜你喜欢

转载自ldaolong.iteye.com/blog/2117597