public void printDemo() { System.out.println("invoke print no paramater"); //System.out.printf("congratulations %s1 !", "hello"); @SuppressWarnings("unchecked") static void getNowClass2() { ClassLoader cls = Thread.currentThread().getContextClassLoader(); // ClassLoader cls = this.getClass().getClassLoader(); try { Class t = (Class) cls.loadClass("test.ClassLoader.TestClassLoader"); // t.newInstance().printDemo(); Method[] declaredMethods = t.getDeclaredMethods(); System.out.println(declaredMethods); // 获得某个函数 Method method = t.getMethod("printDemo",int.class); method.setAccessible(true); method.invoke(t.newInstance(),100); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); @SuppressWarnings("unchecked") static void getNowClass1() { ClassLoader cls = Thread.currentThread().getContextClassLoader(); // ClassLoader cls = this.getClass().getClassLoader(); try { Class t = (Class) cls.loadClass("test.ClassLoader.TestClassLoader"); // t.newInstance().printDemo(); Method[] declaredMethods = t.getDeclaredMethods(); System.out.println(declaredMethods); // 获得某个函数 Method method = t.getMethod("printDemo", new Class[] { int.class }); method.setAccessible(true); method.invoke(t.newInstance(), new Object[] { new Integer(100) }); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); @SuppressWarnings("unchecked") static void getNowClass() { ClassLoader cls = Thread.currentThread().getContextClassLoader(); // ClassLoader cls = this.getClass().getClassLoader(); try { Class t = (Class) cls.loadClass("test.ClassLoader.TestClassLoader"); // t.newInstance().printDemo(); Method[] declaredMethods = t.getDeclaredMethods(); System.out.println(declaredMethods); // 获得某个函数 Method method = t.getMethod("printDemo"); method.setAccessible(true); method.invoke(t.newInstance()); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); package test.ClassLoader;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class TestClassLoader { public static void main(String a[]) { //测试一个参数的写法...
1 简述 反射 机制 反射 是一种间接操作目标对象的机制,在程序程序运行时获取或者设置对象自身的信息。 只要给定类的名字,就可以通过反 射获取类的所有信息,接着便能 调用 它的任何一个方法和属性。 反射 的步骤有哪些? 第一:获取类加载器:ClassLoader loader=Thread.currentThread().getContextClassLoader();//获取当 前线程的上下文类加载器 第二:通过类加载器获取类 Class clazz=loader.loadClass("com.taobao.reflect.car")//通过对象的全称限 定来获取对象。 第三:通过clazz获得构造函数:Constructors cons=clazz.getDeclaraedConstructors(Class[]null);//调 用默认的构造函数 第四:然后通过构造函数构造对象:Car car=(Car)cons.newInstance();//获取类的默认构造函数对象并实例化对 第五:得到car对象,然后 调用 car的方法: Method methd =car.get Method ("setName","String.class");// method 声明,并指向car的setName这个方法,得到setName方 2 用 反射 机制能干什么事 刚开始在使用jdbc时侯,在编写访问数据库时写到想吐,有八个表,每个表都有增删改查中操作,那时候还不知道有 反射 机制这个概念,所以就对不同的表创建不同的dao类,这样不仅开发速率慢,而且代码冗余的厉害,最要命的是看着差不多 的,然后直接复制修改,由于容易犯各种低级的错误(大小写啊,多一个或少一个字母啊……),一个错误就可以让你找半天。 有了java 反射 机制,什么都好办了,只需要写一个dao类,四个方法,增删改查,传入不同的对象,就OK啦,无需为每一个 表都创建dao类, 反射 机制会自动帮我们完成剩下的事情,这就是它的好处。说白了, 反射 机制就是专门帮我们做那些重复的 有规则的事情,所以现在很多的自动生成代码的软件就是运用 反射 机制来完成的,只要你按照规则输入相关的 参数 ,所以低 级的程序员慢慢的就被抹杀了,为什么?因为代码都不用写了,随便一个人都会开发,还要程序员干什么啊?所以我们只有 一条出路,那就是努力努力再努力,成为高级程序员,专门开发傻瓜软件,让其他程序员 到一边凉快去~ 3 使用过哪些xml解析 XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。 XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。 XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是 官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。
get Declare d Method java.lang.NoSuch Method Exception的异常原因在于 调用 get Declare d Method 时要同时指定方法名和 参数 名,这两个不能错误。 比如 参数 时java.util.List,但是你传的时java.util.ArrayList就会报错。 要想传递正确 参数 ,可以先 调用 get Declare d Method s这个方法(注意后面加了个s)来获取所有方法,看一下这些方法的 参数 到底是什么,接着再 调用 就不会出错了。
在学习jdk的动态代理时,invoke方法里面需要传入多个 参数 。动态代理也是传入Object[] args, 参数 数组。如果是多个 参数 不能直接传入多个 参数 ,需要创建 参数 数组 狂神说Spring06:静态/动态代理模式 反射 之invoke方法 一个例子弄懂invoke方法 get Declare d Method :获取当前类的所有声明的方法,包括public、protected和private修饰的方法。需要注意的是,这些方法一定是在当前类中声明的,从父类中继承的不算,实现接口的方法由于有声明所以包括在内。 get Method :获取当前类和父类的所有public的方法。这里的父类,指的是继承层次中的所有父类。比如说,A继承B,B继承C,那么B和C都属于A
解析 反射 类java.lang.Class中的属性和方法 1、public Method get Declare d Method (String name, Class<?>… parameterTypes) 常用 反射 获取对象的方法 Class<? extends UserController> clazz = userController.getClass(); //<1>处代码 在获取到Class对象之后,便可以获取有参方法 ① Method method = clazz.
import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect. Method ; public class method Demo { public static void main(String[] args) throws Exception { // meth...
(1)get Declare dConstructor:获取单个构造方法;get Declare dConstructors:返回当前类所有的构造方法,即获取的是个集合; get Declare d Method :获取单个 method ;get Declare d Method s获取当前类中所有的方法; get Declare dField:获取单个属性;get Declare dFields:获取当前类所有的属性; (2)这些都是前几篇博客中介绍的;
一、 Method 类的定义 Method 类位于 java.lang.reflect 包中,主要用于在程序运行状态中,动态地获取方法信息二、 Method 类的常用方法 1、getAnnotatedReturnType() 返回一个AnnotatedType对象,该对象表示使用一个类型来指定由该可执行文件表示的方法/构造函数的返回类型public class Method Test { pu...
通过 反射 的机制,可以通过invoke方法来 调用 类的函数。invoke函数的第一个 参数 是方法的实例,如果该方法是静态方法,可以用null或者用类来代替,第二个 参数 是变长的,是 调用 该方法的 参数 。 package com.tn.class; import java.lang.reflect. Method ; import java.util.Arrays; public class Client { public static void main(String[] args) throws Except
1. 无参 : public static void main(String[] args) throws NoSuch Method Exception, IllegalAccessException, InvocationTargetException, InstantiationException { //1.创建对象 Cat cat = new Cat(); //2.获取class对象 Class...
Class类: public get Declare d Method ( name,                                  ... parameterTypes)                           throws ,                                   返回一个 Method 对象,该对象反映此 Class对象所表示的类或接口
在当前类获取当前类的方法,当获取到相对应的方法时,获取对应的方法!用 反射 的方法 调用 执行! 如果方法的修饰符为protected请用,get Declare d Method 方法,为 public请用 get Method 方法 ! package cn.day1901.servlet; import java.io.IOException; import java...