首先我们在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. 网易云课堂JS笔记

    JS能做什么?? ----网易官网:选项卡----京东: Hbuilder编辑器介绍 JavaScript简介 ECMAScript:javaScript组成语法和基本对象 DOM:文档对象模型,描述 ...

  2. JS 笔记(二) - 函数

    1. 函数的 声明 1) 声明式写法 function j1(id){ alert(id); } 2) 声明匿名函数变量 var j2 = function (a, b) { alert(a + &q ...

  3. ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

    salve复制线程停止,尝试start slave 时报ERROR 1872错误mysql> system perror 1872 MySQL error code 1872 (ER_SLAVE ...

  4. Hive的API的说明

    之前通过命令行的界面可以操作Hive,可是在实际的生产环境中,往往都是需要写API的,因此对Hive的API简单的列举了一下.并对Hive进行了一个简单的封装.具体的封装可以参考github网站主页: ...

  5. Cocoapods的安装

    1.先升级Gem sudo gem update --system 2.切换cocoapods的数据源 [先删除,再添加,查看] gem sources --remove https://rubyge ...

  6. php 数据库备份、还原

    1. mydb.php //DB类 2. backup.php //备份脚本 3. restore.php //还原脚本 mydb.php <? class db{ var $linkid; v ...

  7. 通过a++来理解闭包改变作用域的问题

    纯属个人理解,如果有误请指出! 让我们先看一段代码 function dog(){ var a=100; a++; return a; } alert(dog()); alert(dog()); 我们 ...

  8. C#单链表

    顺序表是用地址连续的存储单元顺序存储线性表中的各个数据元素, 逻辑上相邻的数据元素在物理位置上也相邻.因此,在顺序表中查找任何一个位置上的数据元素非常方便, 这是顺序存储的优点. 但是, 在对顺序表进 ...

  9. 黑马----JAVA比较器:Comparable和Comparator

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 一.Comparable接口 1.public interface Comparable{ public int compare ...

  10. SILVERLIGHT 应急卫生模拟演练项目之loading界面实现

    第一次在博客园写文章 俺是菜鸟 有不足之处还请大佬们多多指教 第一次也不知道该写啥 俺就拿自己最近做的一个项目 来细说吧 俺们公司是做医疗卫生方面的  其中有一块涉及到应急卫生模拟演练方面 这块分到我 ...