博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反射之Constructor类
阅读量:2350 次
发布时间:2019-05-10

本文共 1359 字,大约阅读时间需要 4 分钟。

一、反射

1、反射就是把Java类中的各种成分映射成相应的Java类。例如,一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量、方法、构造方法、包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示Java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field、Method、Constructor、Package等等。

2、一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象后,得到这些实例对象后有什么用呢?怎么用呢?这正是学习和应用反射的要点。

二、Constructor类

1、Constructor类代表某个类中的一个构造方法

2、得到某个类所有的构造方法:

例子:

Constructor[] constructors = Class.forName(“java.lang.String”).getConstructors();
3、得到某一个构造方法

例子:

Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
4、创建实例对象

通常方式:

String str = new String(new StringBuffer(“abc”));

反射方式:

String str = (String)constructor.newInstance(new StringBuffer(“abc”));
5、Class.newInstance()方法

例子:

String obj = (String)Class.forName(“java.lang.String”).newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象;
该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。

6、示例代码

package cn.sunft.day01.reflect;import java.lang.reflect.Constructor;public class ConstructorTest {	public static void main(String[] args) throws Exception {		//new String(new StringBuffer("abc"))		//获取指定参数的构造器		Constructor constructor1 = 				String.class.getConstructor(StringBuffer.class);		//构造的时候,需要传入一个StringBuffer的实例		String str1 = (String) 				constructor1.newInstance(new StringBuffer("abc"));		System.out.println(str1.charAt(2));//c	}}

转载地址:http://xflvb.baihongyu.com/

你可能感兴趣的文章
Apche Kylin启动报错:UnknownHostException: node1:2181: invalid IPv6 address
查看>>
Apache Kylin 2.3 构建Cube失败
查看>>
Apache Kylin 2.3 样例分析
查看>>
Apache Kylin 2.3 JDBC Java API 示例
查看>>
An internal error occurred during: "Initializing Java Tooling". java.lang.NullPointerException
查看>>
ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
查看>>
IntelliJ IDEA 2018 基本配置
查看>>
Spring+Mybatis+多数据源(MySQL+Oracle)
查看>>
Mybatis读取Oracle数据库Blob字段,输出原文件
查看>>
信用卡反欺诈
查看>>
线性回归
查看>>
浏览器以只读方式打开PDF
查看>>
CDH和HDP下载地址
查看>>
MysqlDataTruncation: Data truncation: Incorrect string value: '\xF0\x9D\x90\xB6"#...' for column
查看>>
.MysqlDataTruncation: Data truncation: Data too long for column 'content' at row 1
查看>>
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1146177 > 1048576).
查看>>
Elasticsearch 7.x生产配置
查看>>
AccessDeniedException: /opt/elasticsearch-7.0.0/config/elasticsearch.keystore
查看>>
bootstrap-table 父子表 联动表 完整例子
查看>>
Spring Cloud 2.x完整入门Demo样例(Greenwich版本)
查看>>