J2EE&反射

这篇具有很好参考价值的文章主要介绍了J2EE&反射。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.什么是反射

       用实体类Student做示范

三.反射实例化

四.反射动态方法调用

五.反射读写属性


一.什么是反射

反射java语言中的一种机制,通过这种机制可以动态的实例化对象,读写属性,调用方法

二.类类文章来源地址https://www.toymoban.com/news/detail-576886.html

  1. Class.forName(完整类名)
  2. 类名 .class
  3. 对象 .getClass

       用实体类Student做示范

package com.zking.fanshe;

public class Student {
	private String sid;

	private String sname;

	public Integer age;
	
	static{
		System.out.println("加载进jvm中!");
	}

	public Student() {
		super();
		System.out.println("调用无参构造方法创建了一个学生对象");
	}

	public Student(String sid) {
		super();
		this.sid = sid;
		System.out.println("调用带一个参数的构造方法创建了一个学生对象");
	}

	public Student(String sid, String sname) {
		super();
		this.sid = sid;
		this.sname = sname;
		System.out.println("调用带二个参数的构造方法创建了一个学生对象");
	}

	@SuppressWarnings("unused")
	private Student(Integer age) {
		System.out.println("调用Student类私有的构造方法创建一个学生对象");
		this.age = age;
	}

	public String getSid() {
		return sid;
	}

	public void setSid(String sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public void hello() {
		System.out.println("你好!我是" + this.sname);
	}

	public void hello(String name) {
		System.out.println(name + "你好!我是" + this.sname);
	}

	@SuppressWarnings("unused")
	private Integer add(Integer a, Integer b) {
		return new Integer(a.intValue() + b.intValue());
	}

	@Override
	public String toString() {
		return "Student [sid=" + sid + ", sname=" + sname + ", age=" + age + "]";
	}
	
	
}
	//1.Class.forname()
	Class stuClass	=Class.forName("com.zking.fanshe.Student");
		//2.类
	Class Class = Student.class;
	
		//3.对象 .getClass
	Student student = new Student();
	Class class2 = student.getClass();
	
	System.out.println(stuClass);
	System.out.println(class2);
	System.out.println(Class);

三.反射实例化

  • getConstructor
  • getDeclaredConstructor
  • newInstance
    //实例化对象
    	Constructor con = stuClass.getConstructor();
    	Student stu = (Student) con.newInstance();
    	stu.setSid("001");
    	stu.setSname("宝宝");
    	System.out.println(stu);
    	
    	//有参 参数构造
    	Constructor con1 = stuClass.getConstructor(String.class,String.class);
    	Student stu02 = (Student) con1.newInstance("004","瑶宝");
    	System.out.println(stu02);
    
        //私有方法①
    	Constructor<Student> con3 = stuClass.getDeclaredConstructor(Integer.class);
    	con3.setAccessible(true);
    	Student stu04 = con3.newInstance(18);
    	System.out.println(stu04);

四.反射动态方法调用

  • getMethod
  • getDeclaredMethod
    //无参的公共方法
	Method method = stuClass.getMethod("hello");
	method.invoke(stu);
	
	//有参的公共方法
	Method method2 = stuClass.getMethod("hello", String.class);
	method2.invoke(stu, "辉辉");
	
	//②
	Method method3 = stuClass.getDeclaredMethod("add", Integer.class,Integer.class);
	method3.setAccessible(true);
	int n = (Integer) method3.invoke(stu, 1,2);
	System.out.println(n);

五.反射读写属性

  • getField
  • getDeclaredField
    //公有反射属性
	Field field = stuClass.getField("age");
	field.set(stu, 98);
	System.out.println(stu);
	
	//私有反射属性
	Field sname = stuClass.getDeclaredField("sname");
	sname.setAccessible(true);
	sname.set(stu, "小红花");
	System.out.println(stu);

到了这里,关于J2EE&反射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • J2EE&XML建模

    目录 用一个xml-config文件实例: 先看config.xml文件 再看 ActionModel ConfigModel ActionNotFoundException ForwardNotFoundException ConfigModelFactory ActionDuplicateDefinitionException ForwardDuplicateDefinitionException InvalidPathException 用一个xml-config文件实例:  ActionModel ConfigModel ForwardModel      ActionNotFoundExcepti

    2024年02月16日
    浏览(27)
  • J2EE&集合框架&Set

    目录 一.Set特点 特点:无序,不重复 思考:如果对List容器中的元素去重? 二.遍历:foreach,迭代器 三.扩容: 初始容量16,负载因子0.75,扩容增量1倍 性能参数:初始容量,负载因子 默认值: 初始容量16,负载因子0.75 示例:new HashSet(20, 0.5f); 四.HashSet 五.思考 1. 如何给Arra

    2024年02月13日
    浏览(28)
  • J2EE&通用分页02

    目录 一.重构-提取公用方法            1.为了进行公共方法的抽取,需要找出上面实习中的可通用部分,和差异化部分     2.公用方法封装思路       3. 具体实现 二.分页标签 2.1 准备一个Servlet  3.2 结果展示页面 三. 过滤器解决中文乱码问题 四.加入分页功能 四.封装分

    2024年02月15日
    浏览(31)
  • J2EE&集合框架&List

    目录 一.UML ①集合类图 ②线下教育平台用例图  二.List集合特点 ①学集合框架就是了解容器的数据结构(增删改查) ②有序的 可重复的 三.遍历方式 ① foreach ② iterator 迭代器 ③ for 四.LinkedList ①对比ArrayList是数据结构 Linkedlist: 链表 特点:查询修改慢,增加删除快 Arrayli

    2024年02月13日
    浏览(24)
  • J2EE&集合框架&Map

    目录 一.Map特点 1.无序,键值对,键不能重复,值可以重复 2.键重复则覆盖,没有继承Collection接口 二.遍历方式 1.拿到key,再拿值2.拿到映射关系,键值都有  取出保存所有Entry的Set,再遍历此Set即可 三.HashMap与Hashtable的区别 1.Hashtable更安全 2.JDK 1.8之前hashtable的key不能存放null

    2024年02月15日
    浏览(36)
  • J2EE&集合框架&set集合

    目录 一.Set特点 特点:无序,不重复 思考:如果对List容器中的元素去重? 二.遍历:foreach,迭代器 三.扩容: 初始容量16,负载因子0.75,扩容增量1倍 性能参数:初始容量,负载因子 默认值: 初始容量16,负载因子0.75 示例:new HashSet(20, 0.5f); 四.HashSet 五.思考 1. 如何给Arra

    2024年02月13日
    浏览(30)
  • J2EE项目部署与发布(Windows版本)

    目录 一、会议OA单体项目Windows部署 1.1 数据测试 1.2 项目部署 1.3 报错解决 1.4 最终效果 二、spa前后端分离项目Windows部署 2.1 后端代码测试 2.2 前端代码测试 2.3 项目部署 2.3.1 数据导入 2.3.2 后端部署 2.3.3 前端部署 2.3.3.1 Node.js环境配置 2.3.4 端口问题解决 2.3.4.1 method1 2.3.4.2 meth

    2024年02月07日
    浏览(33)
  • J2EE项目部署与发布(Linux版本)

    目录 一.jdktomcat安装 1.jdk的安装  1.2解压对应的安装包 1.3配置环境变量  2.tomcat的安装  二.mysql的安装 三.后端接口部署  后端部署 导入war包 修改端口  开启访问 1.jdk的安装 登录VMware Workstation Pro 然后连接MobaXterm      将 jdk tomcat mysql 导入到MobaXterm   1.2解压对应的安装包  

    2024年02月06日
    浏览(25)
  • J2EE自定义mvc【框架配置及功能】

    目录 一、配置步骤 二、配置框架前三步 导入相应的jar 导入相应的Class 导入xml文件 三、优化基本操作(增删改) 1、基础优化 编写实体类 编写BookDao类 优化BookDao JUnit测试 2、后台优化 3、前端优化 将框架打成jar包,然后导入新工程,并且把框架的依赖jar包导入进去 将分页标

    2024年02月12日
    浏览(41)
  • 虚拟机部署与发布J2EE项目(Linux版本)

                                                      🎬 艳艳耶✌️:个人主页                                                   🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》                                                     ⛺️ 越努力 ,越幸

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包