Class对象、反射机制、获取Constructor构造方法
1、Class对象的三种创建方法(Class首字母大写)
public class Demo {
public static void main(String[] args){
Object obj=new Object();//方法一:先new对象,再调用方法,创建Class对象c1
Class c1=obj.getClass();
Class c2=Object.class;//方法二:使用.class属性,无需new对象,直接创建Class对象c2
try {
//方法三(推荐):调用Class类的forName方法,不需考虑类是否存在,功能强大。
Class c3=Class.forName("java.lang.Object");
System.out.println("c3哈希值:"+c3.hashCode());//哈希值判断是否指向同一对象
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("c1哈希值:"+c1.hashCode());
System.out.println("c2哈希值:"+c2.hashCode());
}
}
Class对象的价值:反射机制。
Class对象可以看作某个类的影子,通过影子,可以获得这个类的方法、属性等。
如下案例中,Demo.java中的Class对象c是Example.java的影子。通过c,获得Examp中的方法类型、参数类型等。


2、获得Constructor构造方法(java.lang.reflect.Constructor包下)
class.getConstructors() 获取所有公有public构造方法。()内带参数,则获取指定的public构造方法。
class.getDeclaredConstructors() 获取所有构造方法。()内带参数,则获取指定构造方法。
构造方法Constructor的一些属性:getModifiers修饰符、getName名字、getParameterTypes参数类型
public class Demo {
public static void main(String[] args) {
try {
Class c = Class.forName("Example");//创建类对象。同一包下,直接使用
Constructor cons[] = c.getDeclaredConstructors();//获取Example中的所有构造方法
for (Constructor con : cons) {//con.getModifiers()返回Int型,所以转字符串
System.out.print(Modifier.toString(con.getModifiers()) + " ");//获取修饰符
System.out.println(con.getName());//方法名
Class paras[] = con.getParameterTypes();//方法中的参数类型
for (int i = 0; i < paras.length; i++) {
System.out.println(paras[i].getSimpleName());//参数类型的简化名
}
}
//无参数的构造方法。Example中toString
Constructor cs1 = c.getDeclaredConstructor();//Example中无参数的构造方法
Object obj = cs1.newInstance();//实例化
System.out.println(obj.toString());//调用Example中toString方法
//1个参数的构造方法。Example中id赋值123
Constructor cs2 = c.getDeclaredConstructor(int.class);//Example中int型参数的构造方法
obj = cs2.newInstance(123);//实例化
System.out.println(obj.toString());//调用Example中toString方法
//3个参数的构造方法。Example中id、name、price赋值
Constructor cs3 = c.getDeclaredConstructor(int.class, String.class, double.class);//Example中3参数的构造方法
cs3.setAccessible(true);//private私有方法无法使用,故获取权限
obj = cs3.newInstance(123, "反射", 3.14);//实例化
System.out.println(obj.toString());//调用Example中toString方法
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
public class Example {
int id;
String name;
double price;
//Alt+Insert,Constructor快速创建构造方法
public Example() {
}
public Example(int id) {
this.id = id;
}
private Example(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
//Alt+Insert,toString快速创建构造方法
public String toString() {//返回Example的值
return "Example{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}
Class对象、反射机制、获取Constructor构造方法的更多相关文章
- Day16_89_通过反射机制获取所有构造方法
通过反射机制获取某个特定的构造方法 * 代码 import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; publ ...
- Day16_90_通过反射机制获取某个特定的构造方法
通过反射机制获取某个特定的构造方法 public class ReflectTest13 { public static void main(String[] args) throws ClassNo ...
- java反射机制获取自定义注解值和方法
由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...
- java 中利用反射机制获取和设置实体类的属性值
摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...
- Day16_91_通过反射机制获取父类和父接口
通过反射机制获取父类和父接口 * 代码: import java.net.InterfaceAddress; public class ReflectTest14 { public static vo ...
- Day15_87_通过反射机制获取某个特定的方法
通过反射机制获取某个特定的方法 反射是通过 方法名+形参列表来区分各个方法的(形参列表要用class类型.加.class) 示例代码 import java.lang.reflect.Method; ...
- Day15_86_通过反射机制获取所有方法(method)
通过反射机制获取所有方法(method) import java.lang.reflect.Field; import java.lang.reflect.Method; import java.la ...
- Day14_83_反射机制获取某个特定属性的各部分
反射机制获取某个特定属性的各部分 * 通过属性名(变量名)来获取一个属性整体 例如: Field userNoField=c.getDeclaredField("userNo"); ...
- Day14_81_反射机制获取Class属性
反射机制获取Class属性 获取属性 方法一: Class对象 . getFields();只能用来获取公开的属性,不能获取有私有的或者受保护的属性 获取属性 方法二: Class对象 . getDe ...
- kettle job如何利用java的反射机制获取执行的sql语句
kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制 ...
随机推荐
- SE Springer小组之《Spring音乐播放器》可行性研究报告一、二(转载)
此文转载自组员小明处~~ 1 引言 1.1编写目的 <软件工程>课程,我们团队计划开发一个音乐播放器.本文档是基于网络上现有的音乐播放器的特点,团队计划实现的音乐播放器功能和团队 ...
- Atcoder D - Knapsack 1 (背包)
D - Knapsack 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement The ...
- SpringMVC-RESTRUL___CRUD知识点总结
RESTful风格 <!-- 携带surveyId去后台 --><!-- RESTFUL风格:/xxx/23 --><!-- 接收方式:@PathVariable注解 - ...
- 深入理解 Laravel 中 config 配置加载原理
Laravel的配置加载其实就是加载config目录下所有文件配置.如何过使用php artisan config:cache则会把加载的配置合并到一个配置文件中,下次请求就不会再去加载config目 ...
- ubuntu安装steam
增加第三方自由库的软件支持 sudo add-apt-repository multiverse 增加更新支持包 sudo add-apt-repository multiverse 安装steam ...
- PP模块的主要功能及标准业务流程
主要功能:1.SOP (Sales and operations Planning).2.资源分配计划划 (Distribution Resource Planning)3.生产计划编制 (Produ ...
- python使用原始套接字 解析原始ip头数据
使用底层套接字解码底层流量,是这次做的重点工作. 首先来捕获第一个包 # coding:utf-8import socket # 监听的主机IP host = "192.168.1.100& ...
- PostgreSQL之性能优化(转)
转载自:https://blog.csdn.net/huangwenyi1010/article/details/72853785 解决问题 前言 PostgreSQL的配置参数作为性能调优的一部分, ...
- Jenkins之发送html附件邮件配置
邮件配置: 邮件内容范例: ${FILE,path="C:\\Users\\Administrator\\.jenkins\\workspace\\XXX自动化测试工程目录\\$JOB_BA ...
- Layui_2.x_上传插件使用
一.上传类 package com.ebd.application.common.utils; import java.awt.geom.AffineTransform; import java.aw ...