• java反射机制(1)


     
     

    百度百科:

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

    java 本身不是动态语言,但是通过java中的反射机制能够获取java中类的属性,方法,和构造方法等。

    作用:方便开发。

     1 @Test
     2     public void testAllWays() {
     3         try {
     4             //1.类名获取类
     5             //Class<?> clazz=Class.forName("basic.reflect.Person");
     6             //2.通过对象获取类
     7             Class<?> clazz=new Person().getClass();
     8             //3.类获取
     9             //Class<? extends Object> clazz=Person.class;
    10             
    11             //获取类的所有属性,打印所有属性
    12             Field[] fields =clazz.getDeclaredFields();
    13             for(Field f:fields) {
    14                 System.out.println(f);
    15             }
    16             System.out.println("====================================");
    17             //获取类的所有方法
    18             Method[] methods=clazz.getDeclaredMethods();
    19             for(Method m:methods) {
    20                 System.out.println(m);
    21             }
    22             System.out.println("=======================================");
    23             //获取指定方法名的方法,方法中没有形参
    24             Method m=clazz.getDeclaredMethod("getName", new Class[] {});
    25             System.out.println(m);
    26             //方法中有形参,要在class数组中指定形参类型
    27             Method m1=clazz.getDeclaredMethod("setName", new Class[] {String.class});
    28             System.out.println(m1);
    29             //获取指定的属性
    30             Field field1=clazz.getDeclaredField("id");
    31             System.out.println(field1);
    32             
    33             
    34         } catch (NoSuchMethodException e) {
    35             // TODO Auto-generated catch block
    36             e.printStackTrace();
    37         } catch (SecurityException e) {
    38             // TODO Auto-generated catch block
    39             e.printStackTrace();
    40         } catch (NoSuchFieldException e) {
    41             // TODO Auto-generated catch block
    42             e.printStackTrace();
    43         }
    44         
    45     }
    46     
     
     1     /*
     2      * 获取并声明构造函数
     3      */
     4     @Test
     5     public void  testConstructor() {
     6         try {
     7             Class<?> clazz=Class.forName("basic.reflect.Person");
     8             //获取无参的构造函数
     9             Constructor<?> constructor=clazz.getConstructor(new Class[] {});
    10             System.out.println(constructor);
    11             //获取有参的构造函数 需要指定参数声明类型
    12             Constructor<?> constructor2=clazz.getConstructor(new Class[] {Integer.class,String.class,String.class});
    13             System.out.println(constructor2);
    14             
    15             //声明无参的构造函数
    16             Object instance=constructor.newInstance(new Object[]{});
    17             System.out.println(instance);
    18             
    19             //声明有参的构造函数
    20             Object instance1=constructor2.newInstance(new Object[] {1,"李四","北京"});
    21             System.out.println(instance1);
    22             
    23         } catch (ClassNotFoundException e) {
    24             // TODO Auto-generated catch block
    25             e.printStackTrace();
    26         } catch (NoSuchMethodException e) {
    27             // TODO Auto-generated catch block
    28             e.printStackTrace();
    29         } catch (SecurityException e) {
    30             // TODO Auto-generated catch block
    31             e.printStackTrace();
    32         } catch (InstantiationException e) {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         } catch (IllegalAccessException e) {
    36             // TODO Auto-generated catch block
    37             e.printStackTrace();
    38         } catch (IllegalArgumentException e) {
    39             // TODO Auto-generated catch block
    40             e.printStackTrace();
    41         } catch (InvocationTargetException e) {
    42             // TODO Auto-generated catch block
    43             e.printStackTrace();
    44         }
    45         
    46         
    47         
    48     }
  • 相关阅读:
    2019春第一次实验报告
    2019春第二次实验报告
    第十二周编程总结
    第十一周编程总结
    第十周作业
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
  • 原文地址:https://www.cnblogs.com/smallbrokenchildwen/p/7281924.html
Copyright © 2020-2023  润新知