JAVA7新特性

public class NewFutureOverview<E> {	
	/**
	 * --4--
	 * 新增的类型安全检查
	 * @SafeVarags
	 */
	@SafeVarargs
	public static <T> void addToList3 (List<T> listArg, T... elements) {
		 for (T x : elements) {
			 listArg.add(x);
		 }
	}

	/**
	 * --5--
	 * try-with-resources能够确保需要关闭的资源在声明结束后被关闭
	 * 但是需要被关闭的资源必须实现AutoCloseable接口
	 */
	public static void testTryWithResources(){
		Path path = Paths.get("e:/logs","access.log");
		try {
			//public class BufferedReader extends Reader
			//public abstract class Reader implements Readable, Closeable 
			//public interface Closeable extends AutoCloseable 
			BufferedReader br = Files.newBufferedReader(path, Charset.defaultCharset());
			System.out.println(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * --6--
	 * 关于对异常的操作
	 * 在java 1.7以前的版本一个方法中只能抛出一次异常,1.7支持多个
	 * 在java 1.7可以在catch捕获多个异常,且看下面的例子
	 * @throws FirstException 
	 * @throws SecondException 
	 */
	public static void testException(String result) throws FirstException, SecondException{
		/*
		 * 选择抛出异常
		 * 有如下的异常类
		 * class FirstException extends Exception 
		 * class SecondException extends Exception
		 */
		if(result.equals("first")){
			throw new FirstException();
		}else{
			throw new SecondException();
		}
		/*
		 * 调用testException这个方法的时候,我们可以用下面的写法
		 * 注意异常的捕获方式
		 */
		/*try {
			testException("first");
		} catch (FirstException | SecondException e) {
			System.out.println(e.getMessage());
		}*/
	}
}

1. switch 增加对String的支持 (字符,整形,字符串型)
2. 集合
  • 新增 TransferQueue 接口,是 BlockingQueue 的改进版,实现类为 LinkedTransferQueue
 
增添了使用一个try-with-resources语句自动关闭Connection, ResultSet, and Statement类型资源的功能。详见Processing SQL Statements.下的Closing Connections 索引。 
        RowSet的1.1:引进的RowSetFactory接口和RowSetProvider类,这使你通过JDBC驱动程序创建row sets的所有类型。详见Using JdbcRowSet Objects中的Using the RowSetFactory Interface。
/**
* try-with-resources能够确保需要关闭的资源在声明结束后被关闭
* 但是需要被关闭的资源必须实现AutoCloseable接口
*/
public static void testTryWithResources(){
Path path = Paths.get("e:/logs","access.log");
try {
//public class BufferedReader extends Reader
//public abstract class Reader implements Readable, Closeable 
//public interface Closeable extends AutoCloseable 
BufferedReader br = Files.newBufferedReader(path, Charset.defaultCharset());
System.out.println(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 关于对异常的操作
* 在java 1.7以前的版本一个方法中只能抛出一次异常,1.7支持多个
* 在java 1.7可以在catch捕获多个异常,且看下面的例子
* @throws FirstException 
* @throws SecondException 
*/
public static void testException(String result) throws FirstException, SecondException{
/*
* 选择抛出异常
* 有如下的异常类
* class FirstException extends Exception 
* class SecondException extends Exception
*/
if(result.equals("first")){
throw new FirstException();
}else{
throw new SecondException();
}
/*
* 调用testException这个方法的时候,我们可以用下面的写法
* 注意异常的捕获方式
*/
/*try {
testException("first");
} catch (FirstException | SecondException e) {
System.out.println(e.getMessage());
}*/
} 

4.有限的类型内推
    创建泛型对象时类型推断

   只要编译器可以从上下文中推断出类型参数,你就可以用一对空着的尖括号<>来代替泛型参数。这对括号私下被称为菱形(diamond)。 在Java SE 7之前,你声明泛型对象时要这样

List<String> list = new ArrayList<String>(); 

而在Java SE7以后,你可以这样 

List<String> list = new ArrayList<>(); 
  因为编译器可以从前面(List)推断出推断出类型参数,所以后面的ArrayList之后可以不用写泛型参数了,只用一对空着的尖括号就行。当然,你必须带着”菱形”<>,否则会有警告的。 

Java SE7 只支持有限的类型推断:只有构造器的参数化类型在上下文中被显著的声明了,你才可以使用类型推断,否则不行。 

List<String> list = new ArrayList<>(); 
list.add("A"); 

//这个不行 
list.addAll(new ArrayList<>()); 

// 这个可以 
List<? extends String> list2 = new ArrayList<>(); 

list.addAll(list2);




        



你可能感兴趣的:(JAVA7新特性)