黑马程序员_基础加强

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

JDK5.0中引入了许多java的新特性,有些特性是为了简化书写,有些特性是为了进一步满足开发人员的需求,恰当的使用新特性,能提升代码的效率,安全性。同时学习并使用新特性是成为一名优秀的程序员必不可少的技能。体现了开发人员的自学能力,同时也提升了项目的开发进度。JDK5.0引入了较多的新特性。比较有代表性的有以下新特性。

1、增强for循环:迭代数组和实现Iterator接口的集合,不可有进行涉及索引的操作。

当需要对特定元素的操作时,推荐使用不同的for循环。

2、静态导入:导入包中静态方法。

需要注意当导入的包中有相同类时需要写全相应类的包名。

3、可变参数:用于函数的参数上,操作的同一类型的元素个数不确定的时候。 必须放在参数的末尾作为最后一个参数。

可变参数的内部封装了数组,可变参数需用在方法参数的最后一个参数的情况。

4、自动拆箱与装箱:将基本数据类型封装为包装类

       Integernum = 4; ---à自定装箱,等效于Integer num = new Integer(4);

       num= num + 1; ---à自动拆箱再装箱:num+1是拆箱成int,然后装箱为Integer

       为了优化内存,包装类含有缓冲池:Integer池大小:-128~127,一个字节

       String池:字符串池,已存在的不再创建新的。

这里应用了享元设计模式Flyweight。

5、枚举:enum,限定和固定对象的个数,指定取值内容。

       枚举对象必须放在整个类最前面

私有构造函数,可定义属性、方法,实现接口、继承类

枚举类中可以有抽象方法,但是在对象身上必须实现,即列出的枚举值必须实现。

比较两个值,可直接用==即可


6、泛型:为解决类型的安全机制而出现的。用<>表示

       多用于集合中,限定存入集合中的元素类型;类型不确定时也可使用

       泛型是提供给编译器检查用的,编译后会去掉“类型”信息,不会影响效率

       静态方法无法访问类上定义的泛型,需自己定义在方法上

       泛型不存在继承,赋值两边类型必须一样,或也可一边有泛型

       好处:

              将运行时期的错误转移到编译时期,更安全。

              避免了强转的麻烦

通配符:

开发者不知道调用者传入的类型是什么的时候,可使用?代表唯一的任意类型。

泛型的限定:

       向上限定:? extends E:接收E或E的子类型

       向下限定:? super E:接收E或E的父类型

下面是静态导入的代码示范:

package cn.itcast.day1;

//import static java.lang.Math.max;
import static java.lang.Math.*;
import cn.itcast.day2.AnnotationTest;

public class StaticImport {

	public static void main(String[] args){
		
		AnnotationTest.sayHello();
		int x = 1;
		try {
			x++;
		} finally {
			System.out.println("template");
		}
		System.out.println(x);
		
		
		System.out.println(max(3, 6));
		System.out.println(abs(3 - 6));
		
	}
}

下面是制动拆装箱的代码示范:

package cn.itcast.day1;

public class AutoBox {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer iObj = 3;
		System.out.println(iObj + 12);
		
		String s1 = new String("abc");
		String s2 = new String("abc");		
		Integer i1 = 137;
		Integer i2 = 137;
		

		System.out.println(i1 == i2);
		
		Integer i3 = Integer.valueOf(213);
		Integer i4 = Integer.valueOf(213);
		System.out.println(i3==i4);
		
	}

}
下面的代码是枚举的代码示范:

package cn.itcast.day1;

import java.util.Date;

public class EnumTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WeekDay1 weekDay = WeekDay1.MON;
		System.out.println(weekDay.nextDay());
		
		WeekDay weekDay2 = WeekDay.FRI;
		System.out.println(weekDay2);
		System.out.println(weekDay2.name());
		System.out.println(weekDay2.ordinal());	
		System.out.println(WeekDay.valueOf("SUN").toString());
		System.out.println(WeekDay.values().length);
		
		new Date(300){};
	}

	public enum WeekDay{

		SUN(1),MON(),TUE,WED,THI,FRI,SAT;
		private WeekDay(){System.out.println("first");}
		private WeekDay(int day){System.out.println("second");}
	}
	
	public enum TrafficLamp{
		RED(30){
			public  TrafficLamp nextLamp(){
				return GREEN;
			}
		},
		GREEN(45){
			public  TrafficLamp nextLamp(){
				return YELLOW;
			}			
		},
		YELLOW(5){
			public  TrafficLamp nextLamp(){
				return RED;
			}			
		};
		public abstract TrafficLamp nextLamp();
		private int time;
		private TrafficLamp(int time){this.time = time;}
	}
}

下面是使用普通java类对枚举的模拟实现:

package cn.itcast.day1;

public abstract class WeekDay1 {
	private WeekDay1(){}
	
	public final static WeekDay1 SUN = new WeekDay1(){

		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return MON;
		}
		
	};
	public final static WeekDay1 MON = new WeekDay1(){

		@Override
		public WeekDay1 nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}
		
	};	
	
	public abstract WeekDay1 nextDay();
	
/*	public WeekDay nextDay(){
		if(this == SUN){
			return  MON;
		}else{
			return SUN;
		}
	}
*/
	
	public String toString(){
		return this==SUN?"SUN":"MON";
	}
}

JDK5.0中的新特性是面试中的常考题目,需要掌握好,一方面有助于应付面试,另一方面对于开发也有较大的帮助。


----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值