corejava_反射

Posted 赤叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了corejava_反射相关的知识,希望对你有一定的参考价值。

反射

类对象 Class类的对象

----------------------------------------

//打印className这个类中所有公开方法

static void printMethods(String classsName) throws Exception{

  Class c = Class.forName(className);

  Method[] ms = c.getMethods();

  for(Method m:ms){

    System.out.println(m.getName());

  }

}

//根据类名 创建对象

static Object createObject(String className) throws Exception(

  Class c = Class.forName(className);

  return c.newInstance();

)

//根据方法名 调用方法

static Object methodInvoke(Object o,String methodName) throws Exception{

  Class c = o.getClass();

  Method m = c.getMethod(methodName);

  return m.invoke(o);

}

-------------------------------------------

获得类对象的引用,三种

1)Class c1 = HashMap.class;

2)Object o = new HashMap();

  Class c2 = o.getClass();

3)String className = "java.util.HashMap";  //类名写全名,包不能省

  Class c3 = Class.forName(className);

-------------------------------------------

java.long.reflect

Field  封装属性信息属性对象

Method  封装一个方法的信息

  getMethods():返回类中所有公开方法,包括父类方法

  getDeclaredMethods():返回本类中所有方法,包括非公开方法

Constructor  封装构造方法

-------------------------------------------

c.getName()  //类名

c.getSimpleName()  //简单类名

c.getSuperclasss().getName()  //父类

Class[] cs = c.getInterfaces();

for(Class ic : cs){System.out.println(ic.getName());}  //接口

 ---------------------------------------------

用 类对象 创建 类的对象

Class c = Class.forName("chp15.Student");  //Student o = new Student();

Object o = c.newInstance();          //

---------------------------------------------

通过反射调方法

1方法对象找出来  Method m1 = c.getDeclaredMethod("study");  //o.study();

2对方法对象调方法  m1.invoke(o);  //对引用o调用无参的study方法 // 

Method m2 = c.getDeclaredMethod("study",String.class);  //o.study(corejava);

m2.invoke(o,"corejava");                  //

-----------------------------------------------

反射 绕开封装,访问私有方法

Method m1 = c.getDeclaredMethod("study");

m1.setAccessible(true);

m1.invoke(o);

以上是关于corejava_反射的主要内容,如果未能解决你的问题,请参考以下文章

COREJAVA核心概述-反射

COREJAVA核心概述-反射

COREJAVA核心概述-反射

CoreJava_线程并发(堵塞队列):在某个目录下搜索含有某keyword的文件

CoreJavaE10V1P3.3 第3章 Java的基本编程结构-3.3 数据类型

corejava