java通过类反射获取某个类的所有信息--代码实例

package huang.de.wei;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

@SuppressWarnings(value="unchecked")
@Deprecated
public class ClassTest {
	//为这个类定义私有构造器
	private ClassTest(){

	}
	//定义一个有参数的构造器
	public ClassTest(String name){
		System.out.println("这是私有的构造器");

	}
	//定义一个无参数的info方法
	public void info(){
		System.out.println("这是一个无参数的info方法");
	}
 public void info(String str){
	 System.out.println("这是有参数的info方法,参数为:"+str);
 }
 //定义一个内部测试类
 class Inner{

 }
 public static void main(String[] args) throws SecurityException, NoSuchMethodException, ClassNotFoundException{
	 //下面的代码可以获取ClassTest对饮的Class
	 Class<ClassTest> clazz=ClassTest.class;
	 //获取该Class对象对应的全部构造器
	 Constructor[] ctors=clazz.getDeclaredConstructors();
	 System.out.println("类的构造器全部如下");
	 for(Constructor c : ctors){

		 System.out.println(c);
	 }
	 //获取class对象所对应的全部public构造器
	 System.out.println("class对象所对应的全部public构造器:");
	 Constructor[] publicCtors=clazz.getConstructors();
	 for(Constructor c :publicCtors){
		 System.out.println(c);
	 }
	 //获取calss对象所对应全部的public方法
	 Method[] mtds=clazz.getMethods();
	 System.out.println("ClassTest的全部public方法如下:");
	 for(Method c : mtds){
		 System.out.println(c);
	 }
	 //获取Class对象所对应类的指定方法
	 System.out.println("ClassTest里面带一个字符串的info方法为:"+clazz.getMethod("info", String.class));
	 System.out.println("ClassTest里面没带一个字符串的info方法为:"+clazz.getMethod("info"));
	 //获取class对象所对应的类上的全部注释
	 Annotation[] anns=clazz.getAnnotations();
	 System.out.println("ClassTest的全部注释如下");
	 for(Annotation c : anns){
		 System.out.println(c);
	 }
	 System.out.println("注意:Annotation信息找不到@SupperssWarnings信息");
	 System.out.println("该Class元素上的@SupperssWarnings注释为:"
			 +clazz.getAnnotation(SuppressWarnings.class)) ;
	 //获取该class对象的全部内部类
	 Class<?>[] inners=clazz.getDeclaredClasses();
	 System.out.println("ClassTest的全部内部类如下:");
	 for(Class c : inners){
		 System.out.println(c);
	 }
	 //使用Class.forname的方法来加载ClassTest的Inner内部类
	 Class inClazz =Class.forName("huang.de.wei.ClassTest$Inner");
	 //通过getDeclaringClass()访问该类所在的外部类
	 System.out.println("InClazz对应类的外部类为:"+
			 inClazz.getDeclaringClass());
	 System.out.println("ClassTest的包为:"+clazz.getPackage());
	 System.out.println("ClassTest的父类为:"+clazz.getSuperclass());
				// TODO: handle exception
			}

 }

运行结果(抛出的异常可能有差异):

类的构造器全部如下
private huang.de.wei.ClassTest()
public huang.de.wei.ClassTest(java.lang.String)
class对象所对应的全部public构造器:
public huang.de.wei.ClassTest(java.lang.String)
ClassTest的全部public方法如下:
public static void huang.de.wei.ClassTest.main(java.lang.String[]) throws java.lang.SecurityException,java.lang.NoSuchMethodException,java.lang.ClassNotFoundException
public void huang.de.wei.ClassTest.info()
public void huang.de.wei.ClassTest.info(java.lang.String)
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 native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
ClassTest里面带一个字符串的info方法为:public void huang.de.wei.ClassTest.info(java.lang.String)
ClassTest里面没带一个字符串的info方法为:public void huang.de.wei.ClassTest.info()
ClassTest的全部注释如下
@java.lang.Deprecated()
注意:Annotation信息找不到@SupperssWarnings信息
该Class元素上的@SupperssWarnings注释为:null
ClassTest的全部内部类如下:
class huang.de.wei.ClassTest$Inner
InClazz对应类的外部类为:class huang.de.wei.ClassTest
ClassTest的包为:package huang.de.wei
ClassTest的父类为:class java.lang.Object

时间: 2024-10-11 10:44:41

java通过类反射获取某个类的所有信息--代码实例的相关文章

反射获取一个类的私有方法

今天在刷面试题的时候,发现一个题目是编写程序通过反射获取一个类的私有方法,因为之前学反射的时候也学的浅,没有考虑到这样的事情.今天敲了一下,虽然也就是那么几行代码,还是磕磕绊绊的,最后终于搞定了,这里总结一下 Java反射得到一个类的私有方法 获得私有方法的流程是 (1)获取目标类 (2)获取目标方法 Method method=clazz.getDeclaredMethod(name);//可以调用类中的所有方法(不包括父类中继承的方法) Method method=clazz.getMeth

java中使用反射获取pojo(实体)类的全部字段值

说起反射.不得不说它实在是太强大了,通过反射就能够轻轻松松拿到各种东东,假设你想在项目中解除对某个类的依赖,能够考虑用反射. 今天跟大家分享的是通过java中的反射,获取pojo类的全部字段值. 为什么要做这个操作的呢?主要是为了重写实体类的toString方法.有人会说.直接重写toString方法.返回字段.toString()的字符串不就可以了. 这么做的确能够.可是假设你的pojo类有上百个,上千个,你还要一个一个改吗?所以我们须要从新的方向去解决. 由于我们全部的pojo类.都继承一个

黑马程序员-JAVA学习之反射以及Class类的常用方法

--------android培训.java培训.期待与你交流!-------- Class类 Class 类的实例表示正在运行的 Java 应用程序中的类和接口.枚举是一种类,注释是一种接口.每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象.基本的 Java 类型(boolean.byte.char.short.int.long.float 和 double)和关键字 void 也表示为 Class 对象. Class 没有公共构造方法

利用反射获取一个类实例的所有属性名称和值 拼接为字符串

需要一个功能:获取一个类实例的所有属性名称和值并拼接为字符串,然后进行处理.代码保存在此以备后用. 建立一个类文件ClassToString.cs 以下代码可以直接使用,参数为一个类的实例,返回的是一个数组,[0]为属性名的拼接,[1]为属性Value的拼接. 对于类的属性类型没有限制,但是如果没有全部赋值的话,Value会范围默认值, 比如int为0,String为空,DateTime为0001/1/1 0:00:00,0,0,0 需要有需要的话可以在拼接的时候判断进行相应处理 ClassTo

Java通过反射获取一个类里的静态常量

public class FieldReflactTest{    public static final String a="test";    protected int b;    private int c;    String d;    public static void main(String[] args){       Field[] fields=FieldReflactTest.class.getDeclaredFields();       for(Field

Hibernate Dao映射配置通用接口类反射获取加载calass实例

接口: package com.ph.dao; import java.io.Serializable; import java.util.List; import org.hibernate.criterion.DetachedCriteria; public interface BaseDao<T> { public void save(T t); public void delete(T t); public void update(T t); public T findById(Ser

反射获取 obj类 的属性 与对应值

MethodInfo[] infos = type.GetMethods(); List<string> attrList = new List<string>(); foreach (MethodInfo me in infos) { attrList.Add("" + me.IsPublic); attrList.Add("继承自" + me.DeclaringType + "方法名" + me.Name + &quo

Java 使用反射获取类、方法、属性上的注释

有的时候我们想使用反射获取某个类的注释.方法上的注释.属性上的注释. 下面是一个简单的例子.里面包括了上面提到的三个点. package com.mine.practice.reflectfield; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import javax.xml.bind.annotation.XmlAccessTy

java反射之遍历类中所有内部类及属性方法

package com.zr.entity; /** * 仅用于测试类,从实际项目中抽出来的 * @author zr * */ public class Constant { /** * 参数校验枚举类 * @author zr * */ public static enum ResultObjectType { //成功 SUCC(0), //失败,异常 ERROR(1), //参数错误 PARAMERROR(2), //数据为空 NODATA(9); private Integer val