`
iluoxuan
  • 浏览: 583425 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java反射基础-实列

    博客分类:
  • java
 
阅读更多

1:Class<?> ,Class对象时所有类可以实例化出来,多用来反射,得到该类的全部信息

其中?表示,无限参数和类型,避免类型转换

2:实列

首页定义一个Person类

package com.domain;

public class Person {
     private String name;
     private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String toString(){
		
		StringBuffer sb = new StringBuffer();
		sb.append("<name>").append(name).append("</name>");
		sb.append("<age>").append(age).append("</age>");
		return sb.toString();
		
	}
     
}

 

2:用反射来实例化Person类,操作该类的属性,方法。

 

package com.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import com.domain.Person;

public class Reflect {

	public static void main(String[] args) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
		Class<?> demo = null;
		//所有类的对象其实都是Class类的实列
		demo = Class.forName("com.domain.Person");//得到Person类的Class类对象(尽量用这种方式)
		// demo = new Person().getClass(); 方法2
		//demo = Person.class;
		Person p = (Person) demo.newInstance();//用类名得到person对象

		//拿到本类的所有属性信息,如果实取得父类和实现接口的属性用demo.getFields()方法
		Field[] field = demo.getDeclaredFields();
		for (int i = 0; i < field.length; i++) {
			//权限修饰符
			int mo = field[i].getModifiers();
			String priy = Modifier.toString(mo);

			//属性类型
			Class<?> type = field[i].getType();

			System.out.println("属性的权限--" + priy + "    属性的类型---"
					+ type.getName() + "     属性名---" + field[i].getName());
		}
		
		/*
		 * 調用改Person對象的方法
		 */
		 Object ob = null;
		 ob = demo.newInstance();
		 pset(ob,"Age","11111",String.class);
		 Pget(ob,"Age");

	}

	private static void Pget(Object ob, String att) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		    Method method = ob.getClass().getMethod("get"+att);
		    System.out.println(method.invoke(ob));
		
	}

	private static void pset(Object ob, String att, Object value,
			Class<?> type) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		      Method method = ob.getClass().getMethod("set"+att,type);
		      method.invoke(ob, value);
		
	}

}

结果:

属性的权限--private    属性的类型---java.lang.String     属性名---name
属性的权限--private    属性的类型---java.lang.String     属性名---age
11111
 

 

 

分享到:
评论

相关推荐

    实战java反射机制-让你迅速认识java强大的反射机制

    1. 反射基础: Java反射机制主要基于`java.lang.Class`类和`java.lang.reflect`包中的接口和类。`Class`对象代表了运行时的类信息,通过`Class.forName()`方法可以获取到类的`Class`对象。此外,`java.lang.reflect...

    Java 第三阶段增强分析需求,代码实现能力【反射】---- 代码

    Java 第三阶段增强分析需求,代码实现能力【反射】---- 代码 Java 第三阶段增强分析需求,代码实现能力【反射】---- 代码 Java 第三阶段增强分析需求,代码实现能力【反射】---- 代码 Java 第三阶段增强分析需求,...

    JAVA基础--JAVA中的反射机制详解

    JAVA 反射机制详解 JAVA 反射机制是 Java 语言中的一种动态获取信息和动态调用对象方法的功能。它允许程序在运行时获取类的信息、构造对象、获取成员变量和方法、调用对象的方法等。 Java 反射机制主要提供了以下...

    java基础教程----精华版

    这个"java基础教程----精华版"显然是一份精心整理的资料,旨在帮助初学者快速掌握Java编程的基础知识。下面将详细介绍Java语言的核心概念和关键知识点。 1. **Java语法基础**: - **变量**:在Java中,变量是存储...

    mysql-connector-java-5.1.7-bin.jar

    "mysql-connector-java-5.1.7-bin.jar" 文件就是这个桥梁,它是一个Java归档(JAR)文件,包含了MySQL JDBC驱动的所有必要组件。 MySQL JDBC驱动,也被称为MySQL Connector/J,允许Java应用程序通过遵循JDBC API来...

    JAVA设计模式--程序设计--反射--注解--泛型

    Java设计模式、程序设计、反射、注解和泛型是Java开发中的核心概念,它们各自在不同的场景下发挥着重要作用,构建出高效、可维护的软件系统。 首先,Java设计模式是面向对象编程中的一种最佳实践,是解决常见问题的...

    mysql-connector-java-5.1.40-bin.jar连接器

    在这个特定的版本——mysql-connector-java-5.1.40-bin.jar中,我们找到了这个连接器的5.1系列的一个稳定版本。 首先,让我们了解JDBC的作用。JDBC是Sun Microsystems(现为Oracle公司)为Java编程语言设计的一套...

    mysql-connector-java-5.1.42-bin.jar 官网驱动下载

    mysql-connector-java-5.1.42-bin.jar 官网下载的驱动

    ckeditor-java-core-3.5.3

    此版本是"ckeditor-java-core-3.5.3",专门针对Java平台进行了优化,允许开发者在Java应用程序中集成CKEditor的功能。 1. **CKEditor简介** CKEditor是一款基于JavaScript的WYSIWYG(所见即所得)文本编辑器,最初...

    mysql驱动包 mysql-connector-java-5.1.13-bin.jar

    mysql驱动包 mysql-connector-java-5.1.13-bin.jar 方便快捷获取。。。

    mysql-connector-java-5.1.7-bin.jar包

    mysql 数据库 JDBC驱动包 mysql-connector-java-5.1.7-bin.jar

    mysql-connector-java-5.1.15-bin.jar

    "mysql-connector-java-5.1.15-bin.jar"是这个驱动程序的一个特定版本,版本号为5.1.15。 在Java编程环境中,当你需要连接到MySQL数据库时,你需要在类路径中包含这个JAR文件。JDBC驱动程序主要分为四种类型:Type ...

    java图片处理工具类JAR包 java-image-scalingjar

    java图片处理工具类JAR包 java-image-scalingjar

    mysql-connector-java-5.1.30-bin.jar

    mysql-connector-java-5.1.30-bin.jar 最新的mysql jdbc

    java-property-utils-1.9.jar

    配置tomcat,支持js跨域访问用的的jar包 与 cors-filter-1.8.jar 一起用

    Java实列入门实列

    Java实列入门实列是初学者踏入Java编程世界的重要步骤,这个资料集合提供了一系列的示例,帮助新手理解并掌握Java的基本概念和语法。在这个过程中,我们将会探索以下几个关键知识点: 1. **Java环境配置**:在开始...

    mysql链接数据库jar驱动包(mysql-connector-java-5.0.4-bin.jar)

    用于连接mysql数据库. mysql-connector-java-5.0.4-bin.jar

    eclipse-java-indigo-SR2-win32

    "eclipse-java-indigo-SR2-win32" 版本是针对Windows 32位系统的Eclipse IDE的一个特定构建,它属于Eclipse Indigo Service Release 2(SR2)。Indigo是Eclipse的第3.7版本,发布于2011年,它带来了许多新特性和改进...

    java-reflection-Xiangjie.rar_java 反射

    Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。在深入理解Java反射之前,我们首先要明白什么是反射机制。反射机制是指在运行状态中,...

    mysql-connector-java-5.1.20-bin.jar

    mysql-connector-java-5.1.20-bin.jar java中连接mysql用到的驱动程序

Global site tag (gtag.js) - Google Analytics