这一章节我们来讨论一些利用反射提取类的方法与构造器。
1.例子
package com.ray.ch11;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class Test {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
try {
Class<Person> personClass = (Class<Person>) Class
.forName("com.ray.ch11.Person");
for (Method method : personClass.getMethods()) {
System.out.println(method);
}
for (Constructor constructor : personClass.getConstructors()) {
System.out.println(constructor);
}
} catch (ClassNotFoundException e) {
System.out.println("class not found");
}
}
}
class Person {
public Person(int age) {
}
public Person(String sex) {
}
static {
System.out.println("loading person");
}
public void say() {
}
public void sleep() {
}
public void run() {
}
}
输出:
loading person
public void com.ray.ch11.Person.say()
public void com.ray.ch11.Person.run()
public void com.ray.ch11.Person.sleep()
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
public com.ray.ch11.Person(int)
public com.ray.ch11.Person(java.lang.String)
从输出里面可以看见,除去我们自己定义的三个方法和两个构造器,还有一些属于Object的公共方法。
注意:这里显示的方法和构造器只能显示public的,private和protected的方法或者构造器则不能显示。
我们修改一下上面的代码:
package com.ray.ch11;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class Test {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
try {
Class<Person> personClass = (Class<Person>) Class
.forName("com.ray.ch11.Person");
for (Method method : personClass.getMethods()) {
System.out.println(method);
}
for (Constructor constructor : personClass.getConstructors()) {
System.out.println(constructor);
}
} catch (ClassNotFoundException e) {
System.out.println("class not found");
}
}
}
class Person {
private Person(int age) {
}
protected Person(String sex) {
}
static {
System.out.println("loading person");
}
protected void say() {
}
private void sleep() {
}
public void run() {
}
}
输出:
loading person
public void com.ray.ch11.Person.run()
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
从输出里面看出,明显是少了一部分private和protected的东西。
2.还有其他的用法是当不知道某一个类的方法或者构造器的时候,这个就比较方便的。
package com.ray.ch11;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class Test {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
try {
Class<String> strClass = (Class<String>) Class
.forName("java.lang.String");
for (Method method : strClass.getMethods()) {
System.out.println(method);
}
for (Constructor constructor : strClass.getConstructors()) {
System.out.println(constructor);
}
} catch (ClassNotFoundException e) {
System.out.println("class not found");
}
}
}
输出:
由于太多不在这里输出
上面的代码就是显示String类的方法和构造器的代码。
总结:这一章节我们展示了利用反射提取类的方法与构造器。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
从头写React-like框架的工程搭建实现 最近在网上看到了 Build your own React 这篇文章,作者从零开始实现了一个简易类 React 框架,虽然没有过多的优化,但 React 中的核心思想 Concurrent Mode,Fiber ...
从头开始学习Java课程-资料来源PillsInformática。
Java-3D游戏引擎与基本游戏Java中使用LWJGL,OpenGL,OpenAL等的3D游戏引擎。 从头开始
外卖订餐java源码 你会学到什么 通过 Java 片段的构建块,您将能够立即了解 Java 编程的要点。 你需要什么 勇敢地浏览存储库! 或替代开源 JDK 1.8 版本 截至今天,该存储库已通过测试 Oracle JDK 1.8 OpenJDK 1.8 ...
视频 https://www.bilibili.com/video/BV1914y1s7hi
视频 https://www.bilibili.com/video/BV1914y1s7hi
军工行业2021年度投资策略:而今迈步从头越-20201115-招商证券.pdf
赖世雄英语从头学 下载-附件资源
java实现验证码功能源码 Java Periphery 是一个高性能库,用于用户空间 Linux 中的 GPIO、LED、PWM、SPI、I2C、MMIO 和串行外设 I/O 接口访问。 我没有尝试从头开始构建它并生成 JNI 包装器。 这节省了大量手动编码...
动作源码java RuLeStudio 开源应用程序利用它的核心功能并以用户友好的方式显示它们。 快速开始 注意:您需要安装Java(至少1.8版)并可以从命令行使用它! 转到并选择您的RuLeStudio版本。 最新版本应包含手册和...
Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程下载和断点续传功能,同时确保线程安全。该项目的主要特点如下: 1. 多线程下载:项目采用了Java的...
本资料是UCSF DOCK的使用案例分享的输入资料,将使用DOCK 6.11自带的片段库,使用DOCK/RDKit的 DOCK_D3N功能从头设计分子。便于使用者直接从这部分设计工作开始,不需花时间来准备输入文件。
乙二醇2020年度策略报告:“熊”关漫道真如铁,而今迈步从头越-20191230-光大期货-36页.rar
一份很全面关于java的常用方法总结,开发时,我们记不了那么多方法,所以这个htm文档很适合大家在开中应用 字符串 1、获取字符串的长度 length() 2 、判断字符串的前缀或后缀与已知字符串是否相同 前缀 startsWith...
例如,当我们想从头开始创建RPC框架时,我们需要了解Java动态代理和序列化。 这是清单: 技术 模块/链接 设想 地位 评论 动态代理 动态代理 RPC 智商 完毕 字节程序Java代理, 乐器, 字节好友 字节码程序java-...
《Java Web服务:构建与运行》通过提供混合架构概述、完整的工作代码示例以及短而精确的编译、部署和执行应用程序的指示,采用明确实用的方法来处理这些技术。你将学习如何从头开始编写Web服务以及集成现有服务到你...
开发人员零java-Mentorama 在此存储库中,将从头开始插入Java Developer模块的Mentorama课程期间开发的所有练习。
3D游戏从头编-网上收集,很基础. 第一回:开发环境 第二回:3D基本概念 第三回:第一个D3D程序 第四回:渲染顶点 第五回:渲染索引顶点 第六回:摄象机 第七回:灯光 第八回:纹理 第九回:3D模型(.x)
java源码字符串缓冲区 这是 Java String 、 StringBuilder和StringBuffer方法/API 的完整指南。 本指南的源代码示例在我们的本地开发环境中进行了良好的测试,您可以将这些示例用作无错误。 您可以在 上了解更多信息...
用自己2。4万粉丝的抖音创业粉引流账号来实打实的进行试错,永久封禁总结出来的一些如何规避抖音创业粉引流账号的一些方法以及如何进行解决,...六、如果从头再来我会做好这几点 七、机会永远握在自己手中 八、总结复盘