码迷,mamicode.com
首页 > 其他好文 > 详细

Class_2

时间:2020-06-02 18:56:54      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:util   inter   modifier   parameter   field   invoke   super   类型   etc   

反射
1.在运行期间,动态获取某个类的详细信息
2.在运行期间,动态创建任意类型的对象
3.在运行期间,动态的为对象赋值
4.在运行期间,动态的调用对象的任意方法


1.在运行期间,动态获取某个类的详细信息
步骤:
1.获取某个对象的Class对象
2.使用Class对象和java.lang.reflect包下面的其他类型的API


Class中的API:
1.包:package getPackage()
2.类的修饰符:int getModifiers()
3.类名:getName()
4.父类:getSuperclass()
5.接口:getInterfaces()
6.属性:Field[] getFields():该类及其所有超类的公共字段
Field[] getFields(String name)
Field[] getDeclaredFields() 该类的字段
Field[] getDeclaredFields(String name)
7.构造器:Construct<?> getConstructors()
Construct<?> getConstructors(Class<?> ... parameterTypes)
Construct<?> getDeclaredConstructors()
Construct<?> getDeclaredConstructors(Class<?> ... parameterTypes)
8.方法:Method[] getMethods()
Method[] getMethods(String name,Class<?> ... parameterTypes)
Method[] getDeclaredMethods()
Method[] getDeclaredMethods(String name,Class<?> ... parameterTypes)

java.lang.reflect包
(1)package类型
包名:getName()
(2)Modifier类型
(3)Field类型
【修饰符】 数据类型 属性名
set/get值

属性名:getName()
属性修饰符:getModifiers()
属性类型:getType()
(4)Constructor类型
【修饰符】 构造器名(形参列表){}
构造器名:getName()
构造器修饰符:getModifiers()
构造器形参列表:getParameterTypes()
(5)Method类型
【修饰符】返回值类型 方法名 (【形参列表】) throws 异常列表{}
被调用invoke

方法名:getName()
方法修饰符:getModifiers()
方法形参列表:getParameterTypes()
方法返回值类型:getReturnType()

package test04;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import org.junit.Test;

/*
 反射
1.在运行期间,动态获取某个类的详细信息
2.在运行期间,动态创建任意类型的对象
3.在运行期间,动态的为对象赋值
4.在运行期间,动态的调用对象的任意方法


1.在运行期间,动态获取某个类的详细信息
步骤:
1.获取某个对象的Class对象
2.使用Class对象和java.lang.reflect包下面的其他类型的API


Class中的API:
1.包:package getPackage()
2.类的修饰符:int getModifiers()
3.类名:getName()
4.父类:getSuperclass()
5.接口:getInterfaces()
6.属性:Field[] getFields():该类及其所有超类的公共字段
      Field[] getFields(String name)
      Field[] getDeclaredFields() 该类的字段
      Field[] getDeclaredFields(String name)
7.构造器:Construct<?> getConstructors()
       Construct<?> getConstructors(Class<?> ... parameterTypes)
       Construct<?> getDeclaredConstructors()
       Construct<?> getDeclaredConstructors(Class<?> ... parameterTypes)
8.方法:Method[] getMethods()
      Method[] getMethods(String name,Class<?> ... parameterTypes)
      Method[] getDeclaredMethods()
      Method[] getDeclaredMethods(String name,Class<?> ... parameterTypes)
  

java.lang.reflect包
(1)package类型
包名:getName()
(2)Modifier类型
(3)Field类型
                 【修饰符】 数据类型 属性名
      set/get值
      
    属性名:getName()
    属性修饰符:getModifiers()
    属性类型:getType()
 (4)Constructor类型
                   【修饰符】 构造器名(形参列表){}
       构造器名:getName()
       构造器修饰符:getModifiers()            
       构造器形参列表:getParameterTypes()
 (5)Method类型
       【修饰符】返回值类型 方法名 (【形参列表】) throws 异常列表{}
     被调用invoke
     
       方法名:getName()
       方法修饰符:getModifiers()            
       方法形参列表:getParameterTypes()
      方法返回值类型:getReturnType()
*/

public class test02 {
    @Test
    public void test2() throws Exception{
        //1.获取Class对象
        Class<?> c= Class.forName("AtStudent.Student");
        
        //2.获取包信息
        Package pk = c.getPackage();
        System.out.println(pk.getName());//AtStudent
        
        //3.获取Class的修饰符
        int mod = c.getModifiers();
        System.out.println(mod);//1
        System.out.println(Modifier.toString(mod));//public
        
        //4.获取类名
        System.out.println(c.getName());//AtStudent.Student
        
        //5.获取父类
        Class<?> parent = c.getSuperclass();
        System.out.println(parent.getName());//java.util.Date
        
        //6.获取父接口
        Class<?>[] interfaces = c.getInterfaces();
        for(Class<?> inter:interfaces) {
            System.out.println(inter);//interface java.io.Serializable
        }
        
        System.out.println(); 
        
        //7.获取属性
        Field[] alldeclaredFields = c.getDeclaredFields();
        for(Field field:alldeclaredFields) {
            
            //属性名
            System.out.println(field.getName()); 
            
            //属性的修饰符
            int fmod = field.getModifiers();
            System.out.println(Modifier.toString(fmod));//public
            
            //属性的数据类型
            Class<?> ftype = field.getType();
            System.out.println(ftype.getName());
        }
        
        System.out.println(); 
        
        //8.获取构造器
        Constructor<?>[] alldeclaredConstructors = c.getDeclaredConstructors();
        for (Constructor<?> constructor:alldeclaredConstructors ) {
            
            
            //构造器名
            System.out.println(constructor.getName()); 
            
            //构造器的修饰符
            int cmod = constructor.getModifiers();
            System.out.println(Modifier.toString(cmod));
            
            //构造器的形参列表
            Class<?>[] parameterTypes = constructor.getParameterTypes();
            for(Class<?> pt: parameterTypes) {
                System.out.println(pt.getName());
                
            }
        }
        
        //9.方法
        Method[] alldeclaredMethods = c.getDeclaredMethods();
        for (Method method:alldeclaredMethods) {
            //方法名
            System.out.println(method.getName()); 
            
            //方法的修饰符
            int cmod = method.getModifiers();
            System.out.println(Modifier.toString(cmod));
            
            //方法返回值类型
            Class<?> returnType = method.getReturnType();
            System.out.println(returnType);
            
            //方法的形参列表
            Class<?>[] parameterTypes = method.getParameterTypes();
            for(Class<?> pt: parameterTypes) {
                System.out.println(pt.getName());
            
            
        }
    
        
        
        
        
    }

}

 

Class_2

标签:util   inter   modifier   parameter   field   invoke   super   类型   etc   

原文地址:https://www.cnblogs.com/hapyygril/p/13032748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!