区块链技术博客
www.b2bchain.cn

Java反射API

这篇文章主要介绍了Java反射API的讲解,通过具体代码实例进行23681 讲解,并且分析了Java反射API的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=23681

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

文章目录

  • 获取Class对象的三种方式
    • 通过反射创造实例对象的方式
    • 通过反射获取变量:
    • 通过反射获取类的方法
    • 访问私有属性或方法:

获取Class对象的三种方式

创建测试类和一个Person类:
反射API主要在java.lang.reflect包下和和Class对象中

package reflection;  public class Person {     private String name;     private String sex;     private String age;     public Person(String name){         this.name=name;     }     public  void sayhello(){         System.out.println("hello");     } }   package reflection;  public class feflectiontest {     public static void main(String[] args) throws Exception {      } } 

1.Class类的静态方法: public static Class ForName(String className)

Class p1=Class.forName("reflection.Person");         System.out.println(p1); 

使用类的完全限定名来反射对象的类,常见的应用场景为:在 JDBC 开发中常用此方法加载数据库驱动。
2.Object类的getclass()方法,所有的类都继承Object:

Person p2 = new Person("wang");         Class p1 = Class.forName("reflection.Person");         System.out.println(p1);         Class cp2 = p2.getClass();         System.out.println(cp2.getCanonicalName()); 

3.调用类的静态属性class:

 Person p2 = new Person("wang");         Class p1 = Class.forName("reflection.Person");         System.out.println(p1);         Class cp2 = p2.getClass();         System.out.println(cp2.getCanonicalName());         Class p3=Person.class;         System.out.println(p3);         System.out.println(p1==cp2&&cp2==p3); 

执行后,这三种方法获取的都是同一个类的class对象
Java反射API
判断对象是否为某个类的实例:
1.instanceof关键字
2.Class对象的instance方法(native方法)

Person p4=new Person("li");         //用instanceof关键字判断         System.out.println(p4 instanceof Person);//true          //用Class对象的isInstance方法         System.out.println(Person.class.isInstance(p4));//true 

通过反射创造实例对象的方式

1.通过Class对象的newInstance()方法
2.通过construor对象的newInstance()方法

//用Class对象的isInstance方法         System.out.println(Person.class.isInstance(p4));//true          //通过Class对象创建实例对象         Class c1=Person.class;         //此方法是调用的是无参构造,所以在Person类中必须要有无参构造         Person cp1=(Person) c1.newInstance();         System.out.println(cp1);//[email protected]          //通过constructor对象的newInstance方法         Class c2=Class.forName("reflection.Person");         //通过Class对象获取Constructor对象         Constructor constructor=c2.getConstructor();         Person person1=(Person) constructor.newInstance();         System.out.println(person1);//[email protected] 

通过反射获取变量:

1.getField()-根据名称获取公共的变量
2.getDeclaredFiled-根据名称获取以声明的变量
3.getFileds获取所有的公共变量
4.getDeclaredFileds-获取所有以声明的变量

//获取的是公共的变量,所以需要把Person类的变量修饰符改为public         Field f1=Person.class.getField("name");         System.out.println(f1);//public static java.lang.String reflection.Person.name         Field f2=Person.class.getDeclaredField("sex");         System.out.println(f2);//public java.lang.String reflection.Person.sex         Field[] field=Person.class.getFields();         for(Field f:field){             System.out.println(f.getName());         }//name,sex,age 

通过反射获取类的方法

1.getMethod(String name, Class<?>… parameterTypes) :返回指定的公共成员方法,第一个参数是方法名称,后面的参数是该方法参数对应的class对象
2.getMethids-返回所有的公共成员方法,包括父类和实现接口的
3.getDeclaredMethods-返回类声明的所有方法,包括私有的,但不包括继承的方法

 Method m1=Person.class.getMethod("sayhello");         System.out.println(m1);//public void reflection.Person.sayhello()                  //包含所有的public方法,包括父类的和接口的         Method[] methods=Person.class.getMethods();         for (Method method:methods){             System.out.println(method.getName());         }           //包含私有方法但不包括继承的         Method[] methods1=Person.class.getDeclaredMethods();         for (Method method:methods1){             System.out.println(method.getName());         } 

获得一个Method对象后,可以用invoke来调用这个方法

Method method1=System.class.getMethod("currentTimeMillis");         //方法是静态方法时,invoke的参数为null         System.out.println(method1.invoke(null));         Method method=Person.class.getMethod("code");         Person p1=Person.class.newInstance();         //否则必须传入一个对象来调用         method.invoke(p1); 

访问私有属性或方法:

 Field field=Person.class.getDeclaredField("age");         field.setAccessible(true);         System.out.println(field.getName()); 

本文转自互联网,侵权联系删除Java反射API

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Java反射API
分享到: 更多 (0)

评论 抢沙发

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

b2b链

联系我们联系我们