当前位置: 首页 > news >正文

石家庄免费建站用wordpress开发网站

石家庄免费建站,用wordpress开发网站,wordpress插件设置,芷江建设局的工作人员网站调用方法 我们已经能通过Class实例获取所有Field对象#xff0c;同样的#xff0c;可以通过Class实例获取所有Method信息。Class类提供了以下几个方法来获取Method#xff1a; Method getMethod(name, Class...)#xff1a;获取某个public的Method#xff08;包括父类同样的可以通过Class实例获取所有Method信息。Class类提供了以下几个方法来获取Method Method getMethod(name, Class...)获取某个public的Method包括父类Method getDeclaredMethod(name, Class...)获取当前类的某个Method不包括父类Method[] getMethods()获取所有public的Method包括父类Method[] getDeclaredMethods()获取当前类的所有Method不包括父类 我们来看一下示例代码 // reflection public class Main {public static void main(String[] args) throws Exception {Class stdClass Student.class;// 获取public方法getScore参数为String:System.out.println(stdClass.getMethod(getScore, String.class));// 获取继承的public方法getName无参数:System.out.println(stdClass.getMethod(getName));// 获取private方法getGrade参数为int:System.out.println(stdClass.getDeclaredMethod(getGrade, int.class));} }class Student extends Person {public int getScore(String type) {return 99;}private int getGrade(int year) {return 1;} }class Person {public String getName() {return Person;} } 上述代码首先获取Student的Class实例然后分别获取public方法、继承的public方法以及private方法打印出的Method类似 public int Student.getScore(java.lang.String) public java.lang.String Person.getName() private int Student.getGrade(int)一个Method 对象包含一个方法的所有信息 getName()返回方法名称例如“getScore”getReturnType()返回方法返回值类型也是一个Class实例例如String.classgetParameterTypes()返回方法的参数类型是一个Class数组例如{String.class, int.class}getModifiers()返回方法的修饰符它是一个int不同的bit表示不同的含义。 调用方法 当我们获取到一个Method对象时就可以对它进行调用。我们以下面的代码为例 String s Hello world; String r s.substring(6); // world如果用反射来调用substring方法需要以下代码 // reflection import java.lang.reflect.Method; public class Main {public static void main(String[] args) throws Exception {// String对象:String s Hello world;// 获取String substring(int)方法参数为int:Method m String.class.getMethod(substring, int.class);// 在s对象上调用该方法并获取结果:String r (String) m.invoke(s, 6);// 打印调用结果:System.out.println(r);} } 注意到substring()有两个重载方法我们获取的是String substring(int)这个方法。思考一下如何获取String substring(int, int)方法。 对Method实例调用invoke就相当于调用该方法invoke的第一个参数是对象实例即在哪个实例上调用该方法后面的可变参数要与方法参数一致否则将报错。 调用静态方法 如果获取到的Method表示一个静态方法调用静态方法时由于无需指定实例对象所以invoke方法传入的第一个参数永远为null。我们以Integer.parseInt(String)为例 // reflection import java.lang.reflect.Method; public class Main {public static void main(String[] args) throws Exception {// 获取Integer.parseInt(String)方法参数为String:Method m Integer.class.getMethod(parseInt, String.class);// 调用该静态方法并获取结果:Integer n (Integer) m.invoke(null, 12345);// 打印调用结果:System.out.println(n);} } 调用非public方法 和Field类似对于非public方法我们虽然可以通过Class.getDeclaredMethod()获取该方法实例但直接对其调用将得到一个IllegalAccessException。为了调用非public方法我们通过Method.setAccessible(true)允许其调用 // reflection import java.lang.reflect.Method; public class Main {public static void main(String[] args) throws Exception {Person p new Person();Method m p.getClass().getDeclaredMethod(setName, String.class);m.setAccessible(true);m.invoke(p, Bob);System.out.println(p.name);} }class Person {String name;private void setName(String name) {this.name name;} } 此外setAccessible(true)可能会失败。如果JVM运行期存在SecurityManager那么它会根据规则进行检查有可能阻止setAccessible(true)。例如某个SecurityManager可能不允许对java和javax开头的package的类调用setAccessible(true)这样可以保证JVM核心库的安全。 多态 我们来考察这样一种情况一个Person类定义了hello()方法并且它的子类Student也覆写了hello()方法那么从Person.class获取的Method作用于Student实例时调用的方法到底是哪个 // reflection import java.lang.reflect.Method; public class Main {public static void main(String[] args) throws Exception {// 获取Person的hello方法:Method h Person.class.getMethod(hello);// 对Student实例调用hello方法:h.invoke(new Student());} }class Person {public void hello() {System.out.println(Person:hello);} }class Student extends Person {public void hello() {System.out.println(Student:hello);} } 运行上述代码发现打印出的是Student:hello因此使用反射调用方法时仍然遵循多态原则即总是调用实际类型的覆写方法如果存在。上述的反射代码 Method m Person.class.getMethod(hello); m.invoke(new Student());实际上相当于 Person p new Student(); p.hello();小结 Java的反射API提供的Method对象封装了方法的所有信息 通过Class实例的方法可以获取Method实例getMethod()getMethods()getDeclaredMethod()getDeclaredMethods()通过Method实例可以获取方法信息getName()getReturnType()getParameterTypes()getModifiers()通过Method实例可以调用某个对象的方法Object invoke(Object instance, Object… parameters)通过设置setAccessible(true)来访问非public方法通过反射调用方法时仍然遵循多态原则。
http://www.w-s-a.com/news/426156/

相关文章:

  • 广州天河区网站建设公司东莞网络游戏制作开发
  • 哪个网站做免费小程序rio门户网站的制作
  • 短网站生成查询网站所有关键词排名
  • 阿里云购买网站登录技术服务外包公司
  • 淘宝单页面网站手机制作游戏的软件
  • 汉中市网站建设wordpress编辑器好麻烦
  • 织梦做的网站快照被攻击在线看crm系统
  • 青岛物流公司网站建设网站建设提议
  • 企业网站建设高端品牌宿州注册公司多少钱
  • 个人微信公众号怎么做微网站吗湛江网站制作方案
  • 学校网站改版南京展厅设计装修
  • 手机网站有免费做的吗建设银行网站不能登录
  • 树莓派做影视网站网站建设企业 熊账号
  • 网站iis7.5配置免费网站建设模板下载
  • 生物公司网站建设方案wordpress自定义字段调用
  • 静态网站公用头部如何调用标题wordpress自动采集翻译插件怎么用
  • 网站做单链 好不好网站营销不同阶段的网站分析目标
  • 网线制作颜色顺序兰州网站推广优化
  • 北京沙河教做网站的企业融资以什么为基础
  • 给网站添加百度地图绵阳做绵阳做网站网站
  • 用电脑做服务器制作网站东莞营销网站建设
  • 网站需要怎么做wordpress 重装
  • 做电影网站赚钱的方法世界500强企业排名2023
  • 领卷网站怎么做的西宁设计网站建设
  • 东莞网站建设价位软件开发税率是13%还是6
  • 企业网站建设一条龙如何在网上推广自己
  • 成品网站制作公司企梦网站建设
  • 网站开发微信授权登录ftp 如何 更新 wordpress
  • icp备案和网站不符查询公司的网站备案
  • 万江营销型网站建设泰安网站建设制作电话号码