第二十二节——反射(代码片段)

想学习安全的小白 想学习安全的小白     2022-12-23     677

关键词:

类加载器

一、类加载器ClassLoader 中的两个方法

  1. static ClassLoader getSystemClassLoader():返回用于委派的系统类加载器
  2. ClassLoader getParent():返回父类加载器进行委派
  3. 例子
public class ClassLoaderDemo 
	public static void main(String[] args) 
		//static ClassLoader getSystemClassLoader():返回用于委派的系统类加载器
		ClassLoader c = ClassLoader.getSystemClassLoader();
		System.out.println(c); //AppClassLoader
		//ClassLoader getParent():返回父类加载器进行委派
		ClassLoader c2 = c.getParent();
		System.out.println(c2); //PlatformClassLoader
		ClassLoader c3 = c2.getParent();
		System.out.println(c3); //null
	

反射

一、概述

  1. 是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。

二、获取Class类对象的三种方式

  1. 类名.class属性
  2. 对象名.getClass()方法
  3. Class.forName(全类名)方法
  4. 举例:
//使用类的class属性来获取该类对应的Class对象
Class<Student> c1 = Student.class;
System.out.println(c1);

//调用对象的getClass()方法,返回该对象所属类对应的Class对象
Student s = new Student();
Class<? extends Student> c3 = s.getClass();
System.out.println(c1 == c3);  //true

//使用Class类中的静态方法forName(String className)
Class<?> c4 = Class.forName("com.itheima_02.Student");  //包路径.类名
System.out.println(c1 == c4);  //true

三、反射获取构造方法并使用

  1. Constructor<?>[] getConstructors():返回所有公共构造方法对象的数组,修饰符为public的构造方法
  2. Constructor<?>[] getDeclaredConstructors():返回所有构造方法对象的数组
  3. Constructor getConstructor(Class<?>… parameterTypes):返回单个公共构造方法对象,参数:你要获取的构造方法的参数的个数和数据类型对应的字节码文件对象
  4. Constructor getDeclaredConstructor(Class<?>…parameterTypes):返回单个构造方法对象
  5. Constructor类用于创建对象的方法:T newInstance(Object…initargs),根据指定的构造方法创建对象
  6. 例子:
Class<Test1> test1Class = Test1.class;
Constructor<?>[] constructors1 = test1Class.getConstructors();
for (Constructor con1:constructors1)
	System.out.println(con1);


System.out.println("-------------");

Constructor<?>[] declaredConstructors = test1Class.getDeclaredConstructors();
for (Constructor de:declaredConstructors)
	System.out.println(de);


System.out.println("-------------");

Constructor<Test1> con = test1Class.getConstructor();
Test1 test1 = con.newInstance();
//等于Test1 test1 = new Test1();使用无参构造方法创建对象

Constructor<Test1> con2 = test1Class.getConstructor(Integer.class, String.class);
Test1 test2 = con2.newInstance(1,"qwe");
//等于Test1 test1 = new Test1(1,"qwe");使用带参构造方法创建对象

四、反射获取成员变量并使用

  1. Field[] getFields():返回所有公共成员变量对象的数组
  2. Field[] getDeclaredFields():返回所有成员变量对象的数组
  3. Field getField(String name):返回单个公共成员变量对象
  4. Field getDeclaredField(String name):返回单个成员变量对象
  5. Field类用于给成员变量赋值的方法:void set(Object obj,Object value),给obj对象的成员变量赋值为value
  6. 举例:
Class<Test1> test1Class = Test1.class;

Field[] fields = test1Class.getDeclaredFields();
for (Field f:fields)
    System.out.println(f);


Field nameField = test1Class.getDeclaredField("name");
Constructor<Test1> con = test1Class.getDeclaredConstructor();
Test1 test1 = con.newInstance();
nameField.set(test1,"qwe");
//等效于Test1 test1 = new Test1();test1.name="qwe";
//这里使用了Field的set方法,对class的name成员变量赋值为qwe

五、反射获取成员方法并使用

  1. Method[] getMethods():返回所有公共成员方法对象的数组,包括继承的,从object继承的方法也会显示
  2. Method[] getDeclaredMethods():返回所有成员方法对象的数组,不包括继承的
  3. Method getMethod(String name, Class<?>…parameterTypes):返回单个公共成员方法对象
  4. Method getDeclaredMethod(String name, Class<?>…parameterTypes):返回单个成员方法对象
  5. Method类用于执行方法的方法:Object invoke(Object obj,Object… args),调用obj对象的成员方法,参数是args,返回值是Object类型
  6. 举例:
Class<Test1> test1Class = Test1.class;

Method[] methods = test1Class.getMethods();
for (Method m:methods)
    System.out.println(m);


Method showMethod = test1Class.getMethod("show", String.class);
Constructor<Test1> constructor = test1Class.getConstructor();
Test1 test1 = constructor.newInstance();
showMethod.invoke(test1,"qwe123");
//类似:Test1 constructor = new Test1();constructor.show("qwe123");

《pyinstaller打包实战指南》第二十二节单文件模式打包playwright(代码片段)

第二十二节单文件模式打包Playwright打包时解决掉的问题:ImportError:DLLloadfailedwhileimporting_greenlet:动态链接库(DLL)初始化例程失败。Executabledoesn\'texistat C:\\Users\\user\\Desktop\\la_vie\\dist\\belle\\playwright\\driver\\pac 查看详情

第二十二节,tensorflow中rnn实现一些其它知识补充(代码片段)

一初始化RNN上一节中介绍了 通过cell类构建RNN的函数,其中有一个参数initial_state,即cell初始状态参数,TensorFlow中封装了对其初始化的方法。1.初始化为0对于正向或反向,第一个cell传入时没有之前的序列输出值,所以需要对... 查看详情

第二十二节,tensorflow中的图片分类模型库slim的使用(代码片段)

Google在TensorFlow1.0,之后推出了一个叫slim的库,TF-slim是TensorFlow的一个新的轻量级的高级API接口。这个模块是在16年新推出的,其主要目的是来做所谓的“代码瘦身”。它类似我们在TensorFlow模块中所介绍的tf.contrib.lyers模块,将很... 查看详情

《pyinstaller打包实战指南》第二十二节单文件模式打包playwright(代码片段)

第二十二节单文件模式打包Playwright打包时解决掉的问题:ImportError:DLLloadfailedwhileimporting_greenlet:动态链接库(DLL)初始化例程失败。Executabledoesn\'texistat C:\\Users\\user\\Desktop\\la_vie\\dist\\belle\\playwright\\driver\\package\\.local-browsers\\chromiu... 查看详情

第二十二节jquery事件(代码片段)

1<!--事件函数列表:2blur()元素失去焦点3focus()元素获得焦点4click()鼠标单击5mouseover()鼠标进去(进入子元素也触发)6mouseout()鼠标离开(离开子元素也触发)7mouseenter()鼠标进入(进入子元素不触发)8mouseleave()鼠标离开(离开子... 查看详情

第二十二节with标签使用详解(代码片段)

...用-->11<p>a</p>12%endwith%13<br>14<br>15<!--第二种写法-->16%withbooks.1asb%17<!--等号两边不能有空格,定义的变量只能在with块中使 查看详情

零基础学python后端开发篇第二十二节--pythonweb开发:http请求的url路由(代码片段)

一、要实现的目标我们的目标是实现一个公司的销售管理系统。这个在以后的课程中,我会一步步带领大家去完成这个销售管理系统。二、创建项目app1.APP介绍Django中的一个app就是项目里面的一个应用的意思。一个项目包含多个a... 查看详情

第二十二节,三元运算

...变量条件成立,就将第一个值赋给变量,条件不成立就将第二个值赋给变量就是一个条件判断,和两个不同的值组合成的判断运算,就是三元运算#!/usr/bin/envpython#-*-coding:utf-8-*-#三元运算#三元运算,就是if条件判断,前后各有一个... 查看详情

scala入门到精通——第二十二节高级类型

作者:摇摆少年梦视频地址:http://www.xuetuwuyou.com/course/12本节主要内容this.type使用类型投影结构类型复合类型1.this.type使用classPerson{privatevarname:String=nullprivatevarage:Int=0defsetName(name:String)={this.name=name//返回对象本身this}d 查看详情

学习笔记第二十二节课

shell介绍shell是一个命令解释器,提供用户和机器之间的交互。用户配置的最后一个段就是shell创建的普通的用户它的shell是binbash每个用户都可以有自己的shellsentos7的shell是bash除此之外还有zshksh,用起来和bash很像,但是有细节上... 查看详情

第二十二节-表格

table是块级元素,给tablewidth height,单元格会自动分配,不给tablewidth与height,单元格会根据内容分配,但还是会对齐table:thead表格头(th标题单元格),th里的字上下左右居中     tbody表身     tfoot... 查看详情

第二十二bbs(代码片段)

1.对评论内容进行评论1.1.增加评论按钮comment_hander.pydefrender_tree_node(tree_dic,margin_val):html=""#展示子集评论fork,vintree_dic.items():#合成评论、日期、用户名及评论按钮ele="<divclass=‘comment-node‘style=‘margin-left:%spx‘>"%mar 查看详情

第二十二课单链表的具体实现(代码片段)

本节目标:添加LinkList.h文件:1#ifndefLINKLIST_H2#defineLINKLIST_H34#include"List.h"5#include"Exception.h"67namespaceDTLib8910template<typenameT>11classLinkList:publicList<T>1213protected:14struct 查看详情

第二十二课打造专业的编译环境(下)(代码片段)

          顶层目录如下: 顶层makefile:1includepro-cfg.mk2includecmd-cfg.mk3includepro-rule.mk cmd-cfg.mk:1AR:=ar2ARFLAGS:=crs34CC:=gcc5LFLAGS:=6CFLAG 查看详情

golang✔️走进go语言✔️第二十二课json&文件读写(代码片段)

【Golang】✔️走进Go语言✔️第二十二课json&文件读写概述json编码解码文件读写文件读取写入文件概述Golang是一个跨平台的新生编程语言.今天小白就带大家一起携手走进Golang的世界.(第22课)jsonjson(JavaScriptObjectNotation)是一种轻... 查看详情

golang✔️走进go语言✔️第二十二课json&文件读写(代码片段)

【Golang】✔️走进Go语言✔️第二十二课json&文件读写概述json编码解码文件读写文件读取写入文件概述Golang是一个跨平台的新生编程语言.今天小白就带大家一起携手走进Golang的世界.(第22课)jsonjson(JavaScriptObjectNotation)是一种轻... 查看详情

平时二十二测(代码片段)

 第一题水题未放,今天第二题又读入超时2000*2000的读入要快读啊,上次没长教训第二题:图论题.二维前缀和的应用. 最重要的:这就是一棵树啊标算为:对于不包含环的图,连通块数目=点数-边数,所以利用二维前缀和进行... 查看详情

c++从青铜到王者第二十二篇:c++11(代码片段)

系列文章目录文章目录系列文章目录前言一、C++11简介(了解)二、列表初始化(了解)1.C++98中的初始化问题2.内置类型的列表初始化3.自定义类型的列表初始化三、变量类型推导(了解)1.为什么需要类型推导2.decltype类型推... 查看详情