通过反射读取配置文件,来打印图形


通过反射读取配置文件,来打印图形

反射我也是刚刚接触,不是很会,只在毕向东的视频中看到过,所以有不足的地方,还请指教,并且我听说张孝祥老师有专门讲过反射技术的,不知道哪位兄弟有这方面的资料,请分享一下。微笑


一、谈谈我对反射的理解:反射我觉得利于程序的拓展,并且对文件的升级有很好的帮助。这样我们可以省去改源代码的麻烦,并且很多时候,我们根本拿不到源代码。

二、实现java的类:(现在我常用的有2个)

1、Class:它表示正在运行的Java应用程序中的类和接口,Class类是Java反射中最重要的一个功能类,所有获取对象的信息(包括:方法/属性/构造方法/访问权限)都需要它来实现。

2、Method:提供关于类或接口中某个方法信息。调用方法的时候,最常用。

三、java反射编写步骤:(这是我理解的步骤,可能不完善,还请懂得多的童鞋指教)

1、获取一个类的Class对象

Class clazz = Class.forName("cn.itheima.Test");

由于运行方法的时候,需要对象,所以需要创建一个对象

Object obj = clazz.newInstance();


2、调用Class对象中的方法。

Method m = clazz.getMethod(“method”);


3、运行方法

m.invoke(obj);


四、我的程序要求:

1、要求打印不同的图形。

2、使用反射的方式调用。

3、使用配置文件调用。需要打印的图形,只要配置文件里面写了,就需要打印。


五、关于我的一些系统配置

1、我的系统是windows 7 - 64bit。

2、开发环境是eclipse。

3、JDK版本1.7。


六、代码部分:

1、第一部分代码:主要程序部分,代码存放在Reslect.java中。

</pre><p></p><p></p><pre name="code" class="java">/**
 * 简介:通过反射原理,来打印图形
 * 要求:将打印图形的方法写在一个.java文件中(打印图形的方法有很多个),然后通过反射
 * 的方式,根据配置文件选择需要显示的图形。
 */
package one;

import java.io.FileInputStream;
import java.util.Properties;
import java.lang.reflect.Method;

public class Reflect {
	public static void main(String[] args) {
		method2();
	}

	/*
	 * 第一种方式调用: 通过程序本身直接调用,
	 */
	public static void method1() {
		// 通过创建对象来调用对象
		Triangle t = new Triangle();
		Quadrangle q = new Quadrangle();

		t.rightAngle();
		t.isosceles();

		q.rectangle();
		q.rhomboid();
		q.square();
	}

	/*
	 * 第二种方式调用: 通过反射原理,读取配置文件来调用
	 */
	public static void method2() {
		try {
			// 流读取配置文件
			FileInputStream fis = new FileInputStream("f:\\config1.txt");
			// 创建集合对象
			Properties pro = new Properties();
			// 使用load方法
			pro.load(fis);

			// 使用循环,读取所以的配置文件中要求显示的图形
			for (int i = 0; i < pro.size() / 2; i++) {
				// 配置文件中的类名
				String className = pro.getProperty("className" + i);
				// 配置文件中的方法名
				String methodName = pro.getProperty("methodName" + i);

				// 反射运用
				// 读取字节码的文件对象
				Class clazz = Class.forName(className);
				// 创建对象
				Object obj = clazz.newInstance();
				// 获取方法
				Method m = clazz.getMethod(methodName);
				// 运行方法
				m.invoke(obj);
			}
			// 关流
			fis.close();
		} catch (Exception e) {
			throw new RuntimeException("读取配置文件失败");
		}
	}
}

2、第二部分代码:打印三角形的图形代码,存放在Triangle.java中

package one;
/*
 * 功能:打印三角形图形
 */
public class Triangle {

	// 定义一个显示三角形的方法,直角三角形
	public static void rightAngle() {
		System.out.println("直角三角形");
		for(int i=0 ; i<7 ;i++){
			for(int j =0;j<=i;j++)
				System.out.print("* ");
			System.out.println();
		}
		System.out.println();
	}
	
	// 定义一个显示三角形的方法,等腰三角形
	public static void isosceles(){
		System.out.println("等腰三角形");
		for (int z = 4; z >= 0; z--) {
			for (int i = z; i >= 0; i--)
				System.out.print(" ");
			for (int j = z; j < 5; j++)
				System.out.print("* ");
			System.out.println();
		}
		System.out.println();
	}
}

2、第三部分代码:打印四边形的图形代码,存放在Quadrangle.java中

package one;
/*
 * 功能:打印四边形图形
 */
public class Quadrangle {

	/*
	 * 功能:打印一个正方形
	 */
	public static void square(){
		System.out.println("正方形");
		for(int i = 0 ;i<=5;i++){
			for(int j=0 ; j<=5 ;j++)
				System.out.print("* ");
			System.out.println();
		}
		System.out.println();
	}
	
	/*
	 * 功能:打印一个长方形
	 */
	public static void rectangle(){
		System.out.println("长方形");
		for(int i = 0 ;i<=5;i++){
			for(int j=0 ; j<=7 ;j++)
				System.out.print("* ");
			System.out.println();
		}
		System.out.println();
	}
	
	/*
	 * 功能:打印一个平行四边形
	 */
	public static void rhomboid(){
		System.out.println("平行四边形");
		for(int z=5;z>=0;z--){
			for(int i=z ;i>=0;i--)
				System.out.print(" ");
			for(int j=0;j<5;j++)
				System.out.print("* ");
			System.out.println();
		}
		System.out.println();
	}
}


七:部分截图展示:

1、运行结果:


2、配置文件截图:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值