有了Class对象能做什么?

  • 创建类的对象:调用Class对象的newInstance()方法
  1. 类必须有一个无惨的构造器
  2. 类的构造器访问权限需要足够

思考?难道没有无参构造器就不能创建对象了嘛?只要在操作的时候明确的调用类中的构造器,并将参数传递进去之后,才可以实例化操作

  • 步骤如下
  1. 通过Class类的getDeclaredConstructor(Class … parameterTypes)取得本类的知道形参的构造器
  2. 向构造器的形参中传递一个对象数组进去,里边包含了构造器中所需的各个参数。
  3. 通过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语言访问检查
    1. 提高反射的效率,如果代码中必须使用反射,而该句代码需要频繁的被调用,那么请设置true。
    2. 使的原本访问的私有成员也可以访问
  • 参数值为false则指示反射的对象应该实施Java语言访问检查

注解和反射12.动态创建对象执行方法相关推荐

  1. 注解、反射、动态编译、字节码操作

    注解.反射.动态编译.字节码操作 前言:本篇博客将介绍Java中注解的定义.使用以及反射对Java动态性的支持和Java字节码操作,通过本篇内容,读者将对Java知识有更加深刻的理解,同时为后面And ...

  2. 第6章 Python中的动态可执行方法 第6.1节 Python代码编译

    在介绍动态可执行方法前,本节先介绍一下Python代码编译有关的知识,因为部分内容和动态执行有些关联. 一.    Python解释器的功能 Python虽然是解释型语言,但Python代码也是可编译 ...

  3. java中利用反射创建对象,利用java反射机制动态创建对象

    // 把JSON string 转化成类的对象 public static T bindModel(String content, Class cls) { try { JSONObject mjso ...

  4. java注解和反射原理_Java中的注解和反射

    最近又回顾了一下 Java 中的注解和反射知识点,注解在日常开发中使用很多,但是反射比较少.值得注意的是 Java 的各种框架底层源码中大量使用了注解和反射,阅读源码,这些是基本功,面试中这部分内容也 ...

  5. java注解的反射_Java注解与反射

    概要 本文主要是总结Java注解与反射的相关知识,加深自己对Java类动态语言的理解,同时为日后学习Spring打下基础. 注解: 什么是注解 Annotation的作用 不是程序本身,但是可以对程序 ...

  6. java注解和反射详解

    注解 什么是注解 Annotation是从JDK1.5开始引入的新技术 Annotation的作用: 不是程序本身,可以对程序做出解释 可以被其他程序读取 Annotation的格式: ​ 注解是以& ...

  7. Java基础学习(11)---Java注解和反射

    文章目录 一.注解概述 二.内置注解 三.元注解 四.自定义注解 五.反射概述 ★ 静态语言 VS 动态语言 反射机制 Java反射机制研究及应用 Java反射优点和缺点 六.Class类 获取Cla ...

  8. Java---->强烈安利0_0详解注解和反射机制

    时刻保持学习之心,方能成就不世功业 注解和反射 1. 注解 1.1 注解概念 注解:Java注解(Annotation)又称Java标注,是JDK5.0之后引入的一种注释机制,它可以标注在类,方法,参 ...

  9. 厚积薄发打卡Day24 :狂神说Java之注解与反射<全网最全(代码+笔记)>

    原视频地址: [狂神说Java]注解和反射,强烈推荐大家学习 什么是注解 什么是注解? Annotation是从JDK5.0开始引入的新技术. Annotation的作用: 不是程序本身,可以对程序作 ...

最新文章

  1. VAE变分自编码器实现
  2. 六种方法实现CSS三栏布局
  3. 最精准的view,canvas,surface之间的关系
  4. 程序员必知必会之maillist篇
  5. AI:一个20年程序猿的学习资料大全—BAT等面试资料/NECCS大赛资料/一二级建造师/网络编程爬虫等/公务员——只有你不想要的,没有你找不到的
  6. 前端学习(2458):评论模块
  7. 嘉年华专访 | 国际上智能运维研究
  8. spring mvc静态资源放行
  9. 成长 工作 游戏 英语 阅读
  10. 百度文库文档免费下载教程
  11. 一名合格的程序员应该是什么样子
  12. ws协议绑定服务器域名,Websocket直接域名连接
  13. delphi 之 override overload
  14. Android 如何禁用scheme跳转其他app
  15. 基于 ZYNQ 的无线超声数据传输及显示系统的实现
  16. 面试:WebSocket相关
  17. 思岚激光建图传感器slamtec Mapper使用便捷性测评
  18. 手机怎样和宽带连接无线路由器设置路由器连接服务器,怎么用手机设置无线路由器...
  19. 在iPad平板上配置Exchange邮箱
  20. VIP服务器间转送文件,vip服务器

热门文章

  1. 转载----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...
  2. 基于C-V2X智能网联搭建快速公交智慧交通
  3. 51单片机的4×4键盘识别与74LS164驱动数码显示
  4. NSIS之Modern UI
  5. 单车菜鸟上路:初征潭柘寺(多图)
  6. 【eclipse报错】must override a superclass method
  7. boostrap中scrollspy结合affix、以及affix的滚动与定位
  8. 根据小写26个字母,随机生成单词,乱文
  9. 无线通信之zigbee芯片和模块的选择
  10. 王者荣耀官网https://pvp.qq.com/web201605/wallpaper.shtml壁纸的python爬取