20220527_Java_反射的各种方法
文章目录
用于反射的学生类
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_反射的各种方法相关推荐
- java反射 数组类,乐字节Java反射之三:方法、数组、类加载器和类的生命周期
继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throwsException { ...
- JUnit 3.8 通过反射测试私有方法
测试私有(private)的方法有两种: 1)把目标类的私有方法(修饰符:private)修改为(public),不推荐,因为修改了源程序不佳 2)通过反射 (推荐) 代码演示: 目标程序 Priva ...
- python_day21面向对象的进阶(反射,内置方法,)
# 两个内置函数 *# 反射 *****# 内置方法 *** # 类(定义) # 静态属性 类属性(变量) 直接写在类中,全大写 # 动态属性 方法(函数) self # 类方法 @classmeth ...
- java 反射 调用私有构造函数_使用反射调用私有方法
1.创建一个被调用的类 /** * @version 1.0 * @Author F-llin * @Date 2020-12-04 13:53 */ public class Bean{ priva ...
- C# 知识点笔记:IEnumerable的使用,利用反射动态调用方法
IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...
- Python面向对象06/反射/双下方法
目录 day 26 /反射,双下方法 目录 1.元类type 2.反射 3.函数与类的区别 4.特殊的双下方法 day 26 /反射,双下方法 目录 1.元类type type:获取对象从属的类Pyt ...
- java 反射 set方法_java 反射调用set方法
Java语言中的许多库类名称,多与咖啡有关.下面是小编为您带来的java 反射调用set方法,希望对大家有所帮助. java 反射调用set方法: import java.beans.Property ...
- Java 反射 C 反射调用 java 方法
1. Java 反射 1.1 创建 Demo.java 类 public class Demo {public void hello(String str){System.out.println(st ...
- Android反射@hide API 方法、变量,支持Android11和Android12
Android源码中现在有大量的方法和变量被@hide所修饰,而这些被hide修饰的方法和变量是不允许应用层进行反射获取的,所以富有探索精神的程序员们就开始想尽各种办法绕过系统hide限制来使用@hi ...
- java:PropertyDescriptor+反射调用setter方法
java:PropertyDescriptor+反射调用setter方法 1 前言 PropertyDescriptor文档如下: https://docs.oracle.com/javase/7/d ...
最新文章
- 单个GPU无法训练GPT-3,但有了这个,你能调优超参数了
- 反码求和校验: 一个数加上自己取反得到的数正是时钟轮盘上最大那个数
- vue-router 手势滑动触发返回
- CLR via C# (二)
- C和C++的关键字区别
- C#中Array.Sort()方法分析
- 【期望】守卫挑战(金牌导航 期望-9)
- Docker Desktop 向大公司宣告收费,网友大呼:是时候弃用了!
- GRUB与Linux系统修复(第二版)
- a simple introduce to arontab
- 解决eclipse启动停在一个空白窗口的问题
- 大数据分析平台由哪些部分构成
- 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 1270期】
- 卫星电话是直接与卫星通信还是通过地面站?
- 【高性能Mysql 】读书笔记(一)
- oracle 生成拼音输入码,拼音码表的生成
- 无线wifi的dns服务器,无线wifidns是什么
- 小姜的功能安全学习日记
- 启动Storm的nimbus和supervisor时报错: ImportError: No module named argparse
- C - BLG POJ - 1417 种类并查集加dp(背包)