Java之类的构造器(反射)
反射:
Java反射机制:指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。Java的反射机制允许在对类未知的情况下,获取类相关信息的方式变得更加多样灵活,调用类中相应方法,是Java增加其灵活性与动态性的一种机制。
Java反射机制主要提供了以下功能:
- 在运行时判断任意一个对象所属的类;
- 在运行时构造任意一个类的对象;
- 在运行时判断任意一个类所具有的成员变量和方法;
- 在运行时调用任意一个对象的方法。
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对象所对应的是否是一个数组对象。
小实例:
运行时输入类名创建对象,然后输入方法名,该对象调用该方法;
- 利用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之类的构造器(反射)相关推荐
- Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持
Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( ) A Java反射主要涉及的类如C ...
- Java基础10(反射)
Java基础10(反射) 1 什么是反射 官方解释:反射(reflection)技术通常被用来检测和改变应用程序在 Java 虚拟机中的行为表现.它是一个相对而言比较高级的技术,反射是一种强有力的技术 ...
- Java:注解和反射
(一)注解 1注解入门 Annotation是jdk1.5开始引入的新技术. Annotation的作用: (1)不是程序本身,可以对程序作出解释: (2)可以被其他程序(例如编译器)读取. Anno ...
- Java知识点总结(反射-获取类的信息)
Java知识点总结(反射-获取类的信息) @(Java知识点总结)[Java, 反射] 应用反射的API,获取类的信息(类的名字.属性.方法.构造器等) import java.lang.reflec ...
- Java中注解与反射的使用方法及场景,强行解释一波!
作者:BudingCode blog.csdn.net/m0_55221239/article/details/115025182 注解 注解定义 Java 注解(Annotation)又称 Java ...
- Java基础13:反射与注解详解
Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...
- java类加载机制、反射、动态代理详解
类的加载.连接和初始化(系统可能在第一次使用某个类时加载该类, 也可能采用预加载机制来加载某个类)动态代理实现 1.JVM和类 当调用 java 命令运行某个 Java 程序时, 该命令将会启动一个 ...
- java.lang.Class:是反射的源头
一.反射概述 1. java.lang.Class:是反射的源头 我们创建一个类,通过编译,生成对应的.calss文件,之后使用java.exe加载(jvm的类加载器)此.class文件, ...
- java基础- 注解和反射
1. 注解(Annotation) 1. 什么是注解 Annotation是从JDK5.0开始引入的新技术. Annotation的作用 : 不是程序本身,可以对程序作出解释.(这一点和注释(comm ...
- 厚积薄发打卡Day24 :狂神说Java之注解与反射<全网最全(代码+笔记)>
原视频地址: [狂神说Java]注解和反射,强烈推荐大家学习 什么是注解 什么是注解? Annotation是从JDK5.0开始引入的新技术. Annotation的作用: 不是程序本身,可以对程序作 ...
最新文章
- 数学与 AI「融通」 ,徐宗本院士进行超强“迁移学习”
- 如何给mysql用户分配权限
- KMeans聚类算法Hadoop实现
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): dao.UserDao.selectU
- 离散图 java,Java实现离散Arnold变换(图像处理)
- Mysql数据库(九)——mysql高阶语句(下)
- mysql --skip-locking_skip-external-locking – MySQL性能参数详解
- 你知道这个C#开发跨平台APP的样例介绍开源项目吗?
- STM32利用光敏二极管实现光度测量
- Callgrind:调用图生成缓存和分支预测分析器
- Java 算法 字串统计
- PCL综合开发(一):Qt 5.14 + PCL 1.8.1 +VS 2017环境配置
- MYSQL数据库字符编码设置
- Drug X跨越鸿沟:一个生物科学家的新药研发跋涉记
- python求小于n的最大素数_枚举1--求小于n的最大素数
- 缓和曲线回头曲线交点法坐标计算实例
- 虚拟搭建局域网模拟器_如何建立虚拟局域网
- linpack学习记录
- 第九章 数据库其他对象
- 大公司病,太TM形象了!
热门文章
- c语言百文百鸡问题答案,python_百文买百鸡问题
- inputstream 初始化_如何完美回答面试官问的Mybatis初始化原理!
- matlab字符和字符串,MATLAB字符和字符串
- python udp创建addr_一篇文章搞定Python 网络编程之UDP协议
- java9 反应编程_Java9第四篇-Reactive Stream API响应式编程
- android 混合开发 图片,混合开发的大趋势之一React Native之Image
- window连接树莓派linux桌面,远程连接Raspberry Pi(树莓派)图形用户界面(X Window)
- EdgeGallery:聚焦 5 大行业场景,MEC 开源平台将 5G 能力拓展到边缘
- 用计算机弹正义之道,正义之道
- python灰色关联度分析代码_灰色关联分析法步骤 - osc_uwnmtz9n的个人空间 - OSCHINA - 中文开源技术交流社区...