反射

反射

反射是运行期间的行为

单例模式防反射

package com.mage.reff;

public class Lazy {
	private static Lazy lazy;
	private Lazy() {
		if(lazy != null) {
			throw new RuntimeException("让你丫反我野");
		}
	}
	
	public static Lazy getInstance() {
		if(lazy == null) {
			lazy = new Lazy();
		}
		return lazy;
	}
	
	public Object readResolve() {
		return lazy;
	}
}

Class类

这个类产生的一个实例对象用来描述某个类的
class<Student>这个对象描述的就是Class类。
所有的Student的对象和Student都共享该Class对象
举例:
	class<String> 
	
三种:
	*Class.forName(需要获取类的权限定名:包名.类名)(最常见)
	*类名.Class
	*class对象.getClass(获取父类的class对象)
package com.mage.reff;

public class Test01 {
	public static void main(String[] args) throws ClassNotFoundException {
		//获取一类的class对象的方法
		Class clz  =  Class.forName("java.util.Scanner");
		System.out.println(clz);
		
		//获取String的Class对象
		Class clzs = String.class;
		System.out.println(clz==clzs);
		
		//获取String对象对应的Class对象
		Class clz1 = "hanbao".getClass();
		Class clz2 = "hehhe".getClass();
		System.out.println(clz1==clz2);
		System.out.println(clz1==clzs);
		System.out.println(clz2==clzs);
		System.out.println(clz2.getSuperclass());
	}

}

package com.mage.reff;

import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class ExportPoi {
	public static void main(String[] args) {
		List<Student> ls = new ArrayList<>();
		ls.add(new Student("关羽",1,1,67));
		ls.add(new Student("刘备",2,1,80));
		ls.add(new Student("张飞",3,1,56));
		ls.add(new Student("曹操",4,1,90));
		
		export(Student.class,ls,"学生成绩单.xls","C:\\Users\\Administrator\\Desktop",new String[] {"姓名","学号","性别","成绩"},new String[] {"name","id","gender","score"});
	}
	/**
	 * @param clz  导出集合对象中每个元素的Class对象
	 * @param ls	导出的集合对象
	 * @param fileName  导出的文件名称
	 * @param filePath  导出的文件路径
	 * @param titls		导出文件的标题
	 * @param fieldName	 导出集合中对象的每个属性名称(英文)
	 * @throws IllegalAccessException 属性的是不可见 抛出该异常
	 * @throws IllegalArgumentException  非法参数异常
	 * @throws IOException 连接错误
	 * */
	public static void export(Class<?> clz,List<?> ls, String fileName,String filePath,String[] titles,String[] fileldName) throws IllegalArgumentException, IllegalAccessException, IOException  {
		//	创建工作簿对象
		Workbook wb = new HSSFWorkbook();
		
		//创建流对象
		FileOutputStream fs = new FileOutputStream(filePath+File.separator+fileName);
		
		//创建流对象
		Sheet  sheet = wb.creatSheet(fileName.substring(0,fileName.indexOf(".")));
		
		//创建row
		Row rowTitle = sheet.creatRow(0);
		
		//创建单元格
		for(int i = 0;i<titles.length;i++) {
			//创建单元格
			Cell cell = rowTitle.creatCell(i);
			//填充值
			cell.setCellValue(titles[i]);
		}
		
		//添加数据	循环创建List长度个row
		for(int i =0;i<ls.size();i++) {
			//创建row
			Row rowData = sheet.creatRow(i+1);//行数据
			Field[] f = clz.getDeclaredFields();
			for(int j =0;j<titles.length;j++) {
				//创建单元格
				Cell cell = rowDate.createCell(j);
				//获取属性名称
				f[j].setAccessible(true);
				cell.setCellValue(f[j].get(ls.get(i)).toString());
				f[j].setAccessible(false);
			}
		}
		//写出
		wb.write(fs);
		//关闭
		fs.close();
		wb.close();
	}

}
class Student{
	private int id;
	private String name;
	private int gender;
	private int score;
	
	public Student() {
		// TODO Auto-generated constructor stub
	}
	
	public Student(String name, int id, int gender, int score) {
		super();
		this.name = name;
		this.id = id;
		this.gender = gender;
		this.score = score;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getGender() {
		return gender;
	}

	public void setGender(int gender) {
		this.gender = gender;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [name=" + name +  ", id=" + id +", gender=" + gender + ", score=" + score + "]";
	}
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值