您的位置:首页 > 职场人生

黑马程序员_基础加强

2013-10-20 18:29 232 查看
----------- 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学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  基础加强