反射:

Java反射机制:指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。Java的反射机制允许在对类未知的情况下,获取类相关信息的方式变得更加多样灵活,调用类中相应方法,是Java增加其灵活性与动态性的一种机制。

Java反射机制主要提供了以下功能:

  1. 在运行时判断任意一个对象所属的类;
  2. 在运行时构造任意一个类的对象;
  3. 在运行时判断任意一个类所具有的成员变量和方法;
  4. 在运行时调用任意一个对象的方法。

Class类中存在以下几个重要的方法:

  • getName():

一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类的简要描述。

  • newInstance()

该方法可以根据某个Class对象产生其对应类的实例。需要强调的是,它调用的是此类的默认构造方法。

  • getClassLoader()

返回该Class对象对应的类的类加载器。

  • .getComponentType()

该方法针对数组对象的Class对象,可以得到该数组的组成元素所对应对象的Class对象。例如:

int[] ints = new int[]{1,2,3};

Class class1 = ints.getClass();

Class class2 = class1.getComponentType();

而这里得到的class2对象所对应的就应该是int这个基本类型的Class对象。

  • getSuperClass()

返回某子类所对应的直接父类所对应的Class对象。

  • isArray()

判定此Class对象所对应的是否是一个数组对象。

小实例:

运行时输入类名创建对象,然后输入方法名,该对象调用该方法;

  1. 利用Scanner来获取输入的类的名字

注意:要调用的类写在包内的话,输入时的格式为:包名.类名

Scanner sc = new Scanner(System.in);System.out.println("请输入类名:");String classname = sc.nextLine();// 获取类名;

2..根据获取到的类名,创建类( 调用Class.forName(className)方法),该过程会抛出一个没有找到类的一个异常;

        Class c;
//要调用的类class写在包内的话,要加上包.类;try {c = Class.forName(classname);} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}

3.根据我们创建的类,创建构造器(调用getConstructo()方法);

Constructor con = c.getConstructor(int.class);

getConstructor方法里面需要的参数类型,是你要调用的构造方法的参数类型。如果是String型的参数的话,那么该方法写的就是 c.getConstructor(String.class)

4. 获取要传给需要调用的构造方法的参数值

System.out.println("请输入构造的参数");
String cna=sc.nextLine();

5.根据构造器创建对象;

Object o=con.newInstance(Integer.parseInt(cna));
//Integer.parseInt(cna),把string类型的数据,转换为int型

6.对象创建好之后,就可以调用方法了,首先是输入我们的方法名

System.out.println("请输入方法名:");
String name = sc.nextLine();// 获取输入的方法名;

7.得到方法名之后,获取方法。

Method me=c.getMethod(name, int.class);//getMethod(方法名, 方法的参数类型)

8.在对象上面调用方法;

me.invoke(o,14);//me.invoke(对象,方法的参数);

这样一个动态绑定的过程就完成了。当然这个过程会有很多的异常需要抛出。

转载于:https://www.cnblogs.com/hesi/p/6089271.html

Java之类的构造器(反射)相关推荐

  1. Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持

    Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(          ) A Java反射主要涉及的类如C ...

  2. Java基础10(反射)

    Java基础10(反射) 1 什么是反射 官方解释:反射(reflection)技术通常被用来检测和改变应用程序在 Java 虚拟机中的行为表现.它是一个相对而言比较高级的技术,反射是一种强有力的技术 ...

  3. Java:注解和反射

    (一)注解 1注解入门 Annotation是jdk1.5开始引入的新技术. Annotation的作用: (1)不是程序本身,可以对程序作出解释: (2)可以被其他程序(例如编译器)读取. Anno ...

  4. Java知识点总结(反射-获取类的信息)

    Java知识点总结(反射-获取类的信息) @(Java知识点总结)[Java, 反射] 应用反射的API,获取类的信息(类的名字.属性.方法.构造器等) import java.lang.reflec ...

  5. Java中注解与反射的使用方法及场景,强行解释一波!

    作者:BudingCode blog.csdn.net/m0_55221239/article/details/115025182 注解 注解定义 Java 注解(Annotation)又称 Java ...

  6. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

  7. java类加载机制、反射、动态代理详解

    类的加载.连接和初始化(系统可能在第一次使用某个类时加载该类, 也可能采用预加载机制来加载某个类)动态代理实现 1.JVM和类 当调用 java 命令运行某个 Java 程序时, 该命令将会启动一个 ...

  8. java.lang.Class:是反射的源头

    ​​​​​​一.反射概述 1. java.lang.Class:是反射的源头 我们创建一个类,通过编译,生成对应的.calss文件,之后使用java.exe加载(jvm的类加载器)此.class文件, ...

  9. java基础- 注解和反射

    1. 注解(Annotation) 1. 什么是注解 Annotation是从JDK5.0开始引入的新技术. Annotation的作用 : 不是程序本身,可以对程序作出解释.(这一点和注释(comm ...

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

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

最新文章

  1. 数学与 AI「融通」 ,徐宗本院士进行超强“迁移学习”
  2. 如何给mysql用户分配权限
  3. KMeans聚类算法Hadoop实现
  4. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): dao.UserDao.selectU
  5. 离散图 java,Java实现离散Arnold变换(图像处理)
  6. Mysql数据库(九)——mysql高阶语句(下)
  7. mysql --skip-locking_skip-external-locking – MySQL性能参数详解
  8. 你知道这个C#开发跨平台APP的样例介绍开源项目吗?
  9. STM32利用光敏二极管实现光度测量
  10. Callgrind:调用图生成缓存和分支预测分析器
  11. Java 算法 字串统计
  12. PCL综合开发(一):Qt 5.14 + PCL 1.8.1 +VS 2017环境配置
  13. MYSQL数据库字符编码设置
  14. Drug X跨越鸿沟:一个生物科学家的新药研发跋涉记
  15. python求小于n的最大素数_枚举1--求小于n的最大素数
  16. 缓和曲线回头曲线交点法坐标计算实例
  17. 虚拟搭建局域网模拟器_如何建立虚拟局域网
  18. linpack学习记录
  19. 第九章 数据库其他对象
  20. 大公司病,太TM形象了!

热门文章

  1. c语言百文百鸡问题答案,python_百文买百鸡问题
  2. inputstream 初始化_如何完美回答面试官问的Mybatis初始化原理!
  3. matlab字符和字符串,MATLAB字符和字符串
  4. python udp创建addr_一篇文章搞定Python 网络编程之UDP协议
  5. java9 反应编程_Java9第四篇-Reactive Stream API响应式编程
  6. android 混合开发 图片,混合开发的大趋势之一React Native之Image
  7. window连接树莓派linux桌面,远程连接Raspberry Pi(树莓派)图形用户界面(X Window)
  8. EdgeGallery:聚焦 5 大行业场景,MEC 开源平台将 5G 能力拓展到边缘
  9. 用计算机弹正义之道,正义之道
  10. python灰色关联度分析代码_灰色关联分析法步骤 - osc_uwnmtz9n的个人空间 - OSCHINA - 中文开源技术交流社区...