反射的一些基础操作

一:

package Test2;
import Test.Person;import org.junit.Test;import java.lang.reflect.Field;
import java.lang.reflect.Modifier;/*
获取当前运行时类的所有属性*/
public class FieldTest {@Testpublic void test1(){Class clazz = Person.class;//获取属性结构Field[] fields = clazz.getFields();for(Field f :fields){//只能获取当前类及其父类权限为public的属性System.out.println(f);}System.out.println("");//getDeclaredFields() :获取当前类的虽有属性,包括私有(不包含父类)Field[] declaredFields = clazz.getDeclaredFields();for(Field f:declaredFields){System.out.println(f);}}//权限修饰符  数据类型  变量名@Testpublic void test2(){Class clazz = Person.class;Field[] declaredFields = clazz.getDeclaredFields();for(Field f:declaredFields){//1.权限修饰符//此时返回的为0:default,1:public,2:private 4:protectedint modifiers = f.getModifiers();//翻译过来 Modifier.toString()System.out.print(Modifier.toString(modifiers));//2.数据类型Class<?> type = f.getType();System.out.print("  "+type+"\t");//3.变量名String name = f.getName();System.out.println(name);}}
}

二:

package Test2;
import Test.Person;
import org.junit.Test;import java.lang.reflect.Method;/*
获取运行时类的方法结构*/
public class MethodTest {@Testpublic void test(){Class clazz = Person.class;//getMethods() :获取当前运行时类及其父类所有的声明为public权限的方法Method[] method = clazz.getMethods();for(Method m : method){System.out.println(m );}System.out.println();//getDeclaredMethods():获取当前运行时类的所有方法(不包含父类)Method[] declaredMethods = clazz.getDeclaredMethods();for(Method m :declaredMethods){System.out.println(m);}}@Testpublic void test2(){}
}

(重!)三:

package Test2;
import Test.Person;import org.junit.Test;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;/*
调用运行时类中指定的结构:属性、方法、构造器*/
public class ReflectionTest {/*get、set*/@Testpublic void testField() throws Exception {Class clazz = Person.class;//创建运行时类的对象Person person =(Person) clazz.newInstance();//获取指定属性Field id = clazz.getField("id");/*设置当前属性的值:要求运行时类中的属性为public通常不采用此方法id.set(person,1001);set(): 参数1:指明设置哪个对象的属性 参数2:value*///获取运行时类的指定变量名的属性Field name = clazz.getDeclaredField("name");//在设置前需要获取对Private 和 defualt 权限属性的 权限name.setAccessible(true);name.set(person,"tom");System.out.println(name.get(person ));/*获取当前属性的值get(): 参数1:获取哪个对象的属性*/Object o = id.get(person);System.out.println(o);}/*如何操作运行时类指定的方法*/@Testpublic void testMethod() throws Exception{Class clazz = Person.class;Person p = (Person)clazz.newInstance();//1.获取某个指定的方法    参数1:指明获取方法的名称   参数2:因为可能重载的原因,指明获取方法的参数列表Method show = clazz.getDeclaredMethod("show", String.class);//保证当前方法是可访问的show.setAccessible(true);// invoke(): 参数1:方法的调用者  参数2:给方法的参数赋值// invoke()方法的返回值即为对应类中调用的方法的返回值Object china = show.invoke(p, "China");System.out.println(china);//调用静态方法Method showDesc = clazz.getDeclaredMethod("showDesc");showDesc.setAccessible(true);//若调用运行时类的方法没有返回值,在返回null//因为静态方法,每个对象都是一样的,所以不需要指定调用对象,但不能为空 Object.class , null, Person.class....Object invoke = showDesc.invoke(null);System.out.println(invoke);//null}/*如何调用运行时类中指定的构造器*/@Testpublic void testConstructor() throws Exception{Class clazz = Person.class;//1.获取指定构造器(构造器名称都一样)  参数:指明构造器的参数列表Constructor declaredConstructor = clazz.getDeclaredConstructor(String.class);//2.保证此构造器是可访问的declaredConstructor.setAccessible(true);//3.调用此构造器创建运行时类的对象Object o = declaredConstructor.newInstance("Tom");System.out.println(o);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于__str__的介绍

在python语言里&#xff0c;__str__一般是格式是这样的。class A: def __str__(self): return "this is in str"事实上&#xff0c;__str__是被print函数调用的&#xff0c;一般都是return一个什么东西。这个东西应该是以字符串的形式表现的。如果不是要用…

object.prototype.call

object.prototype.call /* * object.prototype.call * 当一个object没有某个方法&#xff0c;但是其他的有&#xff0c;我们可以借助call或apply用其它对象的方法来操作。 * 语法: fun.call(thisArg[, arg1[, arg2[, ...]]]) * param: thisArg {object} //当前引用对象 …

BLOB数据类型、事务

Blob数据类型&#xff1a; 事务&#xff1a;

资源整理

资源整理 学习网站 学堂在线 链接&#xff1a;http://www.xuetangx.com/简介 学堂在线是免费公开的MOOC&#xff08;大规模开放在线课程&#xff09;平台&#xff0c;是国家教育部MOOC研究中心官方合作平台&#xff0c;致力于通过来自国内外一流名校开设的免费网络学习课程 EDX…

[工具] 知网(CNKI)文献下载工具

https://github.com/amyhaber/cnki-downloader 用于免费搜索&#xff0c;下载CNKI上的各类文献资料 转载于:https://www.cnblogs.com/Areas/p/5887671.html

Web中Servlet

一&#xff1a; web.xml中的代码如下 <web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>AddServlet</servlet-name><servlet-class>servlets.AddServlet</servlet-class>&l…

Thymeleaf视图模板的学习以及一些语法用法

流程&#xff1a;客户端向服务端的index组件发送请求&#xff0c;index组件会调用FruitDAO直至获取到数据库的数据&#xff1b;服务端获取到fruitList之后&#xff0c;存入到Session中&#xff0c;方便之后使用&#xff1b;之后调用ViewBaseServlet中的processTemplate方法&…

21 RadioGroup ListFragment

结构 MainActivity.java package com.qf.day21_radiogroupfragment_demo3;import java.util.ArrayList; import java.util.List;import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.…

XML与过滤器、事务管理

一 XML 二&#xff1a;过滤器&#xff08;Filter&#xff09; 功能&#xff1a; WebFilter("/demo01.do") public class Demo01Filter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doF…

Mybatis获取参数值的各种情况

public interface SelectMapper {//根据ID查询用户信息User getUserById(Param("id") Integer id);//查询所有用户信息List<User> getAllUser();//查询用户信息的总记录数Integer getCount();//查询用户信息使用mapMap<String, Object> getUserByIdToMap…

Mybatis中的配置文件xml

在配置的过程中&#xff1a;我们的mapper接口要与映射的XML文件处在同一位置下&#xff08;层级相同&#xff09; 比如&#xff1a;java.mybatis.mapper.ParameterMapper 对应: resoureces.mybatis.mapper.ParameterMapper 否则在进行测试的时候会出现无效的绑定 Invalid b…

Mybatis中解决属性名与字段名不一致的场景

* a>为字段起别名使得与属性名保持一致* b>设置全局配置将下划线自动映射为驼峰&#xff08;Mybatis-config中&#xff09;* <settings>* <!--将下划线自动映射为驼峰 emp_name:empName-->* …

Mybatis中处理多对一的映射关系

数据库中的结构&#xff1a; 实体类&#xff1a; 最终结果&#xff1a; 一&#xff1a;级联属性查询 自定义resultMap中可以这样设置&#xff1a; <resultMap id"empAndDeptResultMapOne" type"Emp"><id property"eid" column"ei…

Mybatis中处理一对多的映射关系

一对多与多对一的区别&#xff1a; 以部门表为单位&#xff0c;一个部门会有很多员工为一对多的关系 以员工表为单位&#xff0c;会有多个员工在一个部门中为多对一的关系 一&#xff1a;collection 由于一个部门中会有多个员工&#xff0c;即一对多的关系因此我们需要的实体…

Mybatis中缓存

1、一级缓存 SqlSession sqlSession SqlSessionUtils.getSqlSession();CacheMapper mapper sqlSession.getMapper(CacheMapper.class);Emp emp1 mapper.getEmpByEid(1);System.out.println(emp1);Emp emp2 mapper.getEmpByEid(1);System.out.println(emp2); 可以看到只访问…

HTML页面、CSS样式的以及js学习与介绍

html决定页面显示什么内容 css决定页面的美观程度html语言是解释型语言&#xff0c;解释不出来就不管了&#xff0c;不区分大小写 浏览器是容错的1&#xff09;html页面由一对标签组成:<html><html/>&#xff0c;分别成为开始标签和结束标签 2&#xff09;title:表…