JDK1.5技术增强(一)

一、Eclipse的使用


1、快捷键

  • 内容提示:Alt+/
  • 错误提示:Ctrl+1
  • 格式化代码块:Ctrl+Shift+F
  • 导包:Ctrl+Shift+O
2、程序的调试
  • F5:跳入
  • F6:跳过
  • F7:跳出

3、Junit


二、枚举


1、为什么需要定义枚举?

一些方法在运行时,他需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5前采用自定义带枚举的类解决,JDK1.5后可以直接使用枚举解决。


2、枚举类有如下的特性:

  • 枚举类是一种特殊形式的Java类
  • 枚举类中声明的每一个枚举值代表枚举类的一个实例对象
  • 与java的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数但枚举类的构造函数必须是私有的
  • 枚举类也可以实现接口、或继承抽象类
  • JDK1.5还扩展了switch语句,除了可以接收byte、short、int、char类型的数据,还可以接受枚举类型
  • 若枚举类只有一个枚举值,则可以当做单例设计模式使用
3、Java中声明的枚举类,均是java.lang.Enum类中的孩子,它集成了Enum类中的所有方法,常见的方法如下:
  • name():返回枚举常量的名称
  • ordinal():返回枚举常量的序数
  • Enum.valueof(Class  enumType,String  name):返回带指定名称的指定枚举类型的枚举常量
  • values():此方法虽然在JDK文档中找不到,但每个枚举类都具有该方法,用来遍历枚举类的所有枚举值

4、练习:请编写一个关于星期几的枚举WeekDay,要求:
  • 枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun
  • 该枚举要有一个方法,调用该方法返回中文格式的星期
public class Demo3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Week s = new Week();
		s.setName("今天");
		s.setGrade(Grade.Mon);
		
		String str = Grade.Mon.getValue();
		String str1 = Grade.Mon.toLocalGrade();
		
		System.out.println(str+":"+str1);
	}

public class Week {
	private String name;
	private Grade grade;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Grade getGrade() {
		return grade;
	}
	public void setGrade(Grade grade) {
		this.grade = grade;
	}
		
}

}

public enum Grade {
	Mon("Monday") {
		@Override
		public String toLocalGrade() {
			return "星期一";
		}
	},
	Tue("Tuesday") {
		@Override
		public String toLocalGrade() {
			return "星期二";
		}
	},
	Wed("Wednesday") {
		@Override
		public String toLocalGrade() {
			return "星期三";
		}
	},
	Thu("Thursday") {
		@Override
		public String toLocalGrade() {
			return "星期四";
		}
	},
	Fri("Friday") {
		@Override
		public String toLocalGrade() {
			return "星期五";
		}
	},
	Sat("Saturday") {
		@Override
		public String toLocalGrade() {
			return "星期六";
		}
	},
	Sun("Sunday") {
		@Override
		public String toLocalGrade() {
			return "星期日";
		}
	};
	
	private String value;
	private Grade(String value){
		this.value = value;
	}
	public String getValue(){
		return value;
	}
	public abstract String toLocalGrade();
}


二、反射

1、什么是反射?

反射就是把Java类中的各种成分映射成一个个的Java对象。例如一个类中有:成员变量,构造方法,方法等信息,利用反射技术可以对一个类进行剖析,把各个组成部分映射成一个个的对象。

2、Class类
  • Class类用于表示.class文件
  • 如何得到class文件对应的class对象:类名.class,对象.getClass(),Class.forName(“类名‘)
  • 数组类型的Class实例对象:Class.isArray()
  • 九种实例Class类型:int,short,byte,long,float,double,char,boolean,void
3、Constructor类
  • Constructor类的实例对象是代表类的一个构造方法
  • 得到类所有构造方法:Constructor[]  constructors  =  Class.forName(”java.lang.String“).getConstructors();
  • 得到一个构造方法:Constructor constructor  =  Class.forName(“java.lang.String”).getConstructor();
  • 利用构造方法创建实例对象:String str  =  constructor.newInstance(“abc’);
  • Class类中的newInstance方法也可以创建实例对象,其工作原理是先得到无参的构造函数,在用构造方法创建实例对象
4、Field类
  • Field类代表某个类中的一个成员变量
  • Field对象是对应类上面的成员变量,而非对象上的
5、Method类
  • Method类代表某个列中的一个成员方法
  • 得到类中的某一个方法:Method  charAt  =  Class.forName(”java.lang.string“).getMethod(”charAt“,int.class);
  • 调用方法:1通常方式str.charAt(1),2反射方式charAt.invoke(str,1);
6、练习:用反射执行某个类中的main方法

public void Test1(){
		Class clazz = Class.forName("com.liyongjia.rflex.Person");
		Method mehtod = clazz.getMethod("main",String[].class);
		method.invoke(null,(object)new String[]{"a","b"});
	}


三、JavaBean内省

1、访问JavaBean属性的两种方式:
  • 直接调用bean的get和set方法
  • 通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式:
  • 第一种方式:通过PropertyDescriptor类操作bean的属性;
  • 第二种方式:通过Introspector类获得Bean对象的BeanInfo,然后通过BeanInfo来获取属性的描述器,通过属性描述器获取某个属性对应的getter和setter方法,然后通过反射机制来调用这些方法。
2、练习:内省技术访问的两种方式
//Introspector方式
	public void test1() throws IntrospectionException{
		BeanInfo info=Introspector.getBeanInfo(Person.class);
		
		BeanInfo info2=Introspector.getBeanInfo(Person.class,Object.class);
		PropertyDescriptor[] pds=info.getPropertyDescriptors();
		for(PropertyDescriptor pd:pds){
			System.out.println(pd.getName());
			//ab age class name	password
		}
	}
//PropertyDescriptor方式
	public void test2() throws  Exception{
		Person p=new Person();
		PropertyDescriptor pd=new PropertyDescriptor("age", Person.class);

		Method method=pd.getWriteMethod();
		method.invoke(p, 45);
		System.out.println(p.getAge());//45
		

		method=pd.getReadMethod();
		System.out.println(method.invoke(p, null));//45
	}


四、BeanUtils工具包

1、Apeche组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此很多程序员使用这套API,简化程序代码的编写

2、beanutils工具包的常用类:
  • BeanUtils:
  • PropertyUtils
  • ConvertUtils.register(Converter  convert,Class  clazz)
  • 自定义转换器
3、练习:常用工具类的示例

@Test
	public void test1() throws Exception{
		Person p=new Person();
		BeanUtils.setProperty(p, "age", 456);
		System.out.println(p.getAge());//456
	}
	@Test
	public void test2() throws Exception{
		String name="aaaa";
		String age="123";
		String password="pw";
				
		Person p=new Person();
		//支持8种基本类型自动转换
		BeanUtils.setProperty(p, "name", name);
		BeanUtils.setProperty(p, "age", age);
		BeanUtils.setProperty(p, "password", password);
		
		System.out.println(p.getName());//aaaa
		System.out.println(p.getAge());//123
		System.out.println(p.getPassword());//pw

	}
	@Test
	public void test3() throws Exception{

		String birthday="1983-12-1";
		
		//为了让日期赋值到bean的birthday属性上,给beanUtils注册一个日期转换器
		//ConvertUtils.register(converter, clazz);
		ConvertUtils.register(new Converter(){
			
			public Object convert(Class type, Object value) {
				if(value==null) return null;
				if(!(value instanceof String)){
					throw new ConversionException("只支持String类型的转换");
				}
				String str=(String)value;
				if(str.trim().equals("")) return null;
				SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd",Locale.US);
				try {
					return df.parse(str);
				} catch (ParseException e) {
					throw new RuntimeException(e);					
				}
			}
		}, Date.class);
		Person p=new Person();
		BeanUtils.setProperty(p, "birthday", birthday);
		System.out.println(p.getBirthday());//pw
		System.out.println("___"+BeanUtils.getProperty(p, "birthday"));
	}
	public void test5() throws Exception {
		Map map=new HashMap();
		map.put("name", "aaa");
		map.put("password", "123");
		map.put("brithday", "1980-09-09");
		ConvertUtils.register(new DateLocaleConverter(), Date.class);
		Person p=new Person();
		//用map集合填充bean属性,map关键字和bean属性要一致
		BeanUtils.populate(p, map);
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
综合小区管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、车位管理、车位分配管理、出入管理、字典管理、房屋管理、物业费缴纳管理、公告管理、物业人员投诉管理、我的私信管理、物业人员管理、用户管理、管理员管理。用户的功能包括管理部门以及部门岗位信息,管理招聘信息,培训信息,薪资信息等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 综合小区管理系统管理系统可以提高综合小区管理系统信息管理问题的解决效率,优化综合小区管理系统信息处理流程,保证综合小区管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理综合小区管理系统信息,包括出入管理,报修管理,报修管理,物业费缴纳等,可以管理操作员。 出入管理界面,管理员在出入管理界面中可以对界面中显示,可以对招聘信息的招聘状态进行查看,可以添加新的招聘信息等。报修管理界面,管理员在报修管理界面中查看奖罚种类信息,奖罚描述信息,新增奖惩信息等。车位管理界面,管理员在车位管理界面中新增。公告管理界面,管理员在公告管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值