流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:68,599 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

Java之反射(未完)

Java l, xy 504℃ 0评论

  1. 反射的概念(理解)

反射 (Reflection)  Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。

  1. 反射的好处

(1)      可以运行期间动态的访问类的成员,是java动态语言的基础

(2)      可以访问一些私有的成员

  1. Class

(1)      特点:

1           java.lang包下的类

2           一般不需要使用new的方式创建对象(没有共有的构造方法),而是在加载类的时候JVM自动创建类对应的Class对象

3           每一个类型的类对象Class对象在内存中只存在一份(在方法区),因为类只会被加载一次。

4           通过class类可以获取类中的成员(属性、方法、构造器、泛型、接口、注解等信息)

(2)      常用方法

1           获取

1)         获取:

  1. public String getName() : 获取全类名
  2. public String getSimpleName() : 获取类名
  3. public ClassLoader getClassLoader()  获取加载该类类加载器
  4. public native Class<?> getComponentType():获取数组的元素类型,如果不是数组返回null
  5. public native int getModifiers() : 获取类修饰符
  6. public native Object[] getSigners() : 获取类的签名,如果该类没有签名返回null,或者class为基本类型、void时也返回null
  7. public String getTypeName() : 返回类的全类名(包名 +类名)
  8. public String getCanonicalName() :获取class的权威名称,如果class为匿名类或者本地类、或者数组的元素类型没有权威名称的,则返回null

2)         获取属性

  1. public Field[] getFields():获取父类以及本类中所用的公有属性
  2. public Field getField(String name) : 获取父类以及本类中指定的name公有属性
  3. public Field[] getDeclaredFields() :获取本类中所有的属性(publicprivateprotected 默认修饰符)
  4. public Field getDeclaredField(String name) : 获取本类中指定name的属性

3)         获取方法

  1. public Method[] getMethods()
  2. public Method getMethod(String name,Class<?> ... parameterTypes)
  3. public Method getDeclaredMethods()
  4. public Method getDeclaredMethod(String name,Class<?> ... paramterTypes)

4)         获取构造器

  1. public Construtor<?>[] getConstructor()
  2. public Constructor<T> getConstructor(Class<?> ... parameterTypes)
  3. public Constructor<?>[] getDeclaredConstructors()
  4. public Constructor<T> getDeclaredConstructor(Class<?> ... parameterTypes)
  5.  

5)         获取内部类

  1. public Class<?>[] getClassess() : 获取类中的公有的内部类(包括成父类继承过来的),如果类为数组、基本类型、void、没有公共的成员,返回Class<?>[] 长度为0
  2. public Class<?> getDeclaringClass() : 获取内部所有的内部类(包括private、默认、protectedpublic修饰的)
  3. public Class<?> getDeclaredClass() :

6)         获取外部类信息

  1. public Method getEnclosingMethod() : 获取包裹这该类(class)的方法
  2. public Constructor<?> getEnclosingConstructor() : 获取包裹着该类(class)的构造方法
  3. public Class<?> getEnclosingClass() :获取包括着该类(class)的外部类

 

7)         获取泛型

8)         获取接口

  1. public class<?>[] getInterfaces() 
  2. public Type[] getGenericInterfaces() :

 

9)         获取注解

a)         public <A extends Annotation> A getAnnotation(Class<A> annotationClass )

b)        public <A extends Annotation> A[]  getAnnotationByType(Class<A> annotation)

c)         public Annotaion[] getAnnotations()

d)        public <A extends Annotataion> A getDeclaredAnnotation(Class<A> annotationClass )

e)         public <A extends Annotaion> A[] getDeclaredAnnotaionByType(Class<A> annotationClass)

f)          public Annotation[] getDeclaredAnnotations()

g)         public AnnotationType getAnnotedSuperclass()

h)        public AnotatedType[]  getAnnotatedInterfaces()

i)            

10)     获取包

  1. public Package getPackage(

11)     获取枚举

  1. public T[] getEnumConstants()  获取枚举常量

12)     获取父类

  1. public native Class<? super T> getSuperClass() : 获取父类的class(不带泛型)
  2. public Type getGenericSuperclass() : 获取父类(待泛型

2           判断

1)         public native boolean isInstance(Object obj判断传入对象obj是否是改Class的实例,相当于 instanceOf判断

2)         public native boolean isAssignableFrom(Class<?> cls) : 判断指定的class对象(cls)是否是改class对象的本身、子类、实现类等,如果cls为基本类型的class,则只用改class对象为基本类型本身的class类型是才会返true

3)         public native boolean isInterface() : 判断该class类型是否是接口类型

4)         public native boolean isArray()  判断该class类型是否是数组类型

5)         public native boolean isPrimitive() : 是否是基本类型,不包括基本类型的包装类型

6)         public native boolean isAnnotation() 判断是否是注解类型,如果返回true,那么调用isInterface也会返回true,因为注解本身解释接口类型

7)         public boolean isSynthetic() : 判断是否是综合类(不知道什么时候使用?)

8)         public boolean isAnonymousClass() :判断class是否为匿名类

9)         public boolean isLocalClass():判断是否为本地类

10)     public boolean isMemberClass() :判断class是否在成员的位置上(成员内部类)

11)     public boolean isEnum() : 判读是否为枚举类

12)     public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)

13)     public boolean desiredAssertionStatus() : 获取断言状态

3           加载类

1)         public static Class<?> forName(String name) : 加载并初始化类,相当于调用下面forName(name,true,this.getClass().getClassLoader()),使用

2)         public static Class<?forName(String name,boolean initialize,ClassLoader loader) 使用指定的类加载器加载类,initializetrue时,初始化类,false的时候不初始化类

4           创建对象

1)         pubilc T newInstance() 调用class的无参构造创建对象

5           转换

1)         public <U> Class<? extends U> asSubClass(Class<U> clazz) : 转换为父类型

2)         public T cast(Object obj) : Object转换为T类型

6           获取资源

1)         public InputStream getResourceAsStream(String name)

2)         public URL getResource(String name)

 

 

  1. Field

(1)      特点:

1           对属性的一种抽象

2           可以设置、获取属性值,获取属性修饰符、属性类型等

(2)      常用方法

1           获取类型

1)         public Class<?> getType()

2)         public Type getGenericType() : 获取带有泛型的类型,如果属性没有泛型,则方法getType()             

2           获取修饰符

1)         public int getModifiers() : 获取修饰符

3           获取属性名

1)         public String getName() :获取属性名

4           获取属性值

1)         public Object get(Object obj)

2)         public boolean getBoolean(Object obj);

3)         public byte getByte(Object obj)

4)         public char getChar(Object obj)

5)         public short getShort(Object obj)

6)         public int getInt(Object obj)

7)         public long getLont(Object obj)

8)         public float getFloat(Object obj)

9)         public double getDouble(Object obj)

5           设置属性值

1)         public void set(Object obj,Object value)

2)         public void setBoolean(Object obj,boolean value)

3)         public void setByte(Object obj,byte value)

4)         public void setChar(Object obj,char value)

5)         public void setShort(Object obj,short value)

6)         public void setInt(Object obj,int value)

7)         public void setLong(Object obj,long value)

8)         public void setFloat(Object obj,float value)

9)         public void setDouble(Object obj,double value)

 

 

 

6           获取注解信息

1)         public <T extends Annotation> T getAnnotaion(Class<T> annotationClass)

2)         public <T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass )

3)         public Annotation[]  getDeclaredAnnotations()

4)         public AnnotationType getAnnotationType()

7           判断

1)         public boolean isEnumConstant()

2)         public boolean isSynthetic()

8           不常用获取

1)         public Class<?> getDeclaringClass() : 获取该属性是在哪个类中声明的(获取哪个class获取的该属性)

2)         public String toGenericString() : 获取该属性的全部声明

  1. Method

(1)      继承了Executable接口

1           特点:

1)         代表了功能方法的父类(一般只方法或者构造方法)

2           接口中常用方法

1)         public abstract Class<?> getDeclaringClass() : 获取该方法在哪个类中声明的

2)         public abstract String getName(): 获取方法的名称

3)         public abstract int getModifiers() :获取方法的修饰符

4)          

(2)      特点

1           代表对方法的抽象

(3)      常用方法

1           获取返回值

2           获取修饰符

3           获取方法名

4           获取参数列表

5           获取注解

6           获取泛型

7           调用方法

 

  1. Constructor (未写完。。。)

(1)      特点

(2)      常用方法


转载请注明:流年似水 » Java之反射(未完)

喜欢 (0)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址