首先我们在person包中新建一个Person.java:

package person;

import sex.Sex;

public class Person{
private String name = null;
private int age = 0;
private Sex sex = null;
private String birthday = null; public Person(){};
public Person(String name, int age, Sex sex, String birthday){
String birMatch = "\\d{4}-\\d{2}-\\d{2}";
this.name = name;
this.age = age;
this.sex = sex;
if(birthday.matches(birMatch)){
this.birthday = birthday;
}
}
public void setInfo(String name, int age, Sex sex, String birthday){
String birMatch = "\\d{4}-\\d{2}-\\d{2}";
this.name = name;
this.age = age;
this.sex = sex;
if(birthday.matches(birMatch)){
this.birthday = birthday;
}
}
public String getPerName(){
return this.name;
}
public int getAge(){
return this.age;
}
public Sex getSex(){
return this.sex;
}
public String getBirthday(){
return this.birthday;
}
public String toString(){
return this.name + ", " + this.age + " years old, " + this.sex + ", " + this.birthday;
}
}

  然后在sex包中建立一个枚举Sex.java:

package sex;

public enum Sex{
MALE, FEMALE;
}

  再在main包的主方法取得Person类的完整结构:

package main;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method; import person.Person;
import sex.Sex; public class Main {
public static void main(String[] args){
try {
Class<?> cls = Class.forName("person.Person"); //打开类
Field[] var = cls.getDeclaredFields(); //取得类的属性
Constructor<?>[] consMeth = cls.getConstructors(); //取得类的所有构造函数
Method[] meth = cls.getMethods(); //取得类的所有方法
for(int i=0; i<var.length; i++){ //输出属性
System.out.println(var[i].toGenericString());
}
for(int i=0; i<consMeth.length; i++){ //输出构造函数
System.out.println(consMeth[i].toGenericString());
}
for(int i=0; i<meth.length; i++){ //输出方法
System.out.println(meth[i].toGenericString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

  运行结果:

private java.lang.String person.Person.name
private int person.Person.age
private sex.Sex person.Person.sex
private java.lang.String person.Person.birthday
public person.Person()
public person.Person(java.lang.String,int,sex.Sex,java.lang.String)
public java.lang.String person.Person.toString()
public sex.Sex person.Person.getSex()
public java.lang.String person.Person.getPerName()
public void person.Person.setInfo(java.lang.String,int,sex.Sex,java.lang.String)
public int person.Person.getAge()
public java.lang.String person.Person.getBirthday()
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 final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
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()

  结果说明该类继承得到的方法也可以得到。

java通过反射取得一个类的完整结构的更多相关文章

  1. java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。

    首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一.  类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...

  2. Java中直接输出一个类的对象

    例如 package com.atguigu.java.fanshe; public class Person { String name; private int age; public Strin ...

  3. Java中如何查看一个类依赖的包

    Java中如何查看一个类依赖的包 如图, 我如何知道JSONArray是依赖的哪一个包呢,这里有两个json-lib包?   测试语句:   public static void main(Strin ...

  4. java面试题0004-在一个类上是否可以用abstract和final同时加以修饰?

    我们先用提干两个修饰词中的任意一个创建一个类 package components.javaTest.day4_20200910; /** * Question004: * java面试题0004-在 ...

  5. Java项目中每一个类都可以有一个main方法

    Java项目中每一个类都可以有一个main方法,但只有一个main方法会被执行,其他main方法可以对类进行单元测试. public class StaticTest { public static ...

  6. Android反射出一个类中的其他类对象并调用其对应方法

    MainActivity如下: package cn.testreflect; import java.lang.reflect.Field; import java.lang.reflect.Met ...

  7. java学习笔记—实现一个类MyInputStream(28)

    1 实现一个类MyInputStream读取文件,且不能抛出异常 public class TestDemo { public static void main(String[] args) thro ...

  8. Java中如何获取一个类中泛型的实际类型

    本文链接:https://blog.csdn.net/kuuumo/article/details/83021158   _______________________________________ ...

  9. 【Java基础】Java中如何获取一个类中泛型的实际类型

    泛型的术语 <>: 念做typeof List<E>: E称为类型参数变量 ArrayList<Integer>: Integer称为实际类型参数 ArrayLis ...

随机推荐

  1. hihoCoder#1039

    刚开始学习C语言,准备在做hiho的题目的过程中来学习,在此进行记录,如果代码中有错误或者不当的地方还请指正. 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在 ...

  2. 007-Scala类的属性和对象私有字段实战详解

    007-Scala类的属性和对象私有字段实战详解 Scala类的使用实战 变量里的类必须赋初值 def函数时如果没参数可不带括号 2.不需要加Public声明 getter与setter实战 gett ...

  3. ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

    先看oracle的监听和oracle的服务是否都启动了. 启动oracle监听:cmd命令行窗口下,输入lsnrctl start,回车即启动监听. 查看oracle的sid叫什么,比如创建数据库的时 ...

  4. hibernate开发(2)

    1 hibernate 的缓存机制 在程序运行中,hibernate要不断访问物理数据库,为了降低访问频率,提升性能,会复制一部分数据到缓存中,使得hibernate可以从缓存中读写数据,然后在特定时 ...

  5. Android Context上下文解析

    1.Context概念 Context,相信不管是第一天开发Android,还是开发Android的各种老鸟,对于Context的使用一定不陌生~~你在加载资源.启动一个新的Activity.获取系统 ...

  6. 如果Python中有很多换行,可以选择使用"""..."""表示多行内容

    举例:>>> print("""... ... ... ... ... ... ... ... ''')... fdfd""&quo ...

  7. Spring中的自动装配

    src\dayday\Person.java package dayday;/** * Created by I am master on 2016/11/28. */public class Per ...

  8. The constructor User.Student(String, String, String) is not visible

    项目:蒙文词语检索 日期:2016-05-01 提示:The constructor User.Student(String, String, String) is not visible 出处:Db ...

  9. 项目中 poi 导出 出现html特殊符号的实体 (已解决)

    导出excel 时出现 类似这样的>  符号 , 大概是存到数据库也是这样,然后jsp解析可以解析出来,但是java不认得,需要个人写出解析方法. 废话不说,贴码: /** *转换html特殊符 ...

  10. B样条基函数(cubic spline basis)

    B样条基函数用作权重 reference http://blog.csdn.net/tuqu