`
hanchaohang
  • 浏览: 20373 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

Reflect 学习

阅读更多
/*
 * Use Reflect
 * 
 * */

package com.HP;

import java.lang.reflect.*;

public class testReflect {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		testReflect tr = new testReflect();
		//tr.printMethod(args);
		//tr.InsTrance(args);
		//tr.ExceConstructor();
		//tr.SetField();
		//tr.ArrayWString();
		tr.ArrayMutiString();
	}
	
	//Print methods of the class
	public void printMethod(String[] args){
		Class c;
		try {
			c = Class.forName(args[0]);
			Method m[] = c.getDeclaredMethods();
			for(int i=0;i<m.length;i++){
				System.out.println("  "+i+" "+m[i].toString());
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	
	//judge the object is belong to the class or not.
	public void InsTrance(String[] args){
		
		try {
			Class IsA = Class.forName("com.HP.DBDAO");
			boolean bo1 = IsA.isInstance(new Integer(37));
			System.out.println(bo1);
			boolean bo2 = IsA.isInstance(new DBDAO());
			System.out.println(bo2);
		} 
		catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//print method of the class, include the contructor method , parameters and exception type
	public void FindMethod(String args[]){
		try {
			Class cl1 = Class.forName("com.HP.DBDAO");
			Method m[] = cl1.getDeclaredMethods();
			Constructor contr[] = cl1.getDeclaredConstructors();
			for(int z=0;z<contr.length;z++){
				System.out.println("contr #" + z + " " + contr[z]);
			}
			for(int i=0;i<m.length;i++){
				Method me = m[i];
				System.out.println("name = "+ me.getName());
				System.out.println("decl class = "+me.getDeclaringClass());
				Class pvec[] = me.getParameterTypes();
				for(int j=0;j<pvec.length;j++){
					System.out.println(" Parm #"+j+" "+pvec[j]);
				}
				
				Class evec[] = me.getExceptionTypes();
				for(int z=0;z<evec.length;z++){
					System.out.println("exc #" + z + " " + evec[z]);
					System.out.println("return type = " + me.getReturnType());
					System.out.println("-----");
				}
			}
			
		}
		catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//print the fields in the class and the field type
	public void FindFields(){
		try{
			Class cl1 = Class.forName("com.HP.DBDAO");
			Field fields[] = cl1.getFields();
			for(int i=0;i<fields.length;i++){
				Field f = fields[i];
				System.out.println("Name = "+ f.getName());
				System.out.println("Decl class = "+ f.getDeclaringClass());
				System.out.println("Type = "+ f.getType());
				int mod = f.getModifiers();
				System.out.println("modifiers = " + Modifier.toString(mod));
				System.out.println("-----------------------------");
			}
		}
		catch(Exception e){
			
		}
	}
	
	//execute special method using the reflect
	public void ExceMethod(){
		try{
			Class cl1 = Class.forName("com.HP.DBDAO");
			Class partypes[] = new Class[2];
			partypes[0] = Integer.TYPE;
			partypes[1] = Integer.TYPE;
			Method meth = cl1.getMethod("add", partypes);
			
			DBDAO dbdao = new DBDAO();
			Object arglist[] = new Object[2];
			arglist[0] = new Integer(37);
			arglist[1] = new Integer(47);
			Object retobj = meth.invoke(dbdao, arglist);
			Integer retval = (Integer)retobj;
			System.out.println(retval.intValue());
		}
		catch(Exception e){
			
		}
	}
	
	//execute the constructor
	public void ExceConstructor(){
		try{
			Class cl1 = Class.forName("com.HP.DBDAO");
			Class partype[] = new Class[2];
			partype[0] = Integer.TYPE;
			partype[1] = Integer.TYPE;	
			Constructor con = cl1.getConstructor(partype);
			
			Constructor cons = cl1.getConstructor(partype);
			Object arglist[] = new Object[2];
			arglist[0] = new Integer(2);
			arglist[1] = new Integer(3);
			Object retobj = cons.newInstance(arglist);
		}
		catch(Exception e){
			
		}
	}
	
	//set special field when the class is loaded
	public void SetField(){
		try{
			Class cl1 = Class.forName("com.HP.DBDAO");
			Field fld = cl1.getField("dou");
			DBDAO dbdao = new DBDAO();
			System.out.println(" dou = "+ dbdao.dou);
			fld.setDouble(dbdao, 16.17);
			System.out.println(" dou = "+ dbdao.dou);
		}
		catch(Exception e){
			
		}
	}
	
	//using Array and String
	public void ArrayWString(){
		try{
			Class cl1 = Class.forName("java.lang.String");
			Object Arr = Array.newInstance(cl1, 10);
			Array.set(Arr,5,"this is a test");
			String s = (String) Array.get(Arr, 5);
			System.out.println(s);
		}
		catch(Exception e){
			
		}
	}
	
	public void ArrayMutiString(){
		int dims[] = new int[]{5, 10, 15};
		Object arr = Array.newInstance(Integer.TYPE, dims);
		Object arrobj = Array.get(arr, 3);
		Class cls = arrobj.getClass().getComponentType();
		System.out.println(cls);
		arrobj = Array.get(arrobj, 5);
		Array.setInt(arrobj, 10, 37);
		int arrcast[][][] = (int[][][]) arr;
		System.out.println(arrcast[3][5][10]);
	}

}
 
package com.HP;

import java.sql.*;

public class DBDAO {
	
	private double d;
	public static final int i = 37;
	String s = "testing";
	public double dou = 12.43;
	
	public DBDAO(){
		
	}
	
	public DBDAO(int a,int b){
		System.out.println("a = "+ a + "  b = "+ b);
	}
	
	public int add(int b,int c){
		return b+c;
	}
	
	public Connection GetConnection() throws ClassNotFoundException, SQLException{
		Class.forName("oracle.jdbc.OracleDriver");
		return DriverManager.getConnection("jdbc:oracle:thin:@16.173.234.74:1521:sisdcs05","liferay","liferay");
	}
	
	public ResultSet GetResultSet(String sql){
		Connection con = null;
		Statement ste = null;
		ResultSet rs = null;
		try {
			con = this.GetConnection();
			ste = con.createStatement();
			rs = ste.executeQuery(sql);
		} 
		catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		finally{
			
		}
		return rs;
	}
	
	
	
}
 
分享到:
评论

相关推荐

    java.lang.reflect.Proxy 学习资料 讲解 例子 源码

    java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码

    .NET反编译工具 Reflect

    总的来说,.NET反编译工具Reflect是.NET开发者不可或缺的利器,它能够帮助我们解密程序的内部运作,提升我们的学习和调试效率。在尊重他人知识产权的前提下,合理利用Reflect,可以让我们在编程世界中走得更远。

    reflect doc

    在编程领域,`reflect` 是一个非常重要的概念,特别是在诸如 Go、Python 和 Java 等高级语言中。这个概念允许程序在...学习和理解反射原理以及如何安全有效地使用 `reflect` 包,是提升 Go 语言编程能力的关键一步。

    前端项目-reflect-metadata.zip

    在前端开发领域,"Reflect Metadata" 是一个关键的工具,尤其在使用TypeScript或ES6及以上版本时。这个"前端项目-reflect-metadata...通过深入学习和实践,开发者可以充分利用这一特性来提升代码的可扩展性和可维护性。

    android 字体倒影Reflect

    在Android开发中,实现独特的视觉效果是提升用户体验的重要手段之一,"android 字体倒影Reflect"就是一个这样...通过学习和实践这样的例子,开发者可以提升自己的Android UI定制能力,为用户创造更具吸引力的界面体验。

    cpp-reflect在C17中轻松实现反射和序列化

    总之,"cpp-reflect在C++17中轻松实现反射和序列化"是一个深入了解C++高级特性的主题,对于那些寻求提高代码效率和扩展性的开发者来说,是一个不容错过的学习资源。通过实践这个项目,开发者可以锻炼自己的模板元...

    reflect-2.0.0.zip

    标题中的"reflect-2.0.0.zip"可能是指一个包含反射库的版本2.0.0的压缩文件。在编程中,反射是Java、Python、C#等面向对象语言的一种高级特性,允许运行时检查类、接口、字段和方法的信息,甚至能够动态调用方法和...

    Java reflect 机制详解

    免费共享,很详细的介绍了反射机制的原理,适合追根究底的java学习者

    jdk1.8的src,扩展了sun.reflect,unsafe

    总的来说,JDK 1.8的`sun.reflect`和`unsafe`扩展提供了更强大的反射和底层操作能力,而源码的公开则为开发者提供了深入学习和优化代码的机会。通过阅读源码和相关文档,开发者可以更好地理解和利用这些特性,提升...

    java中的反射reflect

    Java中的反射(Reflect)是Java语言的一个重要特性,它允许运行时访问类的信息,包括类名、属性、方法等,并可以动态地创建对象和调用方法。...在学习和使用反射时,一定要注意其潜在的风险,同时充分利用其带来的便利。

    reflect demo good

    在"reflect demo good"这个主题中,我们主要探讨的是如何有效地利用Java反射进行编程,以及其在实际开发中的应用。 在Java中,`java.lang.reflect`包提供了对反射的支持。`Class`对象是反射的核心,它代表了运行时...

    reflect dot net 发编译工具

    "Reflect .NET"是一款强大的.NET框架反编译工具,它允许开发者查看并理解.NET程序集(dll或exe)内部...尽管提供的版本可能不是最新,但Reflect .NET依然是一款值得学习和使用的工具,对于提升.NET开发技能有很大帮助。

    HLSLCubeMapping+Reflect

    在给定的"HLSCubeMapping"文件中,可能包含了实现这些功能的示例代码或教程,供学习者参考和实践。 总之,HLSL立方体环境贴图和反射是3D图形编程的重要组成部分,它们能显著提升场景的视觉质量。通过理解并熟练运用...

    Java Reflect

    深入学习Java反射,我们需要理解以下几个关键概念: 1. **Field**: 表示类的成员变量,可以通过`Class`对象的`getFields()`或`getDeclaredFields()`获取。可以使用`set()`和`get()`方法来访问和修改这些字段的值。 ...

    Reflect_day01_all.zip

    Java反射机制是Java编程语言...通过这个压缩包的学习,初学者可以了解到Java反射的基础知识,而有经验的开发者则可以回顾反射的用法,加深理解。实践中,熟练掌握反射机制有助于解决许多复杂的问题,提高代码的灵活性。

    golang_reflect_practise.rar

    这个"**golang_reflect_practise.rar**"压缩包包含的项目"Proj_reflect_practise"显然是为了帮助学习者实践和理解Go语言中的反射机制。下面我们将深入探讨反射的概念,以及如何在Go中进行反射操作。 ### 反射基础 ...

    reflect,dll反編譯工具

    这对于调试、学习第三方库、修复错误或者查找安全漏洞等任务来说,是非常有价值的。然而,需要注意的是,由于反编译过程的复杂性,生成的源代码可能不会与原始源代码完全一致,可能会丢失注释、变量名和某些复杂语法...

    reflect反射实例_实用_没有废话

    在Go语言中,reflect包提供了对反射的支持,让我们能够动态地获取类型信息,并进行相应的操作。本篇文章将深入探讨如何在Go语言中使用reflect包进行反射实践,帮助你更好地理解和应用这个功能。 首先,我们要理解...

    java教程ppt,讲述了java reflect.,对大家应该很有帮助

    Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在本教程中,我们将深入...请参考`java_base10_reflect.ppt`来深入学习这一强大而复杂的主题。

Global site tag (gtag.js) - Google Analytics