黑马程序员_java基础加强学习笔记之(JDK1.5新特性)

------- android培训java培训、期待与您交流! ----------

JDK1.5新特性:主要是通过一些特性来简化开发的代码,提高代码的复用性以及安全性。

JDK1.5新特性有 1静态导入(Static import)
2可变参数(Var args)
3增强的“for”循环(Enhanced For loop)
4自动装箱/ 自动拆箱(Autoboxing/unboxing)
5类型安全的枚举(Type safe enums)
6泛型(Generics)

7注解(Annotation)

......

1静态导入(Static import):import可以导入一个类或者某个包中所有类,import static语句导入一个类中的某个静态方法或者所有静态方法。

例:求两个数中的最大值;求两个数相减结果的绝对值。在Math类下面有一些方法,可以实现常用的数学运算,现在我们就使用Math类下面的方法实现这个需求:

当没有静态导入相应的包时,我们求最大值以及相减绝对值必须要写成 int max = Math.max(6, 8);和 int abso = Math.abs(6-8);有了这新特性就不用加前缀类名了。

例子:

//静态导入 Math类下面的所有静态方法
import static java.lang.Math.*;
 
public class StaticImport {
 
    public staticvoid main(String[] args) {
 
       // 求两个数的最大值
       System.out.println(max(3, 6));
       // 求两个数相减的绝对值
       System.out.println(Math.abs(3-6));
    }

}

2可变参数(Var args):当一个方法接收的参数个数不固定时,就可以定义可变参数。

例如: System.out.println(add(2,3));
System.out.println(add(2,3,5));

可变参数的特点:

1.只能出现在参数列表的最后。
2.可变参数...位于变量类型和变量名之间,前后有无空格都可以;
3.调用一个可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

在1.5之前,可变参数需要方法重载来实现,它的弊端就是代码繁多,而可变参数一个方法就可以实现。

重载和重写的区别:

重载:一个类中定义了多个同名的方法,但是他们的参数个数、类型以及返回值不同。

重写:是指子类继承父类后,要覆盖父类的方法。这方法的方法名、参数个数和类型积极返回值都相同,但实现的过程不同。

可变参数的定义语法: public  void add( int val, int ... args) { }
例子:
public class VariableParameter 
{
public static void main(String[] args)
{
System.out.println(add(2,3));
System.out.println(add(2,3,5));
}
 //可变参数:接收一个整数,再接收若干个整数。
public static intadd(int x,int... args )
{
int sum =x;
for(int i=0;ilength;i++){
sum+=args[i];
}
}

}

3增强for循环(Enhanced For loop):大大的简化了集合的遍历。

语法:for(type 变量名:集合变量名) { ... }

注意事项:迭代变量必须在()中定义!

集合可以是数组或者实现了Iterable接口的集合类。

例:

public static int add(int x,int... args){
int sum=x;

//增强for循环
for(int arg:args){
sum+=arg;
}
return sum;
}

4基本数据类型的自动装箱与拆箱(Autoboxing/unboxing)

自动装箱:将基本数据类型自动转换成对应的包装类(数据类型的对象)。

自动拆箱:将(包装类)对象变成其对应的基本数据类型。

例子:

 //自动装箱,将一个基本数据类型int变成对应数据类型的对象Integer


       Integer i = 8;


//自动拆箱:i是Integer对象,不支持加法运算,


//进行加法运算之前先将其变成基本数据类型int,这就叫拆箱


       int value = i + 12;


       System.out.println(value);

注意:一个整数  (-128~127)一旦包装成一个Integer对象时,就会把它放在缓存池中缓存起来,下次如果再次创建Integer对象并且其值和上一次创建的相同,就直接从缓存池中取得该值,这样可以节省内存空间。因为这些小的整数使用频率很高,会反复使用,所以再次使用时直接从缓存池中取就可以了,而不需要给这些对象分配新的内存空间。这是一种设计模式——享元设计模式(flyweight)。

5.类型安全的枚举(Type safe enums)

当每一类型可取值范围是有限的时候,可以使用枚举,例如一个星期只能用固定的周末到周一那几个英语单词表示,如果直接用其他数字的话,那么编译不会出错,但是却不符合输入要求,而使用枚举增加程序的易读性和健壮性

6泛型(Generics)

在之前一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。新增了泛型,它允许指定集合里元素的类型,泛型将运行时的异常转换到了编译阶段,避免了强制类型转换。泛型只是编译时的概念。在编译为class文件的时候,把泛型类型去掉了,主要是为了兼容类加载器。

7.注解(
Annotation

作用:向编译器或开发工具传递某种信息,作为一个标记。

常用的有:
@SuppressWarnings压缩警告
不提示过时注解

@Deprecated用来说明某个方法已过时或者不建议使用,提供警告信息

@Override用来说明一个方法是覆写方法,并检查是否符合复写的规则
......

你可能感兴趣的:(高新技术&ava,7K,面试题)