现在的位置: 首页 > 综合 > 正文

JDK 更新的内容 1.5和1.7

2018年01月29日 ⁄ 综合 ⁄ 共 3158字 ⁄ 字号 评论关闭

JAVA5后新增的语法:

1.泛性编程

C 通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时 候我们也不得不对他们进行强制得类型转换。猛虎引入了泛型。例子如下:ArrayList<String> list = new ArrayList<String>();list.add(new String("Hello!"));System.out.println(list.get(0));

2.自动装箱/拆箱

Java中经常需要在原始数据类型和它们的包装类之间转换,尤其是将数据放入Collection容器中和取出来时。为了减少这些重复代码,JDK 5.0添加了自动装箱/解箱操作,从此之后,基本上可以将原始数据类型当作对象来操作了。 自动装箱:指开发人员可以把一个基本数据类型直接赋给对应的包装类。 自动拆箱:指开发人员可以把一个包装类对象直接赋给对应的基本数据类型。 例:public void test(){ Integer i = 1000; //装箱 int c = i; //拆箱 //典型的应用案例 List
list = new ArrayList(); list.add(12); //装箱 int temp = (Integer)list.get(0); //拆箱 }

3.增强的循环结构(for-each循环)

引入增强for循环的原因:在JDK5以前的版本中,遍历数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦!加入这种循环方式也是为了简化一些代码开发,尤其是对Collection容器的遍历,以前都需要得到Iterator,然后调用next()得到下一个对象,调用hasNext()判断是否还有,要不停写这种重复的代码,用foreach则很简单。因此JDK5中定义了一种新的语法——增强foreach循环,以简化此类操作。增强for循环只能用在数组、或实现Iterable接口的集合类上, 语法格式: for(变量类型
变量 :需迭代的数组或集合){具体代码 } 例: int data[] = { 1, 2, 3, 4, 5 }; for(int j : data) System.out.println(j);

4.枚举类型

Java添加了对枚举类型的支持,使用enum关键字进行定义。下面是一个例子: public enum Meal {BREAKFAST, LUNCH, SUPPER}; public static void main( String[] args ) { Meal m = Meal.BREAKFAST; System.out.println( m ); } 其中定义的每一个常量都是Meal的一个实例。可以看到枚举类型的定义非常像一个类,可以有方法,可以有构造函数,不过构造函数不能是public或者protected的;此外实例必须在一开始就定义。另外就是enum不能被继承,因为事实上定义了一个enum后,编译器会自动生成一个继承了java.lang.Enum的同名的类,而Java是不支持多重继承的,所以定义的enum就不能被继承了,这一点在某些时候带来了一些限制,比如想重用代码来扩展enum时。此外,注意上面定义中的语法,各个实例间用逗号分隔,实例全部结束后用分号。
枚举类型还定义了一些方法:toString(), values()和ordinal()等。 enum还支持静态导入,支持用在switch语句中。

5.静态导入

静态导入非常简单,就是将一个类的静态变量或者方法导入,这样在引用时就不需要再写类名了,减少了代码输入的工作量。例子如下:import static java.lang.System.out;public class StaticImport { public static void main( String[] args ) { out.println( "Good" ); }}代码中用了最常用的输出语句,原来需要写System.out.println(),现在将out静态导入,则只需写out.println()通常导入的语句也可以写成import
static java.lang.System.*来将该类中的所有静态变量和方法都导入。可以看到静态导入是非常简单的,只需记住虽然该特性一般称为“静态导入(static import)”,写代码时却要写成“import static”。

6.可变参数列表

从C中借鉴来的功能,如果方法想要接受任意数目的参数的话,就可以用,得到的参数则用foreach语法一个一个读出来。以前则可能需要用一大堆的重载方法。形式如: void argtest(Object ... args) { for(int i = 0; i < args.length; i++) System.out.println(i); } 例子如下: public class Test { public static void test( int...values ) { System.out.println(
values.length ); for ( int i : values ) { System.out.println( i ); } } public static void main( String[] args ) { test( 1 ); test( 1, 2 ); test( 1, 2, 3 ); }}上面代码中可以看到,可变参数列表还有个属性是length。然后我们可以这样调用这个函数:argtest(1);argtest(1, 2, 4, 5, 6);

7.格式化输出

System.out.printf("This is a test: %4.2f\n", 123.123);这就会打印出:This is a test: 123.12

8.从终端读取数据

刚开始接触Java 的时候,我怎么也不能用Java 在终端像C一样方便的读取数据。要从终端读取一个整数我以前是这么弄的:try { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int i = Integer.parseInt(reader.readLine());} catch(IOException e) { }现在好了,Java 里面引入了一个Scanner(),可以方便的从终端读取数据:public
class ScannerExample{ public static void main(String[] args){ Scanner read = new Scanner(System.in); int i = read.nextInt(); System.out.println(“输入的i=”+i); }}

JAVA7后新增语法:

1,对整型支持改进。

int i = 0b0011; int j = 0b0011_0101;  以0B或者0b开头的二进制代码可以给整型赋值,并且也支持以下划线_为分割的二进制整型支持,为的是代码有更好的可读写。

2,swicth对String的整型

复制代码 switch (s) { case "1": break; case "2": break; case "3": break; }

3,泛型的支持深化

Map<String,String> map=new HashMap<>();  这个功能其实带来的改变不算太大,特别是Java依然没有改变假泛型。

4,多层次catch

try { } catch (SQLException | IOException e) { e.printStackTrace(); }

5:自动资源管理

凡是继承了Closeable这个类,系统在方法退出的时候都会自动的关闭资源。

6:FileSystem的API支持

Java7对文件系统支持较为广泛,无论是copy, move,delete等操作,还是文件系统的监视,递归,获取文件的元数据都有了大大的提高。

【上篇】
【下篇】

抱歉!评论已关闭.