java基础--高薪技术--JDK1.5新特性

本文详细介绍了从JDK1.5到JDK1.7的重要新特性,包括自动装箱拆箱、泛型、增强for循环、静态导入、可变参数、枚举类型等,并对JDK1.7新增的二进制字面量、字符串在switch中的使用、多catch语句、自动资源释放等功能进行了说明。



一、JDK1.5新特性

1.JDK1.5

(1)装箱和拆箱

A.自动装箱

Integer num = 12; //就是自动把int类型的12 转为Integer类型

B.自动拆箱

System.out.println(num + 10);

C.基本数据类型的对象缓存

Integer num1 = 12;
Integer num2 = 12;		这块相等,<=127都是真的
System.out.println(num1 == num2);

Integer num3 = 129;                这块不相等,因为是对象
Integer num4 = 129;
System.out.println(num3 == num4);

Integer num5 = Integer.valueOf(12);
Integer num6 = Integer.valueOf(12)  ;   这块的道理同上
System.out.println(num5 == num6);

(2)泛型

A.概述

泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中非法输入,编译器编译带类型说明的集合时会去掉“类型”信息,使程序运行效率不受影响

B.格式

<数据类型>  

注意:该数据类型只能是引用类型

C.好处

a.把运行时期的问题提前到了编译期间

b.避免了强制类型转换

c.优化了程序设计,解决了黄色警告线问题,让程序更安全

D.泛型的前世今生

a.泛型的由来

Object类型作为任意类型的时候,在向下转型的时候,会隐含一个转型问题

b.泛型类

/*
 * 泛型类:把泛型定义在类上
 */
public class ObjectTool<T> {
	private T obj;

	public T getObj() {
		return obj;
	}

	public void setObj(T obj) {
		this.obj = obj;
	}
}

c.泛型方法

/*
 * 泛型方法:把泛型定义在方法上
 */
public class ObjectTool {
	public <T> void show(T t) {
		System.out.println(t);
	}
}

d.泛型接口

/*
 * 泛型接口:把泛型定义在接口上
 */
public interface Inter<T> {
	public abstract void show(T t);
}

e.泛型高级通配符

?:任意类型,如果没有明确,那么就是Object以及任意的Java类了

? extends E:向下限定,E及其子类

? super E:向上限定,E极其父类

E.我们在哪里使用呢?

一般是在集合中使用

(3)增强for
A.语法

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

B.注意事项

a.迭代变量必须在()中定义

b.集合变量可以是数组或者实现了Iterable接口的集合类

C.举例

	public static int add(int x,int ...args) {
		int sum = x;
		for(int arg:args) {
			sum += arg;
		}
		return sum;
	}

(4)静态导入

A.import语句可以导入一个类或某个包中的所有类

B.import static 语句导入一个类中的某个静态方法或所有静态方法

C.语句举例

import static java.lang.Math.sqrt;
import static java.lang.Math.*;

(5)可变参数
A .特点

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

B.例子

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(add(1,2,3,5));
		System.out.println(add(2,3,5));		
	}
	
	public static int add(int x,int ...args) {
		int sum = x;
		for(int i=0;i<args.length;i++) {
			sum += args[i];
		}
		return sum;
	}

(6)枚举

A.概述

是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有七天,一年只有12个月。

一个类有限个数的实例,才能使枚举类

B.格式

public enum 枚举类名{

枚举项1,枚举项2...;

}


C.注意

a.枚举类可以有构造器,但必须是private的,她默认的也是private的

b.枚举类也可以有抽象方法,但是枚举项必须重写该方法

D.常用方法

int compareTo(E o)

String name()

int ordinal()

String toString()

<T> T valueOf(Class<T> type.String name)

values() 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便

E.例子

/*
 * 通过JDK5提供的枚举来做枚举类
 */
public enum Direction3 {
	FRONT("前") {
		@Override
		public void show() {
			System.out.println("前");
		}
	},
	BEHIND("后") {
		@Override
		public void show() {
			System.out.println("后");
		}
	},
	LEFT("左") {
		@Override
		public void show() {
			System.out.println("左");
		}
	},
	RIGHT("右") {
		@Override
		public void show() {
			System.out.println("右");
		}
	};

	private String name;

	private Direction3(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public abstract void show();
}

二、JDK1.7新特性(了解)

(1)二进制字面量

可以用二进制来表示整数(byte,short,int和long) ;语句简单只要在二进制数组前面加0b或者0B

(2)用_分隔数据

注意:

不能出现在进制标识和数值之间

不能出现在数值开头和结尾

不能出现在小数点旁边

(3)switch语句可以用字符串

(4)泛型推断(菱形泛型)

(5)多catch的使用

就是多个catch合并

(6)自动释放资源的用法(try-with-resources语句)

A.格式:

try(必须是java.lang.AutoCloseable的子类对象){...}

B.好处

资源自动释放,不需要close()

把需要关闭资源的部分都定义在这里就OK了

主要是流体系的对象是这个接口的子类


public class Demo {
	public static void main(String[] args) {
		// 二进制字面量
		int x = 0b100101;
		System.out.println(x);
		// 数字字面量可以出现下划线
		int y = 1_1123_1000;
		// 不能出现在进制标识和数值之间
		int z = 0x111_222;
		// 不能出现在数值开头和结尾
		int a = 0x11_22;
		// 不能出现在小数点旁边
		double d = 12.3_4;
		// switch 语句可以用字符串
		
		// 泛型简化
		ArrayList<String> array = new ArrayList<>();
		// 异常的多个catch合并
		method();
	}

	private static void method() {
		// try-with-resources 语句
		// try(必须是java.lang.AutoCloseable的子类对象){…}
        //以前的版本
		try {
			FileReader fr = new FileReader("a.txt");
			FileWriter fw = new FileWriter("b.txt");
			int ch = 0;
			while ((ch = fr.read()) != -1) {
				fw.write(ch);
			}
			fw.close();
			fr.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// jdk1.7可用的代码版本
		try (FileReader fr = new FileReader("a.txt");
				FileWriter fw = new FileWriter("b.txt");) {
			int ch = 0;
			while ((ch = fr.read()) != -1) {
				fw.write(ch);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值