Java反射相关-通过class得到一个类的全部架构

package com.huawei.pia;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class Person extends SuperClass1 implements Inter1,Inter2 {

private String name;
 private int age;
 
 public Person(String name,int age){
  this.name = name;
  this.age = age;
 }
 
 public Person(){};

public String getName() {
  return name;
 }

public void setName(String name) {
  this.name = name;
 }

public int getAge() {
  return age;
 }

public void setAge(int age) {
  this.age = age;
 }

@Override
 public String toString() {
  // TODO 自动生成的方法存根
  return "[" + this.name + ":" + this.age + "]";
 }

static class Hello{
  
  public static void main(String[] args) {
   Class<?> demo = null;
   try {
     demo = Class.forName("com.huawei.pia.Person");
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
   }
   
   Field[] field = demo.getDeclaredFields();
   for (int i = 0; i < field.length; i++) {
    //得到修饰符
    int mo = field[i].getModifiers();
    String priv = Modifier.toString(mo);
    //属性类型
    Class<?> type = field[i].getType();
    System.out.println("修饰符:     "+priv+",\n属性类型: "+type+",\n属性名:     "+field[i].getName());
   }
   
   //得到构造方法
   Constructor<?>[] cons = demo.getConstructors();
   for (int i = 0; i < cons.length; i++) {
    System.out.println("构造方法: "+cons[i].getName());
   }
   
   //得到接口
   Class<?> inter[] = demo.getInterfaces();
   for (int i = 0; i < inter.length; i++) {
    System.out.println("接口"+(i+1)+":   "+inter[i].getName());
   }
   
   //得到父类
   Class<?> superClass = demo.getSuperclass();
   System.out.println("父类:       "+superClass.getName());
  }
 }
}

时间: 2024-10-11 10:46:22

Java反射相关-通过class得到一个类的全部架构的相关文章

Java 反射相关整理

1. Class 类 Class 是一个类,封装了当前对象所对应的类的信息,一个类中有属性,方法,构造器等. 对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象.一个 Class 对象包含了特定某个类的有关信息. Class 对象只能由系统建立对象,一个类(而不是一个对象)在 Java 虚拟机中只会有一个 Class 实例. Class 对象的由来是将 class 文件读入内存,并为之创建一个 Class 对象. 获取 Class 类对象的三种方法 使用 Class.forNa

java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(1)

java学习一段时间之后,大家可能经常会听到反射这个词,那么说明java已经学习到一个高一点的层次了.接下来我会一步步和大家一起揭开java高级特性反射的神秘面纱. 首先介绍下类对象这个概念,可能会经常用到这个概念: 类对象:java中有句很经典的话"万事万物皆对象",相信大家都不陌生,这句话告诉了我们java的特征之一,那就是面向对象.java中类的概念我们都很熟悉,既然万事万物皆是对象,那么类是谁的对象呢?<对象的概念:一个类的实例>换句话说,类是谁的实例.如此就有了类

java 反射机制:运行时的类信息(为框架服务的Bug存在)

反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 换一种引出反射的说法是:当通过反射与一个未知的类型的对象打交道是,JVM只是简单地检查这个类,看它是属于哪个特定的类(就想RTTI那样).在用它做其他事情之前必须先加载那个类的Class对象.因此,那个类的.class文件对于JVM来说必须是可获取的:那么在本地机器上,要么通过网络获得

java反射机制剖析(三)—类类型Class

为了区别于我们常用的Class,因此给了个中文名类类型.目的就是为了知道此Class非彼Class.上一篇博客已经介绍了Class Loader,它的作用是根据提供的信息来加载类到内存中.我之前有提过这个类信息的提供者就是本篇博客要介绍的Class.提醒:一个类的Class对象和它的Instance是不一样的,切记,不然你会混乱的.开始了! 概念 Class类是所有类(注意是对象)的共有信息的抽象,比如该类实现的接口.对应的加载器.类名等等.一句话,类类型保存了每个类所对应的类型信息.每一个类都

java 反射机制与动态加载类学习要点

获取Class类的对象: 假设Foo是一个类,Foo foo = new Foo():则 第一种:Class c1 = Foo.class; 第二种:Class c2 = foo.getClass(); 第三种:Class c3 = Class.forName("com.nudt.reflection.Foo"); //会抛出异常 此时  c1 == c2 == c3 为true 也可以通过c1\c2\c3创建Foo的实例: Foo foo = (Foo)c1.newInstance(

Java反射基础(二)— Class类

上一篇博客中我们提到了ClassLoader,知道ClassLoader是用来动态加载某个Class文件到内存当中,但是这个Class文件是怎么生成的呢?从何而来?这又涉及到另一个概念-java.lang.Class. Class 是java的一个特殊类,对于我们定义的类.接口,它更算是一个抽象类.Class类用于封装被装入到JVM中的类(包括类和接口)的信息. 当一个类和接口被装入JVM时,就自动创建一个Class类的实例来表示这个类,也就是我们说的Class对象,收集了当前这个对象的基本信息

如何通过java反射将数据库表生成实体类?

首先有几点声明: 1.代码是在别人的基础进行改写的: 2.大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人: 3.刚刚毕业,水平有限,肯定有许多不足之处: 4.希望刚刚学习java的同学能有所启发. //这个是做转换的类,里面的DB只是封装了数据库的连接,大家可以用自己的,随意 package com.tt.util.gen.entity.tool; import java.io.File;import java.io.FileWriter;import java.io.IOExcep

分享Java中模拟Ping操作的一个类

似乎使用JavaPing的操作很少啊,不过我遇到了:最终解决了,在这里贴出一个中间过程中的类. import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; /** * Created by QiuJU * on 2014/9/21. */ public class SimplePing implements Runnable { private final Objec

Java反射第二课 动态加载类

在第一节课中我们讲的第三种方法 Class.forName("类的全称"); 不仅表示了类的类类型,还代表了动态加载类 请大家区分编译,运行 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 现在的开发工具比如eclipse把编译过程给隐藏了 下面做一个实验 比如用记事本编写下面的Office.java文件 class Office { public static void main(String[] args) { if(("Word").equals(ar