简单原理来介绍java编程之反射

直接上代码,比较简单大家都应该能看懂:

package com.blueZhang.reflect;
/**
 * 创建USB接口
 * 鼠标键盘等都属于USB设备
 * */
public interface usb {
	//打开USB
	public void open();
	//关闭USB
	public void close();

}
/**
 *
 */
package com.blueZhang.reflect;

/**
 * @author blueZhang
 *
 */
public class MousUSB implements usb{

	@Override
	public void open() {
		//
		System.out.println("mouse open!");
	}

	@Override
	public void close() {
		//
		System.out.println("mous close!");
	}

}
package com.blueZhang.reflect;
/**
 * @author blueZhang
 * 实现usb接口的类
 * */
public class KeyUSB implements usb{

	@Override
	public void open() {
		//
		System.out.println("key open!");

	}

	@Override
	public void close() {
		//
		System.out.println("key close!");

	}

}
/**
 *
 */
package com.blueZhang.reflect;

/**
 * @author blueZhang
 *
 */
public class NotPead {
	//电脑运行
	public void run()
	{
		System.out.println("电脑运行");
	}
	//电脑使用USB
	public void use(usb usb)
	{
		if(usb!=null)
		{
			usb.open();
			//
			usb.close();
			//

		}
	}

}
/**
 *
 */
package com.blueZhang.reflect;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Properties;

/**
 * @author Administrator
 *
 */
public class Test {

	/**
	 * @param args
	 *            笔记本可以运行 笔记本可以使用鼠标 笔记本可以使用键盘
	 * @throws FileNotFoundException
	 * @throws ClassNotFoundException
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 *
	 */
	public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, InstantiationException, IllegalAccessException {
		//
		NotPead not = new NotPead();
		// 调用自己的run方法
		not.run();
		//
		/*
		 * 按照我们的使用习惯那就是 先创建两个对象然后调用相应的方法
		 *
		 *
		 * KeyUSB keyUSB = new KeyUSB(); noteBook.use(keyUSB);
		 *
		 * MouseUSB mouseUSB = new MouseUSB(); noteBook.use(mouseUSB);
		 *
		 * 但是我们发现如果总是有新的设备那么总是需要新去创建一个新的对象
		 *
		 * 然后调用这里面的方法这样使我们程序的可扩展性变得更加不好
		 *
		 * 所以使用反射机制如果有新的设备加入那么只需要更改我们的配置文件不必改变我们的
		 *
		 * Test代码。这样提高了我们的代码的可扩展性
		 */
		//创建Properties对象
		Properties properties = new Properties();
		//创建输入流
		FileInputStream fis = new FileInputStream("config\\config.properties");
		//导入inputstream
		for(int i= 0;i<properties.size();i++)
		{
			String value = properties.getProperty("usb"+i);
			//
			Class<?> claz = Class.forName(value);
			//
			Object obj = claz.newInstance();
			//
			usb usb = (usb)obj;
			//
			usb.open();
			//
			usb.close();

			//

		}

	}

}

在自己的工程中创建配置文件config.properties 里面存储的是键值对前面是对像后面是对应的包名类名

配置文件:

usb1=com.blueZhang.reflect.KeyUSB

usb2=com.blueZhang.reflectMousUSB

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 22:28:49

简单原理来介绍java编程之反射的相关文章

Java编程之反射中的注解详解

"注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解"的相关内容,比如在Spring中是如何进行"注解"组合的.因为注解在Java编程中还是比较重要的,所以我们今天的博客就把注解的东西给系统的介绍一下,当然我们会依托于具体的实例. "注解"说白了就是存储数据的一种方式,如果注解单拎出来功能也就一般,如果将"注

Java编程基础-反射

一.java反射 1.反射:动态获取类的信息,以及动态调用对象的方法的功能.可以理解为动态看透类的能力. 2.主要功能:在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 通过Java反射机制,可以在程序中访问已经装载到JVM中的java对象的描述,实现访问.检测和修改描述java对象本身信息的功能.java反射机制的功能十分强大,java.lang.reflect包中提供了对该功能的支持.

JAVA编程之——反射Reflect

说到反射,首先要说一下Java中的类和对象. 在Java中万事万物皆对象(有两个 例外,一个是普通数据类型,另一个是静态的东西,静态的东西不是对象的,是属于类的). 在Java中,类也是对象,类是java.lang.class类的实例对象,即所谓There is a class named Class. 以下代码说明了Java中Class类的实例对象的三种表达方式 package org.guyezhai.reflect; public class ClassDemo1 { public sta

什么是JAVA编程思想?

什么是JAVA编程思想?答案可能很会复杂,但也可以很简单.要了解JAVA编程思想,首先就要了解什么是编程思想,让我们来看看什么是编程思想,一句话来讲就是,用计算机来解决人们实际问题的思维方式,即编程思想. 我们学习编程语言的最终目的,就是希望用计算机来解决我们的实际问题.那么学习编程该如何入手,也是很多初学者犯难的一个问题,特别是对与非计算机专业的人来说更是如此.面对现实如此多的编程语言(比如:C,C++,JAVA,C# -)和 种类繁多的应用技术(比如: windows编程, linux编程,

Spring MVC简单原理

Spring MVC简单原理 针对有Java Web基础.Spring基础和Spring MVC使用经验者,文章比较简单,权当自己的一个总结和备忘吧. 前言 目前基于Java的web后端,Spring生态应该是比较常见了.虽然现在流行前后端分离,MVC和后端模板渲染越来越少,后端专注向前端提供数据接口.但由于笔者维护着一个老项目,既有JSP技术也有只返回JSON的接口,两者都是基于Spring MVC这一套技术实现的,所以暂且觉得了解一下Spring MVC原理还是有所裨益的. Spring M

Java 编程的动态性,第 8 部分: 用代码生成取代反射--转载

既然您已经看到了如何使用 Javassist 和 BCEL 框架来进行 classworking (请参阅 本系列以前的一组文章), 我将展示一个实际的 classworking 应用程序.这个应用程序用运行时生成的.并立即装载到 JVM 的类来取代反射.在综合讨论的过程中,我将引用本系列的前两篇文章,以及对 Javassist 和 BCEL 的讨论,这样本文就成为了对这个很长的系列文章的一个很好的总结. 反射的性能 在 第 2 部分, 我展示了无论是对于字段访问还是方法调用,反射都比直接代码慢

Java编程 的动态性,第 2部分: 引入反射--转载

在“ Java编程的动态性,第1部分,”我为您介绍了Java编程类和类装入.该篇文章介绍了一些Java二进制类格式的相关信息.这个月我将阐述使用Java反射API来在运行时接入和使用一些相同信息的基础.为了使已经熟知反射基础的开发人员关注本文,我将在文章中包括反射性能如何与直接接入相比较. 使用反射不同于常规的Java编程,其中它与 元数据--描述其它数据的数据协作.Java语言反射接入的特殊类型的原数据是JVM中类和对象的描述.反射使您能够运行时接入广泛的类信息.它甚至使您能够读写字段,调用运

黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计模式分类: 创建模式:是对类的实例化过程的抽象化,又分为类创建模式和对象创建模式 类创建模式:工厂方法模式 对象-:简单工厂(静态工厂方法)模式.抽象工厂模式.单例模式.建造模式- 结构模式:描述如何将类或者对象结合在一起形成更大的结构 适配器模式.缺省模式.合成模式.装饰模式(包装模式).门面模式- 行为模式:对不同的对象之间划分责任和算法的抽象化 不变模式.策略模式.迭代子模式.命令模

java编程思想第四版中net.mindview.util包下载,及源码简单导入使用

在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载,并按照所在页面的操作进行操作.当然也可以直接我下载下面的链接,下载的直接是JAR包,可以直接导入并使用: net.mindview.util包:百度网盘:点击下载  密码: ggpi java编程思想第四版源码:百度网盘:点击下载  密码: ur3e 下面我简单的介绍一下源码在Eclipse中的导