注解和反射12.动态创建对象执行方法
有了Class对象能做什么?
- 创建类的对象:调用Class对象的newInstance()方法
- 类必须有一个无惨的构造器
- 类的构造器访问权限需要足够
思考?难道没有无参构造器就不能创建对象了嘛?只要在操作的时候明确的调用类中的构造器,并将参数传递进去之后,才可以实例化操作
- 步骤如下
- 通过Class类的getDeclaredConstructor(Class … parameterTypes)取得本类的知道形参的构造器
- 向构造器的形参中传递一个对象数组进去,里边包含了构造器中所需的各个参数。
- 通过Constructor实例化对象
public class Test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {//获得Class对象Class c1 = Class.forName("lesson02.User");//构造一个对象//User user = (User)c1.newInstance//本质是调用了类的无参构造器//System.out.println(user);//通过构造器创建对象// Constructor constructor = c1.getDeclaredConstructor(String.class,int.class,int.class);// User user2 =constructor.newInstance("zz",001,001);// System.out.println(user2);//通过反射调用方法User user3 = (User)c1.newInstance();Method setName = c1.getDeclaredMethod("setName", String.class);setName.invoke("user3","zz");System.out.println(user3.getName());//通过反射操作属性User user4 = (User)c1.newInstance();Field name = c1.getDeclaredField("name");//不能直接操作私有属性,我们需要关闭程序的安全监测,属性或者方法name.setAccessible(true);//会降低效率name.set(user4,"zz");System.out.println(user4.getName);}}
Object invoke(Object obj,Object … args)
- Object对应原方法的返回值,若原方法无返回值,此时返回null
- 若原方法若为静态方法,此时形参Object obj可为null
- 若原方法形参列表为空,则Object[] args 为null
- 若原方法声明为private,则需要在此调用invoke()方法,显示调用方法对象的setAccessible(true)方法,可访问private的方法
setAccessible
- Method和Field、Constructor对象和setAccessible()方法
- setAccessible作用是启动和禁用访问安全检查的开关
- 参数值为true则指示反射的对象在使用时应该取消Java语言访问检查
- 提高反射的效率,如果代码中必须使用反射,而该句代码需要频繁的被调用,那么请设置true。
- 使的原本访问的私有成员也可以访问
- 参数值为false则指示反射的对象应该实施Java语言访问检查
注解和反射12.动态创建对象执行方法相关推荐
- 注解、反射、动态编译、字节码操作
注解.反射.动态编译.字节码操作 前言:本篇博客将介绍Java中注解的定义.使用以及反射对Java动态性的支持和Java字节码操作,通过本篇内容,读者将对Java知识有更加深刻的理解,同时为后面And ...
- 第6章 Python中的动态可执行方法 第6.1节 Python代码编译
在介绍动态可执行方法前,本节先介绍一下Python代码编译有关的知识,因为部分内容和动态执行有些关联. 一. Python解释器的功能 Python虽然是解释型语言,但Python代码也是可编译 ...
- java中利用反射创建对象,利用java反射机制动态创建对象
// 把JSON string 转化成类的对象 public static T bindModel(String content, Class cls) { try { JSONObject mjso ...
- java注解和反射原理_Java中的注解和反射
最近又回顾了一下 Java 中的注解和反射知识点,注解在日常开发中使用很多,但是反射比较少.值得注意的是 Java 的各种框架底层源码中大量使用了注解和反射,阅读源码,这些是基本功,面试中这部分内容也 ...
- java注解的反射_Java注解与反射
概要 本文主要是总结Java注解与反射的相关知识,加深自己对Java类动态语言的理解,同时为日后学习Spring打下基础. 注解: 什么是注解 Annotation的作用 不是程序本身,但是可以对程序 ...
- java注解和反射详解
注解 什么是注解 Annotation是从JDK1.5开始引入的新技术 Annotation的作用: 不是程序本身,可以对程序做出解释 可以被其他程序读取 Annotation的格式: 注解是以& ...
- Java基础学习(11)---Java注解和反射
文章目录 一.注解概述 二.内置注解 三.元注解 四.自定义注解 五.反射概述 ★ 静态语言 VS 动态语言 反射机制 Java反射机制研究及应用 Java反射优点和缺点 六.Class类 获取Cla ...
- Java---->强烈安利0_0详解注解和反射机制
时刻保持学习之心,方能成就不世功业 注解和反射 1. 注解 1.1 注解概念 注解:Java注解(Annotation)又称Java标注,是JDK5.0之后引入的一种注释机制,它可以标注在类,方法,参 ...
- 厚积薄发打卡Day24 :狂神说Java之注解与反射<全网最全(代码+笔记)>
原视频地址: [狂神说Java]注解和反射,强烈推荐大家学习 什么是注解 什么是注解? Annotation是从JDK5.0开始引入的新技术. Annotation的作用: 不是程序本身,可以对程序作 ...
最新文章
- VAE变分自编码器实现
- 六种方法实现CSS三栏布局
- 最精准的view,canvas,surface之间的关系
- 程序员必知必会之maillist篇
- AI:一个20年程序猿的学习资料大全—BAT等面试资料/NECCS大赛资料/一二级建造师/网络编程爬虫等/公务员——只有你不想要的,没有你找不到的
- 前端学习(2458):评论模块
- 嘉年华专访 | 国际上智能运维研究
- spring mvc静态资源放行
- 成长 工作 游戏 英语 阅读
- 百度文库文档免费下载教程
- 一名合格的程序员应该是什么样子
- ws协议绑定服务器域名,Websocket直接域名连接
- delphi 之 override overload
- Android 如何禁用scheme跳转其他app
- 基于 ZYNQ 的无线超声数据传输及显示系统的实现
- 面试:WebSocket相关
- 思岚激光建图传感器slamtec Mapper使用便捷性测评
- 手机怎样和宽带连接无线路由器设置路由器连接服务器,怎么用手机设置无线路由器...
- 在iPad平板上配置Exchange邮箱
- VIP服务器间转送文件,vip服务器
热门文章
- 转载----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...
- 基于C-V2X智能网联搭建快速公交智慧交通
- 51单片机的4×4键盘识别与74LS164驱动数码显示
- NSIS之Modern UI
- 单车菜鸟上路:初征潭柘寺(多图)
- 【eclipse报错】must override a superclass method
- boostrap中scrollspy结合affix、以及affix的滚动与定位
- 根据小写26个字母,随机生成单词,乱文
- 无线通信之zigbee芯片和模块的选择
- 王者荣耀官网https://pvp.qq.com/web201605/wallpaper.shtml壁纸的python爬取