`
talentluke
  • 浏览: 592893 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java反射

 
阅读更多
/**
 *@file_name             Teacher.java
 *@package_name          com.luke
 *@project_name          InterviewQuestions
 *@descripton 
 *@author                luke
 *@time                  2013-1-21:下午10:41:11 
 *@version                       
 */
package com.luke;

/**
 *@descripton 
 *@author               luke
 *@time                 2013-1-21
 *@version                       
 */
public class Worker
{   
    public String name;
    
    protected int age;
    
    private double salary; 
    
  
    
    public Worker(String name)
    {
	this.name = name;
    }
    protected Worker(int age)
    {
	this.age = age;
    }
    private Worker(double salary)
    {
	this.salary = salary;
    }
    public String getName()
    {
	return name;
    }
    protected int getAge()
    {
	return age;
    }
    private double getSalary()
    {
	return salary;
    }
   
    
    
    
    

}

public static void main(String[] args)
{
try
                {
	            Class clsWorker = Class.forName("com.luke.Worker");
	            
	            Constructor[] allPublicConstructors = clsWorker.getConstructors();
	            System.out.println("all public constructors(including declared and extending from parent as fllows:");
	            for (Constructor con : allPublicConstructors)
	            {
	        	System.out.println(con);
	            }
	            
	            System.out.println("-----------------------");
	            
	            Constructor[] allDeclaredConstructors = clsWorker.getDeclaredConstructors();
	            System.out.println("all declared constructors(including only in current class exclusive extending from parent) as fllows:");
	            for (Constructor con : allDeclaredConstructors)
	            {
	        	System.out.println(con);
	            }

	            Constructor publicConstructor = clsWorker.getConstructor(String.class);
	            Worker publicWorker = (Worker)publicConstructor.newInstance("luke");
	            
	            Constructor protectedConstructor = clsWorker.getDeclaredConstructor(int.class);
	            Worker protectedWorker = (Worker)protectedConstructor.newInstance(20);
	            
	            Constructor privateConstructor = clsWorker.getDeclaredConstructor(double.class);
	            privateConstructor.setAccessible(true);//must not forget this, when use private constructor!
	            Worker privateWorker = (Worker)privateConstructor.newInstance(8888.8);
	            
	            System.out.println("-----------------------");
	            
	            Field[] allPublicFields = clsWorker.getFields();
	            System.out.println("all public fields as fllows:");
	            for (Field field : allPublicFields)
	            {
	        	System.out.println(field.getName());	        	
	            }
	            
	            System.out.println("-----------------------");

	            Field[] allDeclaredFields = clsWorker.getDeclaredFields();
	            System.out.println("all declared fields as fllows:");
	            for (Field field : allDeclaredFields)
	            {
	        	System.out.println(field.getName());	        	
	            }
	            
	            System.out.println("-----------------------");

	            Field salary = clsWorker.getDeclaredField("salary");
	            salary.setAccessible(true);//must not forget this, when access private field!
	            System.out.println("before reset salary===" + salary.get(privateWorker));
	            salary.set(privateWorker, 99999.9);
	            System.out.println("after reset salary===" + salary.get(privateWorker));		
	           
	            System.out.println("-----------------------");

	            Method[] allPublicMethods = clsWorker.getMethods();
	            System.out.println("all public methods as fllows:");
	            for (Method method : allPublicMethods)
	            {
	        	System.out.println(method);
	            }

	            System.out.println("-----------------------");

	            Method[] allDeclaredMethods = clsWorker.getDeclaredMethods();
	            System.out.println("all declared methods as fllows:");
	            for (Method method : allDeclaredMethods)
	            {
	        	System.out.println(method);
	            }
	            

	            System.out.println("-----------------------");

	            Method privateMethod = clsWorker.getDeclaredMethod("getSalary", null);
	            System.out.println("is method accessible===" + privateMethod.isAccessible());
	            privateMethod.setAccessible(true);//must not forget this, when access private method!
	            System.out.println("getSalary()===" + privateMethod.invoke(privateWorker, null));
	            
	            

	            
	            
	            
	            
                }
                catch (ClassNotFoundException e)
                {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
                }
                catch (SecurityException e)
                {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
                }
                catch (NoSuchMethodException e)
                {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
                }
                catch (IllegalArgumentException e)
                {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
                }
                catch (InstantiationException e)
                {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
                }
                catch (IllegalAccessException e)
                {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
                }
                catch (InvocationTargetException e)
                {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
                }
                catch (NoSuchFieldException e)
                {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
                }

	}
}

####output####
all public constructors as fllows:
public com.luke.Worker(java.lang.String)
-----------------------
all declared constructors as fllows:
public com.luke.Worker(java.lang.String)
protected com.luke.Worker(int)
private com.luke.Worker(double)
-----------------------
all public fields as fllows:
name
-----------------------
all declared fields as fllows:
name
age
salary
-----------------------
before reset salary===8888.8
after reset salary===99999.9
-----------------------
all public methods as fllows:
public java.lang.String com.luke.Worker.getName()
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
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 boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
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()
-----------------------
all declared methods as fllows:
public java.lang.String com.luke.Worker.getName()
private double com.luke.Worker.getSalary()
protected int com.luke.Worker.getAge()
-----------------------
is method accessible===false
getSalary()===99999.9
 
 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics