`
287854442
  • 浏览: 48002 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java7带来的新的语言特性

阅读更多

 

 

1。二进制字面量值

// An 8-bit 'byte' value:

	byte aByte = (byte)0b00100001;

	// A 16-bit 'short' value:
	short aShort = (short)0b1010000101000101;

	// Some 32-bit 'int' values:
	int anInt1 = 0b10100001010001011010000101000101;
	int anInt2 = 0b101;
	int anInt3 = 0B101; // The B can be upper or lower case.

	// A 64-bit 'long' value. Note the "L" suffix:
	long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;
 

2.可以在数字字面量中使用"下划线"("_")

 

 

        long creditCardNumber = 1234_5678_9012_3456L;
	long socialSecurityNumber = 999_99_9999L;
	float pi = 	3.14_15F;
	long hexBytes = 0xFF_EC_DE_5E;
	long hexWords = 0xCAFE_BABE;
	long maxLong = 0x7fff_ffff_ffff_ffffL;
	byte nybbles = 0b0010_0101;
	long bytes = 0b11010010_01101001_10010100_10010010;
 

 

要注意的是,下划线放在以下几个地方是不正确的:

(1).最前面; 如_52 ,这不是数字字面量,而是也是变量名了

(2).小数点的两边; 如float pi1 = 3_.1415F 和 float pi1 = 3._1415F 都是不正确的

(3).最后面; 如int x3 = 52_;

(4).不能放在0x这样前缀的中间,如:int x5 = 0_x52;

3.可以在switch语句中使用String类型的变量

public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
	     String typeOfDay;
	     switch (dayOfWeekArg) {
		 case "Monday":
		     typeOfDay = "Start of work week";
		     break;
		 case "Tuesday":
		 case "Wednesday":
		 case "Thursday":
		     typeOfDay = "Midweek";
		     break;
		 case "Friday":
		     typeOfDay = "End of work week";
		     break;
		 case "Saturday":
		 case "Sunday":
		     typeOfDay = "Weekend";
		     break;
		 default:
		     throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
	     }
	     return typeOfDay;
	}
 

4.类型推断,泛型构造器和非泛型的Classes

(Type Inference and Generic Constructors of Generic and Non-Generic Classes)

首先看一个泛型构造器和类型推断的例子:

class MyClass<X> {  
	  <T> MyClass(T t) {
	    // ...
	  }
	}
 

 

这里X是泛型类MyClass<X>的参数化类型,而T是其构造器的参数化类型。

那怎么样实例化它呢?

new MyClass<Integer>(""),这条语句创建了MyClass<Integer>一个实例,这条语句显式的指定了MyClass<X>

中的参数X的类型为Integer。 同时,因为实际调用构造器时参数是String类型,所以编译器推断String就是这

个T的类型,。

接下来看下面这两种例子:

1.MyClass<Integer> myObject = new MyClass<>("");

 在这里例子中,编译器推断Integer为泛型类MyClass<X>正式参数化类型X的类型,推断String为该泛型类构造器的正式参数化类型T

 的实际类型。

2.MyClass<Integer> myObject = new <String> MyClass<>("");

 在这里例子中,编译器推断Integer为泛型类MyClass<X>真是参数化类型X的类型,同时这条语句显式的指定了构造器的正式参数化类型T

 的实际类型。

 

5. Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods

不知道怎么翻译。 “当在可变长参数方法中使用不可具体化的参数时改良的警告和错误”,行么?

6.带有资源的try语句  

The try-with-resources Statement  

一个带有资源的try语句就是一个声明了一个或者多个资源的try语句,资源是指当程序结束后必须关闭的对象。带有资源的try语句

保证在语句结束的时候每个资源都会被关闭(调用其close()方法)。任何实现了java.lang.AutoCloseable 或者 java.io.Closeable接口的对象都可以被

用作为一个资源。

 

下面这个例子的作用是从一个文件中读取第一行。使用了一个BufferedReader从文件中读取数据,在这里BufferedReader就是一个在程序结束

后必须关闭的资源。

static String readFirstLineFromFile(String path) throws IOException {
	  try (BufferedReader br = new BufferedReader(new FileReader(path))) {
	    return br.readLine();
	  }
	}
 

 

上面说到可以在try语句中声明一个或多个资源,下面就是一个声明了多个资源的try语句,它的功能是获得打包在zip文件中的所有

文件的文件名,然后把这些文件名保存到一个txt文件中。

 

public static void writeToFileZipFileContents(String zipFileName, String outputFileName)
	    throws java.io.IOException {

	    java.nio.charset.Charset charset = java.nio.charset.Charset.forName("US-ASCII");
	    java.nio.file.Path outputFilePath = java.nio.file.Paths.get(outputFileName);

	    // Open zip file and create output file with try-with-resources statement

	    try (
	      java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);
	      java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
	    ) {

	      // Enumerate each entry

	      for (java.util.Enumeration entries = zf.entries(); entries.hasMoreElements();) {

		// Get the entry name and write it to the output file

		String newLine = System.getProperty("line.separator");
		String zipEntryName = ((java.util.zip.ZipEntry)entries.nextElement()).getName() + newLine;
		writer.write(zipEntryName, 0, zipEntryName.length());
	      }
	    }
	  }
 

 

 大家需要知道的是,一个带有资源的try语句和普通的try语句一样可以有catch和finally语句块,但是任何catch或者

 finally块都是在所有的资源关闭后才执行的。

7.捕捉复合(Multiple)异常类型以及使用改良的类型检查重掷(Rethrowing)异常

在Java6以及以前版本一般我们这样捕获多个类型的异常:

catch (IOException ex) {
	     logger.log(ex);
	     throw ex;
	catch (SQLException ex) {
	     logger.log(ex);
	     throw ex;
	}
 

 

在Java7里可以这么干:

catch (IOException|SQLException ex) {
	    logger.log(ex);
	    throw ex;
	}
 

 

下面看一个抛出异常的例子:

JDK6及以前版本:

 

 static class FirstException extends Exception { }
	  static class SecondException extends Exception { }

	  public void rethrowException(String exceptionName) throws Exception {
	    try {
	      if (exceptionName.equals("First")) {
		throw new FirstException();
	      } else {
		throw new SecondException();
	      }
	    } catch (Exception e) {
	      throw e;
	    }
	  }
 

 

 JDK7:

  public void rethrowException(String exceptionName)
	  throws FirstException, SecondException {
	    try {
	      // ...
	    }
	    catch (Exception e) {
	      throw e;
	    }
	  }
 

 

分享到:
评论

相关推荐

    Java语言程序设计教程(Java 7) 入门与提高篇PPT

    Java 7,也称为Java SE 7 (Java Standard Edition 7),是Oracle公司于2011年发布的一个重要更新,带来了许多新特性和改进,对Java编程语言的发展具有里程碑式的意义。 在本教程中,你将深入学习Java的基础概念和...

    Java7新特性中文介绍

    ### Java 7新特性中文介绍 #### 一、概述 随着Java 7的发布,业界迎来了一次重大的技术革新。作为一款原本就极其强大的编程语言,Java在Oracle的重组之后,不仅保持了其原有的优势,还增添了许多令人期待的新特性...

    java7 32位版

    Java 7,又称为Java SE 7 (Java Standard Edition 7),是Java的重要里程碑,它在2011年发布,带来了许多新特性和性能优化。以下是一些关键的Java 7特性: 1. **多语言支持**:Java 7引入了新的`try-with-resources`...

    Java7 最新原版API

    Java 7,也被称为JDK 7(Java Development Kit 7),是Java编程语言的一个重要版本,由Oracle公司发布。这个版本带来了许多重要的更新和改进,旨在提高开发者的生产力和程序的性能。"Java7 最新原版API"指的是Java 7...

    java8新特性

    Java 8,作为Java语言的一个重要更新版本,自2014年发布以来,引入了大量新特性,使得Java更加现代化、简洁和功能强大。本文将全面介绍Java 8的几项核心新特性,包括Lambda表达式、函数式接口、方法引用与构造器引用...

    Java程序设计语言-第4版.pdf

    综上所述,Java的学习和应用是一个全面而深入的过程,需要系统地掌握其语言特性、核心API和相关技术。加入学习群可以帮助学习者快速解决遇到的问题,并与同道中人共同进步。而《Java程序设计语言-第4版》等书籍,则...

    超实用的Java新特性 - 2020最新版.zip

    Java作为世界上最受欢迎的编程语言之一,其每个新版本都会带来一系列增强和改进,以提高开发者的效率和程序的性能。2020年的Java 11、12、13和14版本也不例外,这些更新引入了多个引人注目的新特性。下面,我们将...

    java 7 规范

    规范详细列出了Java SE 7的主要特性,其中一项重大更新就是支持动态语言特性(JSR 292),它为Java平台带来动态类型语言支持。通过Project Coin(JSR 334),Java 7还对语言进行了小规模的改进,例如改进了switch...

    Java7源代码

    Java 7,全称为Java Platform, Standard Edition 7 (Java SE 7),是Java编程语言的一个重要版本,由Oracle公司发布于2011年。这个版本带来了许多新特性、改进和优化,对开发者的工作效率和程序性能都有显著提升。在...

    JAVA语言中文教程

    《JAVA语言中文教程》是一份详尽的编程学习资料,主要介绍了JAVA语言的基础知识与面向对象的编程概念,适合初学者以及有一定编程基础的学习者深入理解JAVA语言的特性和编程技巧。 ### 第一章:JAVA概述 #### JAVA...

    Java7开发文档

    Java 7,全称为Java SE 7 (Java Platform, Standard Edition 7),是Java编程语言的一个重要版本,由Oracle公司发布于2011年。这个版本带来了许多新特性和改进,旨在提升开发者效率和程序性能。以下是Java 7开发文档...

    java8-15新特性

    Java 新特性的pdf文档。Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以 来最具革命性的版本。...工具与JVM带来了大量新特性

    Java SE 6 新特性

    Java SE 6,也被称为Java Development Kit (JDK) 6,是Java平台的一个重要版本,带来了许多新特性和改进,极大地提升了开发人员的工作效率和应用程序的性能。在这个版本中,Oracle公司(当时还是Sun Microsystems)...

    JAVA语言程序设计JAVA语言程序设计曹大有编

    Java语言的特点和优势使其在多个领域中扮演着重要角色,包括但不限于Web应用、Android移动应用、大数据处理、云计算、物联网(IoT)等。学习Java语言程序设计,意味着你需要掌握基本语法、面向对象编程概念、异常处理...

    java 编程语言

    Java 的起源可以追溯到1991年,当时 **James Gosling** 开始了一个名为“Oak”的项目,目的是为机顶盒设计一种新的编程语言和虚拟机。这个名字来源于Sun Microsystems办公室外的一棵橡树(Oak Tree)。随着项目的...

    java7源代码

    Java 7源代码是Java编程语言的一个重要版本,它的发布为开发者带来了许多新的特性和改进。这个源代码包含了Java开发工具包(JDK)的核心组件,涵盖了从基础库到高级功能的各种模块。以下是对这些核心组件的详细解读...

    深入理解Java7.pdf

    总之,Java 7作为Java发展的一个重要里程碑,它的新特性大大增强了语言的功能和易用性。通过深入学习和实践,开发者可以充分利用这些新特性,提高开发效率,写出更加高效和健壮的代码。《深入理解Java 7》这本书无疑...

Global site tag (gtag.js) - Google Analytics