`
geelong
  • 浏览: 117260 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

反射 取得类的结构

阅读更多

 

package org.lxh.demo15.classinfodemo ;

import java.lang.reflect.Constructor ; // 导入构造方法的包

public class GetConstructorDemo01{

public static void main(String args[]){

Class<?> c1 = null ; // 声明Class对象

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化对象

}catch(ClassNotFoundException e){

e.printStackTrace() ;

}

Constructor<?> con[] = c1.getConstructors() ; // 取得一个类中的全部构造

for(int i=0;i<con.length;i++){

System.out.println("构造方法:" + con[i]) ; // 输出构造,直接打印

}

}

};

 

 

 

 

 

package org.lxh.demo15.classinfodemo ;

import java.lang.reflect.Constructor ; // 导入构造方法的包

public class GetConstructorDemo02{

public static void main(String args[]){

Class<?> c1 = null ; // 声明Class对象

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化对象

}catch(ClassNotFoundException e){

e.printStackTrace() ;

}

Constructor<?> con[] = c1.getConstructors() ; // 取得一个类中的全部构造

for(int i=0;i<con.length;i++){

Class<?> p[] = con[i].getParameterTypes() ; // 得到构造方法中的全部参数

System.out.print("构造方法:" ) ; // 输出构造,直接打印

System.out.print(con[i].getModifiers() + " ") ; // 得到修饰符

System.out.print(con[i].getName()) ; // 取得构造方法的名字

System.out.print("(") ;

for(int j=0;j<p.length;j++){

System.out.print(p[j].getName() + " arg" + i) ;

if(j<p.length-1){

// 判断此是否是最后一个参数

System.out.print(","); // 输出“,”

}

}

System.out.println("){}") ;

}

}

};

 

 

 

 

 

 

 

package org.lxh.demo15.classinfodemo ;

import java.lang.reflect.Constructor ; // 导入构造方法的包

import java.lang.reflect.Modifier ; // 导入构造方法的包

public class GetConstructorDemo03{

public static void main(String args[]){

Class<?> c1 = null ; // 声明Class对象

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化对象

}catch(ClassNotFoundException e){

e.printStackTrace() ;

}

Constructor<?> con[] = c1.getConstructors() ; // 取得一个类中的全部构造

for(int i=0;i<con.length;i++){

Class<?> p[] = con[i].getParameterTypes() ; // 得到构造方法中的全部参数

System.out.print("构造方法:" ) ; // 输出构造,直接打印

int mo = con[i].getModifiers() ; // 得到所要的访问权限

System.out.print(Modifier.toString(mo) + " ") ; // 得到修饰符

System.out.print(con[i].getName()) ; // 取得构造方法的名字

System.out.print("(") ;

for(int j=0;j<p.length;j++){

System.out.print(p[j].getName() + " arg" + i) ;

if(j<p.length-1){

// 判断此是否是最后一个参数

System.out.print(","); // 输出“,”

}

}

System.out.println("){}") ;

}

}

};

 

 

 

 

 

 

package org.lxh.demo15.classinfodemo ;

import java.lang.reflect.Field ; // 导入构造方法的包

import java.lang.reflect.Modifier ; // 导入构造方法的包

public class GetFieldDemo{

public static void main(String args[]){

Class<?> c1 = null ; // 声明Class对象

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化对象

}catch(ClassNotFoundException e){

e.printStackTrace() ;

}

{ // 本类属性

Field f[] = c1.getDeclaredFields() ; // 取得本类中的属性

for(int i=0;i<f.length;i++){

Class<?> r = f[i].getType() ; // 得到属性类型

int mo = f[i].getModifiers() ; // 得到修饰符的数字

String priv = Modifier.toString(mo) ; // 还原修饰符

System.out.print("本类属性:") ;

System.out.print(priv + " ") ;

System.out.print(r.getName() + " ") ; // 得到属性类型

System.out.print(f[i].getName()) ; // 输出属性名称

System.out.println(" ;") ;

}

}

{ // 公共属性

Field f[] = c1.getFields() ; // 取得本类中的公共属性

for(int i=0;i<f.length;i++){

Class<?> r = f[i].getType() ; // 得到属性类型

int mo = f[i].getModifiers() ; // 得到修饰符的数字

String priv = Modifier.toString(mo) ; // 还原修饰符

System.out.print("公共属性:") ;

System.out.print(priv + " ") ;

System.out.print(r.getName() + " ") ; // 得到属性类型

System.out.print(f[i].getName()) ; // 输出属性名称

System.out.println(" ;") ;

}

}

}

};

 

 

package org.lxh.demo15.classinfodemo ;

public class GetInterfaceDemo{

public static void main(String args[]){

Class<?> c1 = null ; // 声明Class对象

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化对象

}catch(ClassNotFoundException e){

e.printStackTrace() ;

}

Class<?> c[] = c1.getInterfaces() ; // 以数组形式返回实现的全部接口

for(int i=0;i<c.length;i++){

System.out.println("实现的接口名称:" + c[i].getName()) ; // 输出接口名称

}

}

};

 

 

 

 

package org.lxh.demo15.classinfodemo ;

import java.lang.reflect.Method ; // 导入构造方法的包

import java.lang.reflect.Modifier ; // 导入构造方法的包

public class GetMethodDemo{

public static void main(String args[]){

Class<?> c1 = null ; // 声明Class对象

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化对象

}catch(ClassNotFoundException e){

e.printStackTrace() ;

}

Method m[] = c1.getMethods() ; // 取得全部方法

for(int i=0;i<m.length;i++){

Class<?> r = m[i].getReturnType() ; // 得到返回值类型

Class<?> p[] = m[i].getParameterTypes() ; // 取得全部参数的类型

int xx = m[i].getModifiers() ; // 得到修饰符

System.out.print(Modifier.toString(xx) + " ") ; // 输出修饰符

System.out.print(r + " ") ;

System.out.print(m[i].getName()) ;

System.out.print("(") ;

for(int j=0;j<p.length;j++){

System.out.print(p[j].getName() + " " + "arg" + j) ;

if(j<p.length-1){

System.out.print(",") ;

}

}

Class<?> ex[] = m[i].getExceptionTypes() ; // 取出异常

if(ex.length>0){

System.out.print(") throws ") ;

}else{

System.out.print(")") ;

}

for(int j=0;j<ex.length;j++){

System.out.print(ex[j].getName()) ;

if(j<p.length-1){

System.out.print(",") ;

}

}

System.out.println() ;

}

}

};

 

 

 

 

package org.lxh.demo15.classinfodemo ;

public class GetSuperClassDemo{

public static void main(String args[]){

Class<?> c1 = null ; // 声明Class对象

try{

c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化对象

}catch(ClassNotFoundException e){

e.printStackTrace() ;

}

Class<?> c2 = c1.getSuperclass() ; // 取得父类

System.out.println("父类名称:" + c2.getName()) ;

}

};

 

 

 

 

 

package org.lxh.demo15 ;

interface China{ // 定义China接口

public static final String NATIONAL = "China" ; // 定义全局常量

public static final String AUTHOR = "李兴华" ; // 定义全局常量

public void sayChina() ; // 无参的,没有返回值的方法

public String sayHello(String name,int age) ; // 定义有两个参数的方法,并返回内容

}

public class Person implements China{

private String name ;

private int age ;

public Person(){ // 无参构造

}

public Person(String name){

this.name = name ; // 设置name属性

}

public Person(String name,int age){

this(name) ;

this.age = age ;

}

public void sayChina(){ // 覆写方法

System.out.println("作者:" + AUTHOR + ",国籍:" + NATIONAL) ;

}

public String sayHello(String name,int age){

return name + ",你好!我今年:" + age + "岁了!" ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

};

 

 

分享到:
评论

相关推荐

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    1. **获取枚举类**:要通过反射获取枚举类,首先需要得到其Class对象。这可以通过`Class.forName()`方法完成,提供枚举类的全限定名作为参数。 ```java Class&lt;Color&gt; colorClass = (Class) Class.forName(...

    java 利用反射获取内部类静态成员变量的值操作.docx

    ### Java 利用反射获取内部类静态成员变量的值操作 #### 一、引言 在Java编程中,反射是一个非常强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够创建和操作对象。本文将详细介绍如何使用...

    通过反射获取类的实例

    在本篇中,我们将深入探讨如何通过反射获取类的实例,以及相关的源码分析。 首先,我们需要了解`java.lang.Class`类。它是Java中的一个核心类,代表运行时的类信息。我们可以通过以下几种方式获取`Class`对象: 1....

    java 反射取得类的私有属性,通过私有属性取得属性值

    Java反射API提供了一系列类和接口,如`Class`、`Field`、`Method`等,它们让我们能够在运行时动态地获取类的信息,包括类的结构、方法签名以及字段等。这为编程提供了极大的灵活性,尤其是在处理第三方库或者进行元...

    用反射的方式获取父类中的所有属性和方法

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作对象的内部结构,包括类的属性、方法以及构造器。本文将深入探讨如何使用反射来获取父类中的所有属性和方法,这对于理解和调试...

    反射获取jar文件中的类

    反射获取jar文件中的类 在 Java 中,反射是一种强大的技术,允许我们在运行时检查和修改类的结构和行为。今天,我们将学习如何使用反射获取 jar 文件中的类、方法等信息。 反射机制 在 Java 中,反射机制是指在...

    反射获取自定义特性.zip

    本文将深入探讨如何通过反射获取类的自定义特性,并创建和使用自定义特性类。 首先,我们需要理解什么是特性(Attribute)。在.NET框架中,特性是一种元数据,可以附加到代码元素(如类、方法、属性等)上,为...

    反射私有内部类的例子

    通过反射,可以动态地获取类的信息并操作其字段、方法以及构造器等。本文将详细介绍如何利用反射机制访问和实例化一个私有的内部类,并通过代码示例进行说明。 #### 二、反射概述 反射是Java语言提供的一种能够在...

    Java自定义注解使用反射获取字段注解

    本文将深入探讨如何通过反射机制来获取自定义注解以及其在字段上的应用。 首先,我们需要了解什么是自定义注解。自定义注解是以`@`开头,后跟自定义的名称。定义一个注解的基本结构如下: ```java import java....

    java反射例子,封装了一个反射帮助类

    总结来说,Java反射提供了一种强大的机制,允许我们在运行时检查和操作类的结构和行为。通过封装反射帮助类,我们可以使这种能力更加易于使用,提高代码的可读性和可维护性。在实际开发中,反射常用于插件系统、序列...

    反射工具可查看类的很强大

    通过反射,我们可以动态地获取类的信息,包括类名、属性、方法、构造器等,并能创建对象、调用方法、访问字段,甚至修改私有成员。这在很多场景下非常有用,如插件系统、框架开发、元数据处理等。 标题“反射工具可...

    VB.NET 反射类属性名称

    这个“VB.NET 反射类属性名称”主题聚焦于如何利用反射来获取或设置类中特定属性的值,尤其是当我们只知道属性的名称,而没有直接的引用时。 反射的基本原理是通过System.Reflection命名空间中的类来实现的。在这个...

    利用反射,根据类得完全限定名获得该类得实例

    ### 反射技术在Java中的应用:根据类的完全限定名获取其实例 #### 引言 在Java编程中,反射是一种强大的工具,允许程序在运行时检查和修改其结构和行为。通过反射,我们可以根据类的完全限定名(Fully Qualified ...

    Java反射机制——类的加载方法,创建对象,获取方法以及结构

    在Java中,反射机制是在程序运行时,通过Class对象来获取类的结构信息,包括类名、字段、方法、构造器等,并能直接操作这些元素。类的加载完成后,JVM会在方法区创建一个对应的Class对象,这个对象就代表了类的所有...

    650.648.JAVA基础教程_反射-获取运行时类的属性结构及其内部结构(650).rar

    在本教程中,我们将深入探讨如何利用反射来获取运行时类的属性结构及其内部结构。 首先,让我们了解什么是反射。在Java中,反射机制允许我们通过类名(String类型)动态地创建对象,访问类的私有成员,调用私有方法...

    java反射工具类 ReflectionUtils

    通过`java.lang.Class`类和相关的API,我们可以获取类的结构信息并进行操作。 2. **ReflectionUtils简介** ReflectionUtils通常是一个自定义的工具类,包含了一系列静态方法,用于简化和封装反射操作,避免了直接...

    651.649.JAVA基础教程_反射-获取运行时类的方法结构(651).rar

    本教程将深入讲解如何利用反射机制来获取Java类的方法结构。 首先,我们要了解什么是类的结构。在Java中,一个类的结构包括它的类名、属性(字段)、构造器以及方法。当我们的程序运行时,如果需要在运行时获取这些...

    652.650.JAVA基础教程_反射-获取运行时类的方法的内部结构(652).rar

    这个教程"652.650.JAVA基础教程_反射-获取运行时类的方法的内部结构(652)"显然是针对Java反射机制的深入学习,特别是关注如何获取类的方法及其内部结构。以下是对这个主题的详细解释。 1. **反射的基本概念** - ...

    Java的反射机制讲解案例代码 Class类、 获取类的结构信息:构造函数、方法和字段,动态创建对象、调用方法和设置属性

    内容概要 Java的反射机制是指在运行时通过分析类的信息实现动态调用类的方法和访问类的属性...掌握反射机制的目标是能够在运行时获取类的信息,并灵活地利用这些信息来完成所需的操作,以增加程序的灵活性和可扩展性。

    HardwareInformation_反射_

    在编程领域,反射是一种强大的工具,它允许程序在运行时检查自身并操作其内部结构,如类、对象、方法和属性。在这个特定的场景中,"HardwareInformation_反射_" 提到的是利用反射来获取系统硬件信息的过程。在Java、...

Global site tag (gtag.js) - Google Analytics