zoukankan      html  css  js  c++  java
  • java反射机制学习代码

    根据

    http://www.iteye.com/topic/137944

    文档进行学习

    代码如下:

    package reflectTest;
    
    import java.lang.reflect.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.*;
    
    
    class A{
    	
    }
    
    class B extends A{
    	
    }
    
    class C extends B{
    	
    }
    
    
    class TestClass extends Object implements ActionListener {
    	private int a = 3;
    	public Integer b = 4;
    	public TestClass(){}
    	public TestClass(int id,String name){}
    	public void Abc(int id,String name){}
    	public void ActionPerformed(ActionEvent e){}
    }
    
    
    
    public class Main {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		TestClass tc = new TestClass();
    		Class temp = tc.getClass();
    		//==============================================
    		try{
    			System.out.println("反射类中所有公有的属性");
    			Field[] fb = temp.getFields();
    			for(int i=0;i < fb.length;i++)
    			{
    				Class cl = fb[i].getType();
    				System.out.println("fb: "+cl);
    			}
    			
    			System.out.println("反射类中所有的属性");
    			Field[] fa = temp.getDeclaredFields();
    			for(int i = 0;i < fa.length;i++)
    			{
    				Class cl = fa[i].getType();
    				System.out.println("fa: "+cl);
    			}
    			
    			System.out.println("反射类中私有属性的值");
    			Field f = temp.getDeclaredField("a");
    			f.setAccessible(true);
    			Integer i = (Integer)f.get(tc);
    			System.out.println(i);
    			//===============================
    			String className = temp.getName();
    			Constructor[] constructs = temp.getConstructors();
    			for(int k = 0;k < constructs.length;k++)
    			{
    				Class[] Parametertypes = constructs[k].getParameterTypes();
    				System.out.print(className + "(");
    				for(int j =0 ;j < Parametertypes.length;j++)
    				{
    					System.out.print(Parametertypes[j].getName()+"  ");
    				}
    				System.out.println(")");
    			}
    			//==================================================================
    			Class[] interfaces = temp.getInterfaces();
    			for(int j = 0;j<interfaces.length;j++)
    			{
    				System.out.println(interfaces[j].getName());
    			}
    			Class superClass = temp.getSuperclass();
    			System.out.println(superClass.getName());
    			//=================================================================
    			C c = new C();
    			Class t = c.getClass();
    			Class superClass1 = t.getSuperclass();
    			System.out.println(c);
    			System.out.println(c.getClass());
    			System.out.println(c.getClass().getSuperclass());
    			System.out.println(c.getClass().getSuperclass().getSuperclass());
    		
    		}catch(Exception e)
    		{
    			System.out.println(e);
    		}
    	}
    
    }
    

    运行结果如下:

    反射类中所有公有的属性
    fb: class java.lang.Integer
    反射类中所有的属性
    fa: int
    fa: class java.lang.Integer
    反射类中私有属性的值
    3
    reflectTest.TestClass()
    reflectTest.TestClass(int java.lang.String )
    java.awt.event.ActionListener
    java.lang.Object
    reflectTest.C@70dea4e
    class reflectTest.C
    class reflectTest.B
    class reflectTest.A

  • 相关阅读:
    .net Monitor产生SynchronizationLockException异常的原因
    .net 表达式返回值和等号赋值的区别
    .net core WebApi Interlocked配合ManualResetEventSlim实现并发同步
    .net core 使用log4net日志组件
    .net core Kestrel宿主服务器自定义监听端口配置
    .net core IIS/Kestrel上传大文件的解决方法
    .net 在同步方法中使用拉姆达表达式执行async/await异步操作
    ASP.NET MVC ValidationAttribute 服务器端自定义验证
    自定义TempData跨平台思路
    ValueProvider核心的值提供系统
  • 原文地址:https://www.cnblogs.com/itdef/p/5955385.html
Copyright © 2011-2022 走看看