`
E路之吕
  • 浏览: 15696 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java反射初级学习

    博客分类:
  • Java
阅读更多

 

package main.java.reflection.model;

import java.util.ArrayList;
import java.util.List;


public class Demo {
	private String id;
	private String name;
	private int age;
	private List<String> list = new ArrayList<String>();
	
	public Demo(){}
	
	public Demo(String id, String name, int age, List<String> list) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.list = list;
	}

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public List<String> getList() {
		return list;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	@Override
	public String toString() {
		return "[id="+id+";name="+name+";age="+age+"]";
	}
}

 

package main.java.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import main.java.reflection.model.Demo;

public class TestDemo {
	public static void main(String[] args) throws Exception {
		TestDemo td = new TestDemo();
		td.test();
		td.testField();
		td.testMethodSet();
		td.testMethodGet();
		td.test2();
		td.test4();
	}


	/**
	 * Title:test
	 * Description:范型基础
	 */
	public void test() {
		Demo d= new Demo();
		System.out.println(d.getClass().getName());
		System.out.println("count of Demo's constructor:"+d.getClass().getConstructors().length);
		for (Constructor<?> c : d.getClass().getDeclaredConstructors()) {
			System.out.println(c);
		}
		
		System.out.println("所以方法:");
		for (Method m: d.getClass().getMethods()) {			//所以的方法(包括继承过来的)
			System.out.println(m.getName());
		}
		System.out.println("自定义的方法:");
		for (Method m: d.getClass().getDeclaredMethods()) {	//自定义的方法
			System.out.println(m.getName());
		}
		System.out.println("属性:");
		for (Field f : d.getClass().getDeclaredFields()) {
			if(f.getType().toString().endsWith("java.lang.String")){
				System.out.println("..."+f.getType()+":"+Modifier.toString(f.getModifiers()));
			};
			System.out.println(f.getName()+":"+f.getType().getSimpleName()+"("+f.getType()+")");
		}
	}

	/**
	 * Title:testField
	 * Description:属性赋值
	 */
	public void testField() throws Exception {
		Class<?> demo = Class.forName("main.java.reflection.model.Demo");
		Object obj = demo.newInstance();
		Field field = demo.getDeclaredField("name");
        field.setAccessible(true);
        field.set(obj, "xiao");
        System.out.println(field.get(obj));
	}
	
	/**
	 * Title:testMethodSet
	 * Description:利用反射执行对象的set方法
	 */
	public void testMethodSet() throws Exception {
		Class<?> demo = Class.forName("main.java.reflection.model.Demo");
		Demo obj = (Demo) demo.newInstance();
		Method m = demo.getMethod("setId",String.class);
		m.invoke(obj, "11");
		System.out.println(obj.getId());
	}
	
	/**
	 * Title:testMethodGet
	 * Description:利用反射执行对象的get方法
	 */
	public void testMethodGet() throws Exception {
		Class<?> demo = Class.forName("main.java.reflection.model.Demo");
		Demo obj = (Demo) demo.newInstance();
		Method m = demo.getMethod("getId");
		if(m.invoke(obj)== null);
			System.out.println("....");
	}
	
	
	/**
	 * Title:test2
	 * Description:将对象中为String类型的属性对应的数据全部去掉首尾空格
	 */
	public void test2() throws Exception{
		List<Demo> dList = new ArrayList<Demo>();
		List<String> strList = new ArrayList<String>();
		dList.add(new Demo(" 1 "," Java ",11,strList));
		dList.add(new Demo("2   ","   Ruby",22,strList));
		dList.add(new Demo("   3","Ada   ",33,strList));
		for (Demo demo : dList) {
			System.out.println(demo.toString());
		}
		for (Demo demo : dList) {
			Method m = null;
			String tmp = "";
			for (Field f : demo.getClass().getDeclaredFields()) {
				if(f.getType().toString().endsWith("java.lang.String")){
					m = demo.getClass().getMethod("get"+f.getName().substring(0,1).toUpperCase()+f.getName().substring(1));
					if(m.invoke(demo) != null)
						tmp = m.invoke(demo).toString();
					else
						tmp = "";
					m = demo.getClass().getMethod("set"+f.getName().substring(0,1).toUpperCase()+f.getName().substring(1),String.class);
					m.invoke(demo, tmp.trim());
				};
			}
		}
		for (Demo demo : dList) {
			System.out.println(demo.toString());
		}
	}
	
	/**
	 * Title:test4
	 * Description:使用范型将对象中为String类型的属性对应的数据全部去掉首尾空格
	 */
	public void test4() throws Exception{
		CommonBean<Demo> cb = new CommonBean<Demo>();
		List<CommonBean<Demo>> dList = new ArrayList<CommonBean<Demo>>();
		List<String> strList = new ArrayList<String>();
		dList.add(new CommonBean<Demo>(new Demo(" 1 "," Java ",11,strList)));
		dList.add(new CommonBean<Demo>(new Demo("2   ",null,22,strList)));
		dList.add(new CommonBean<Demo>(new Demo("   3","Ada   ",33,strList)));
		dList = cb.getListOfStringTrim(dList);
		for (CommonBean<Demo> cm : dList) {
			System.out.println(cm.getObj().toString());
		}
	}
}

 

package main.java.reflection;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;


public class CommonBean<T> {
	T obj;
	
	public CommonBean(){
		
	}
	public CommonBean(T obj) {
		this.obj = obj;
	}

	public T getObj() {
		return obj;
	}

	public void setObj(T obj) {
		this.obj = obj;
	}
	
	public List<CommonBean<T>> getListOfStringTrim(List<CommonBean<T>> list) throws Exception{
		T obj = null;
		for (CommonBean<T> cm : list) {
			obj = cm.getObj();
			Method m = null;
			String tmp = "";
			for (Field f : obj.getClass().getDeclaredFields()) {
				if(f.getType().toString().endsWith("java.lang.String")){
					m = obj.getClass().getMethod("get"+f.getName().substring(0,1).toUpperCase()+f.getName().substring(1));
					if(m.invoke(obj) != null)
						tmp = m.invoke(obj).toString();
					else
						tmp = "";
					m = obj.getClass().getMethod("set"+f.getName().substring(0,1).toUpperCase()+f.getName().substring(1),String.class);
					m.invoke(obj, tmp.trim());
				};
			}
		}
		return list;
	}
}

 

分享到:
评论

相关推荐

    java高级 初级 中级 教程

    此外,我们还需要学习Java的反射机制,它允许我们在运行时检查和修改类、接口、字段和方法。再者,JNI(Java Native Interface)允许Java代码调用C或C++原生代码,这在需要高性能计算或者集成已有的原生库时非常有用...

    java初级学习笔记

    以下是一些Java初级学习中的关键知识点: 1. **基础语法**:Java的基础包括变量、数据类型(如整型、浮点型、字符型、布尔型)、运算符(算术、比较、逻辑、位操作等)以及流程控制(if-else语句、switch-case、for...

    java 初级学习资料PDF

    这份"java 初级学习资料PDF"包含的四个部分——SE2、OOP、Core、SE1,分别对应了Java的不同核心概念和技术。 1. **SE1(Java Standard Edition 1)**:这是对Java初学者的基础部分,主要涵盖了Java语言的基本语法,...

    java初级学习资料.zip_Java学习资料

    这份"java初级学习资料.zip"压缩包显然是为初学者准备的,旨在帮助他们掌握Java编程的基础。以下是一些核心的Java学习知识点,涵盖了这个阶段通常会接触到的内容: 1. **Java语法基础**:学习任何编程语言,首先...

    java学习中初级部分的一下问题集

    以下是一些常见的Java初级学习问题及其详细解释: 1. **基础语法** - 变量声明:理解变量的类型、作用域以及何时使用final关键字。 - 运算符:熟悉基本的算术、比较和逻辑运算符,以及三元运算符的使用。 - 控制...

    java私塾教材大全(初级中级高级)

    6. **反射与注解**:学习Java的反射机制,能动态地获取类信息和调用方法,以及注解的使用,理解其在元编程中的应用。 7. **Java集合框架的高级特性和设计模式**:深入研究Set、Map接口的实现类,如TreeSet、TreeMap...

    javajava初级教程新手学习中

    Java的类库非常丰富,包括用于日期时间操作的java.time包,用于数学运算的java.math包,以及用于反射、并发、XML处理等的其他包。 十二、JDBC与数据库连接 Java Database Connectivity(JDBC)是Java访问数据库的...

    java 初级学习基础知识

    2. **环境配置**:学习Java的第一步通常是安装Java Development Kit (JDK),并设置好环境变量,包括JAVA_HOME、PATH和CLASSPATH,确保系统能够找到Java编译器和运行时环境。 3. ** HelloWorld程序**:每个编程学习...

    JAVA初级面试题整理

    Java作为一门广泛使用的编程语言,其初级面试题涵盖了基础语法、面向对象特性、集合框架、异常处理、IO流、多线程、网络编程等多个方面。以下是对这些知识点的详细阐述: 1. **基础语法**:Java的基础语法包括变量...

    java 初级 中级 高级 面试题

    这份压缩包文件包含三个文档:`Java面试初级.doc`、`Java面试中级.doc`和`Java面试高级.doc`,分别针对不同阶段的Java学习者和求职者,提供了精心整理的面试题目及答案,旨在帮助大家系统地复习和准备面试。...

    java初级工程师面试题合集最新版

    Java初级工程师面试题合集是为那些准备踏入Java软件开发领域的求职者量身打造的一份宝贵的资源。这个最新的版本包含了自...通过深入学习并实践这些知识点,Java初级工程师将能够更好地应对面试挑战,提升自己的竞争力。

    java初级150例

    "Java初级150例"是一个专门为初学者设计的学习资源,它包含了一系列精心挑选的源代码实例,旨在帮助新接触Java的人快速掌握编程基础。在这个压缩包中,你可能会找到以下关键知识点: 1. **基础语法**:包括变量声明...

    Java初级中级思维导图资源

    首先,Java初级阶段的学习通常包括以下内容: 1. **Java基础知识**:理解Java的基本语法,如变量、数据类型、运算符、流程控制语句(if、for、while)、函数等。 2. **面向对象编程**:掌握类、对象、封装、继承和...

    Java SE基础、初级、高级阶段 Java学习资料

    这份“Java SE基础、初级、高级阶段”学习资料旨在帮助你全面掌握Java编程技术,从入门到精通。让我们逐一探讨这些阶段所涵盖的知识点。 **基础阶段:** 1. **Java环境配置**:安装JDK(Java Development Kit),...

    JAVA学习资料和API

    2. **Java中级部分教材**:在掌握了基础知识后,中级教材会涉及更深入的主题,如封装、继承、多态等面向对象特性,异常处理,集合框架(List、Set、Map),IO流,线程,以及反射等。这些内容是JAVA开发者日常工作中...

    java 初级 源码集合

    作为初级学习者,理解Java的基础概念和语法是至关重要的。本源码集合针对Java初学者,旨在通过实际代码示例来帮助理解Java编程的核心知识。 1. **基础语法**: Java的语法与C++相似,但更注重安全性和面向对象特性...

    JAVA初级教学笔记

    在Java编程的初级阶段,学习者会接触到许多基础知识,这些知识是构建强大应用程序的基础。以下是对标题“JAVA初级教学笔记”和描述中涉及知识点的详细阐述: 1. **基础语法**: Java是一种面向对象的语言,学习者...

    JAVA初级PPT资料

    这份“JAVA初级PPT资料”提供了一个全面的学习平台,适合初学者掌握Java的基础知识。以下是一些核心的Java知识点: 1. **Java语言简介**:Java是由Sun Microsystems(现已被Oracle收购)开发的,它的设计目标是简洁...

    java后端初级面试题

    Java 后端初级面试题 在这篇文章中,我们将讨论 Java 后端开发中一些常见的面试题目,涵盖了 Java 基础知识、Java 面向对象编程、Java 集合框架、Java 多线程编程等方面。 一、JDK/JRE/JVM 的区别 JDK(Java ...

    Java初级开发工程师面试题汇总-附答案.PDF

    这些知识点是Java初级开发工程师必备的基础,通过学习和掌握,能够为面试和实际开发工作打下坚实的基础。PDF中的题目和答案将帮助求职者有针对性地进行复习,提高面试通过率。同时,实际编码经验也是评估一个初级...

Global site tag (gtag.js) - Google Analytics