首页 > 其他分享 >2022-11-28

2022-11-28

时间:2022-11-28 17:57:24浏览次数:42  
标签:11 String int 28 System 2022 println public out

 1 package it.cn.source.reflect;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Field;
 5 import java.lang.reflect.Method;
 6 
 7 /**
 8  * 该类是用于验证反射概念以及用法:
 9  *             1.获取字节码文件对象--通过全限定名
10  *             2.通过字节码文件对象获取构造方法
11  *             3.通过字节码文件对象获取普通方法
12  *             4.同过字节码文件对象获取字段
13  *                 私有化字段,先调用方法破坏其封装
14  *                 然后赋值,取值
15  * @author Administrator
16  *
17  */
18 public class RefeletTest {
19 
20     public static void main(String[] args) throws Exception {
21         //1.获取字节码文件
22         Class<?> clazz = Class.forName("it.cn.source.reflect.A");//完全限定路径名
23         //2.通过当前字节码对象,获取构造方法
24 //        Constructor<?>[] constructors = clazz.getConstructors();//只能获取所以public修饰的构造方法
25 //        for (Constructor<?> constructor : constructors) {//用增强for循环遍历
26 //            System.out.println("public修饰的 --:"+constructor);
27 //        }
28 //        Constructor<?>[] constructors2 = clazz.getDeclaredConstructors();//获取所以修饰权限的构造方法
29 //        for (Constructor<?> constructor1 : constructors2) {
30 //            System.out.println("所以修饰权限的构造方法 : " +constructor1);
31 //        }
32         //3.通过当前字节码文件对象,获取制定某一个构造方法(也就是根据参数)
33         Constructor<?> declaredConstructor = clazz.getDeclaredConstructor(int.class,String.class);
34         System.out.println(declaredConstructor);
35         //执行该方法,创建一个对象,用Constructor中的方法 newInstance()
36         Object instance = declaredConstructor.newInstance(3,"");
37         //4.通过当前字节码文件对象,获取普通方法
38         Method method = clazz.getDeclaredMethod("test",int.class);//根据方法名和方法的形参获取当前方法对象
39         method.invoke(instance, 3);//因为该方法是实例方法,所以只能用对象调用,需要在第一个参数位置,将上面的instance传入
40         
41         Method method1 = clazz.getDeclaredMethod("test",int.class,int.class);//根据方法名和方法的形参获取当前方法对象
42         method1.invoke(null, 3,5);//该方法是static方法,所以需要在第一个参数位置写null,因为不需要对象调用
43         
44         //5.通过当前字节码文件对象,获取字段
45          Field field = clazz.getDeclaredField("a");//该字段是private修饰的,所以不能直接赋值取值
46         //首先要破坏其封装性
47         field.setAccessible(true);//true:表示破坏封装,false表示不破坏,默认是false
48         //破坏之后给字段赋值,该字段是没用static修饰的,所以需要一个对象
49         field.set(instance, 3);//3是实际参数
50         //然后取值,该字段没有static修饰,所以需要一个对象
51         Object object = field.get(instance);
52         System.out.println(object);
53         //获取全限定名
54         String name = clazz.getName();
55         System.out.println("全限定名为: " + name);
56         //获取类名简称
57         String simpleName = clazz.getSimpleName();
58         System.out.println("类名简称 :" +simpleName);
59     }
60 
61 }
62 class A{
63     private int a = 1;
64     public String str;
65     boolean b = false;
66     
67     private A(){
68         System.out.println("私有无参构造!");
69     }
70     A(int a){
71         System.out.println("默认有一个参数!");
72     }
73     public A(String str){
74         System.out.println("私有有一个参数!");
75     }
76     public A(int a,String str){
77         System.out.println("public两个参数");
78     }
79     private void test(){
80         
81     }
82     void test(int a){
83         
84     }
85     public static int test(int a,int b){
86         return a+b;
87     }
88     public String test(String str){
89         return null;
90     }
91 }

 

标签:11,String,int,28,System,2022,println,public,out
From: https://www.cnblogs.com/puwei520/p/16932876.html

相关文章

  • 【2022-11-28】Docker部署搭建Gitlab
    一、环境准备1.准备一台虚拟机\或者购买服务器2.虚拟机硬件要求2.1内存不得少于4G,否则启动会报502错误,可自行百度解决,将虚拟机的swap分区调整为2G大小即可2......
  • NOIP 2022 爆零记
    Day-1晚上睡觉把夜灯也关了,睡好一点有助于明天复习。Day0其实也没啥心情再复习了,功夫在平时,打板子的用处其实也不大,反正我是从来没有考前打的板子用上过的。上午在摸......
  • C++11:lambda匿名函数
    lambda源自希腊字母表中第11位的λ,在计算机科学领域,它则被用来表示一种匿名函数。所谓匿名函数,简单地理解就是没有名称的函数,又常被称为lambda函数或者lambda表达......
  • 如梦似幻——记XCPC2022赛年
    随着2022.11.27下午17:00的钟声敲响,我2022年的XCPC之旅也落下了帷幕。icpc济南站,rk69,生涯首银。​ICPC官方的预公布榜单本来想着今晚好好睡一觉,但是看了队长的知乎长文后......
  • StoneDB 开源社区月刊 | 202207期
    号外号外,StoneDB开源社区第一期月刊来咯!StoneDB开源社区第一次月度会议在昨天晚上九点半圆满落幕,带着干货的大佬们和带着疑问的社区小伙伴们来了场畅所欲言的交流,会议气氛......
  • StoneDB 开源社区月刊 | 202210期
    StoneDB开源社区第四期月刊来啦!StoneDB开源社区10月的月度会议在11月3日晚上圆满落幕。本次会议是StoneDB开源社区的第四次月度会议,讨论场面之激烈史无前例!原计划一小时......
  • 2022.11.28 很乱
    现在很乱。原本是12.5/7/9考完三门考试,之后我蹭点群论,然后回家问问老师准备毕业论文。本来这两天复习刚有渐入佳境之感,但12.7这门考试推迟到1.7线上闭卷考试了;12.9的时间......
  • 11月28日内容总结——
    一、多表查询的两种方法方式1:连表操作innerjoin(内连接)select*fromempinnerjoindeponemp.dep_id=dep.id;只连接两张表中公有的数据部分leftjoin(左连接)......
  • Weblogic Cluster BEA-000116故障处理
    部署环境:Weblogic10MP2forUNIX实验:WeblogicCluster:(MServer1,MServer2)7222MulticastIP:239.192.0.0AdminServer:192.168.1.33:7001MServer1:192.168.1.33......
  • 2022-11-28 记录uniapp+小程序项目 如何上传excel、word、图片文件
    这里直接用到微信提供的api:wx.chooseMessageFile示例: wx.chooseMessageFile({  count:1,  success:(res)=>{   consttempFilePaths=res.te......