文章目录

用于反射的学生类

public class Student {private String name;private String gender;private int age;public static String school;public static final String nation = "NeverLand";public Student() {System.out.println("No para constructor running");}private Student(String name, String gender, int age) {System.out.println("With para constructor running");this.name = name;this.gender = gender;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +'}';}
}

文章目录

获取学生类的类对象的方法

public class testReflect {public static void main(String[] args) throws ClassNotFoundException {//得到类对象的方法一,Class类方法forName,参数,全限名=包名+类名Class c = Class.forName("d2_reflect.Student");System.out.println(c);//方法二,类名点ClassClass c1 = Student.class;System.out.println(c1);//方法三,new一个对象,在用Class类Student s = new Student();Class c2 = s.getClass();//这写法几乎与方法二一样了,不同在于,方法二无需具体对象//这是用具体对象System.out.println(c2);}
}

文章目录

获取学生类的构造器的方法

import java.lang.reflect.Constructor;public class testReflectDemo2 {public static void main(String[] args) throws Exception {Class c = Class.forName("d2_reflect.Student");
//        //本方法只能获取public修饰的构造器
//        Constructor[] cons = c.getConstructors();//可以获取所有权限的构造器Constructor[] cons = c.getDeclaredConstructors();for (Constructor con : cons) {System.out.println(con.getName()+"==>"+con.getParameterCount());}System.out.println("===========divide line===========");//获取单个构造器,因为没填参数,所以获取的时无参构造器Constructor con = c.getConstructor();System.out.println(con.getName()+"==>"+con.getParameterCount());//获取不到,因为有参构造器被我private了
//        Constructor con1 = c.getConstructor(String.class,String.class,int.class);
//        System.out.println(con1.getName()+"==>"+con1.getParameterCount());//获取非public权限的有参构造器,所有声明了的构造器都可以获取Constructor con2 = c.getDeclaredConstructor(String.class,String.class,int.class);System.out.println(con2.getName()+"==>"+con2.getParameterCount());//获取后的构造器使用,因为newInstance方法返回的都是object,所以要类型转换Student s = (Student) con.newInstance();//调用private的构造器,需要先突破访问权限,否则运行报错,IllegalAccessExceptioncon2.setAccessible(true);Student s1 = (Student) con2.newInstance("leon","male",29);}
}

文章目录

获取学生类的成员变量的方法

import java.lang.reflect.Field;public class testReflectDemo3 {public static void main(String[] args) throws Exception {Class c = Student.class;//获取成员变量, 私有成员变量无法获取
//        Field[] fs = c.getFields();
//        for (Field f : fs) {//            System.out.println(f.getName()+"==>"+f.getType());
//        }Field[] fs1 = c.getDeclaredFields();for (Field field : fs1) {System.out.println(field.getName()+"==>"+field.getType());}System.out.println("=======divide line========");//获取单个public成员变量Field fi = c.getField("school");System.out.println(fi.getName()+"==>"+fi.getType());//获取单个成员变量,包括非publicField fi1 = c.getDeclaredField("age");System.out.println(fi1.getName()+"==>"+fi1.getType());//给获取到的成员变量赋值,非public的也要打开权限Student s = new Student();fi1.setAccessible(true);fi1.set(s,29);fi.set(s,"HeavenCollege");//静态变量不被打印,用类名访问System.out.println(s);System.out.println(Student.school);System.out.println("=====divide line=====");//取值String sch = (String)fi.get(s);int age = (int)fi1.get(s);System.out.println(age);System.out.println(sch);}
}

文章目录

用于反射的猫类

public class Cat {private String name;private int age;public Cat() {}public Cat(String name, int age) {this.name = name;this.age = age;}public void walk(){System.out.println("Cat walk so quiet.");}public static void sleep(){System.out.println("Cat sleep in the morning");}private void eat(){System.out.println("Cat eat quiet");}private String eat(String food){System.out.println("Cat eat "+food);return "Cat got a dinner";}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +", age=" + age +'}';}//    public String getName() {//        return name;
//    }
//
//    public void setName(String name) {//        this.name = name;
//    }
//
//    public int getAge() {//        return age;
//    }
//
//    public void setAge(int age) {//        this.age = age;
//    }
}

文章目录

获取猫类方法的反射方法

import java.lang.reflect.Method;public class testReflectDemo4 {public static void main(String[] args) throws Exception {Class c = Cat.class;//获取成员方法,输出结果有好多默认方法,看来是父类Object的
//        Method[] mes = c.getMethods();
//        for (Method me : mes) {//            System.out.println('['+me.getName()+"]'return value is ["+me.getReturnType()+
//                    "], it has paras "+me.getParameterCount());
//        }//这个输出的干净,就是你自己写的几个Method[] mes1 = c.getDeclaredMethods();for (Method method : mes1) {System.out.println('['+method.getName()+"]'return value is ["+method.getReturnType()+"], it has paras "+method.getParameterCount());}System.out.println("=======divide line========");//获取单个public方法Method me = c.getMethod("sleep");System.out.println('['+me.getName()+"]'return value is ["+me.getReturnType()+"], it has paras "+me.getParameterCount());//获取所有声明的成员方法,包括非publicMethod me1 = c.getDeclaredMethod("eat");System.out.println('['+me1.getName()+"]'return value is ["+me1.getReturnType()+"], it has paras "+me1.getParameterCount());Method me2 = c.getDeclaredMethod("eat",String.class);System.out.println('['+me2.getName()+"]'return value is ["+me2.getReturnType()+"], it has paras "+me2.getParameterCount());System.out.println("=======divide line========");//获取后的方法使用,返回值为Object, 无返回值的方法,结果为nullCat ca = new Cat();Object result = me.invoke(ca);me2.setAccessible(true);//非public方法要打开权限Object result1 = me2.invoke(ca,"fish");//参数不能忘System.out.println(result);System.out.println(result1);}
}

20220527_Java_反射的各种方法相关推荐

  1. java反射 数组类,乐字节Java反射之三:方法、数组、类加载器和类的生命周期

    继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throwsException { ...

  2. JUnit 3.8 通过反射测试私有方法

    测试私有(private)的方法有两种: 1)把目标类的私有方法(修饰符:private)修改为(public),不推荐,因为修改了源程序不佳 2)通过反射 (推荐) 代码演示: 目标程序 Priva ...

  3. python_day21面向对象的进阶(反射,内置方法,)

    # 两个内置函数 *# 反射 *****# 内置方法 *** # 类(定义) # 静态属性 类属性(变量) 直接写在类中,全大写 # 动态属性 方法(函数) self # 类方法 @classmeth ...

  4. java 反射 调用私有构造函数_使用反射调用私有方法

    1.创建一个被调用的类 /** * @version 1.0 * @Author F-llin * @Date 2020-12-04 13:53 */ public class Bean{ priva ...

  5. C# 知识点笔记:IEnumerable的使用,利用反射动态调用方法

    IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...

  6. Python面向对象06/反射/双下方法

    目录 day 26 /反射,双下方法 目录 1.元类type 2.反射 3.函数与类的区别 4.特殊的双下方法 day 26 /反射,双下方法 目录 1.元类type type:获取对象从属的类Pyt ...

  7. java 反射 set方法_java 反射调用set方法

    Java语言中的许多库类名称,多与咖啡有关.下面是小编为您带来的java 反射调用set方法,希望对大家有所帮助. java 反射调用set方法: import java.beans.Property ...

  8. Java 反射 C 反射调用 java 方法

    1. Java 反射 1.1 创建 Demo.java 类 public class Demo {public void hello(String str){System.out.println(st ...

  9. Android反射@hide API 方法、变量,支持Android11和Android12

    Android源码中现在有大量的方法和变量被@hide所修饰,而这些被hide修饰的方法和变量是不允许应用层进行反射获取的,所以富有探索精神的程序员们就开始想尽各种办法绕过系统hide限制来使用@hi ...

  10. java:PropertyDescriptor+反射调用setter方法

    java:PropertyDescriptor+反射调用setter方法 1 前言 PropertyDescriptor文档如下: https://docs.oracle.com/javase/7/d ...

最新文章

  1. 单个GPU无法训练GPT-3,但有了这个,你能调优超参数了
  2. 反码求和校验: 一个数加上自己取反得到的数正是时钟轮盘上最大那个数
  3. vue-router 手势滑动触发返回
  4. CLR via C# (二)
  5. C和C++的关键字区别
  6. C#中Array.Sort()方法分析
  7. 【期望】守卫挑战(金牌导航 期望-9)
  8. Docker Desktop 向大公司宣告收费,网友大呼:是时候弃用了!
  9. GRUB与Linux系统修复(第二版)
  10. a simple introduce to arontab
  11. 解决eclipse启动停在一个空白窗口的问题
  12. 大数据分析平台由哪些部分构成
  13. 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 1270期】
  14. 卫星电话是直接与卫星通信还是通过地面站?
  15. 【高性能Mysql 】读书笔记(一)
  16. oracle 生成拼音输入码,拼音码表的生成
  17. 无线wifi的dns服务器,无线wifidns是什么
  18. 小姜的功能安全学习日记
  19. 启动Storm的nimbus和supervisor时报错: ImportError: No module named argparse
  20. C - BLG POJ - 1417 种类并查集加dp(背包)

热门文章

  1. 我们可能会遇到的距离量算方法
  2. 五子棋大在线对战 java_五子棋可蓝牙对战版
  3. OpenFileDiaog.Filter的使用
  4. TINA仿真系列之555定时器
  5. 999999999分解质因数
  6. Flowchat 流程图在Markdown中的使用(不同编辑器有细微区别)
  7. 点击链接时触发php文件,php点击链接直接下载文件写法
  8. android 平面图app_安卓app设计规范整理和Android APP设计篇
  9. 智慧屏如何连接电视盒子
  10. 撕逼利器——批判性思维