`
287854442
  • 浏览: 47190 次
  • 性别: 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;
	    }
	  }
 

 

分享到:
评论

相关推荐

    java8-15新特性

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

    Java JDK 5.0 经典入门

    阐述了Java语言的各个方面,包括Java语言结构和工作原理的基本知识,用大量的实例讲述如何开发功能齐全的Java应用程序,以期帮助读者掌握Java语言的最新特性和Java类库中主要的功能包,积累Java应用环境的使用经验,...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    3.5 java虚拟机中内置的安全特性 3.6 安全管理器和java api 3.7 代码签名和认证 3.8 一个代码签名示例 3.9 策略 3.10 保护域 3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 3.11.3...

    java8_64bit.zip

    java8,64位是非常厉害的java编写开发工具。java8,64位主要是为64位java用户设计的,为...带来一种新语言能将参数代码变为数据。 增加和修改了Java特性优化默认方法。 se平台新增预定义集,使应用无需部署在平台上。

    JAVA上百实例源码以及开源项目

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    JAVA上百实例源码以及开源项目源代码

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    数据结构Java语言描述课程实验设计(全文).docx

    数据结构Java语言描述课程实验设计(全文)全文共7页,当前为第1页。数据结构Java语言描述课程实验设计(全文)全文共7页,当前为第1页。数据结构Jv语言描述课程实验设计 数据结构Java语言描述课程实验设计(全文)全文共7...

    C++和java作为编程语言的区别解析,用C++开发益智游戏代码的过程说明.docx

    C++和Java是两种非常流行的编程语言,它们之间有很多区别。在本文中,我们将讨论C++和Java之间的主要区别,并举例说明它们在开发代码方面的不同之处。 首先,C++是一种编译语言,而Java是一种解释语言。这意味着C++...

    java课程设计-酒店管理系统.doc

    一、设计题目2 二、设计目的2 三、设计分析2 3.1可行性分析2 3.1.1技术上...7 4.5数据库结构设计7 4.5.1系统数据库性能需求7 4.5.2本系统数据库表设计中所遵守的基本原则7 4.5.3数据库需求分析8 4.5.4数据字典设计与...

    天下陶网络商城Java源码,电商平台源代码 Java语言 先进技术 功能齐全 稳定、高效

    天下陶网络商城Java源码是一款专业的电商平台源代码,基于Java语言开发,拥有良好的可扩展性和可靠性。它采用了先进的技术和架构,包括Spring Boot、MyBatis、Docker等,可以满足企业级应用的高性能、高并发、高可用...

    java基础入门教程

    今 年 6月 7日 ,由 SUN公 司 和 台 湾 经 济 事 务 部 信 息 发 展 局, 台湾信 息 技 术 研究 所 等 单 位 牵 头 ,成 立 了 一 个 "Java联 盟 ", 参 加 的 有 22个 在 台 湾相 当 著 名 的 计 算 机公 司 ,并 在 台 ...

    Mac版本Java8下载jdk-8u371-macosx-x64.dmg.zip

    它引入了众多新特性,包括 Lambda 表达式、函数接口、流处理等,为 Java 编程带来了极大的便利和提升。 其中最显著的特性是 Lambda 表达式,它提供了一种简洁、灵活的编程方式,使得 Java 编程可以更加函数式化。...

    jdk1.8Java 8发行版

    毫无疑问,Java 8发行版是自Java 5(发行于2004,已经...Java 8 为Java语言、编译器、类库、开发工具与JVM(Java虚拟机)带来了大量新特性。在这篇教程中,我们将一一探索这些变化,并用真实的例子说明它们适用的场景。

    Java本地调用JNI使用规范详解.doc

    但这样做通常会导致丧失平台可移植性,通常是在特定的需求下进行,例如使用旧的其他语言的库、需要获得Java类库不支持的某种基于具体平台的特性、大量数学计算性能优化等。希望本文档会给有需要的朋友带来帮助;

    java 8 特性

    毫无疑问,Java 8是自Java 5(2004年)发布以来Java语言最大的一次版本升级,Java 8带来了很多的新特性,比如编译器、类库、开发工具和JVM(Java虚拟机)。在这篇教程中我们将会学习这些新特性,并通过真实例子演示...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    对Java语言的每个语法都提供了一个或多个例程讲解 大量使用流程图表示程序的执行过程,使用结构图表示程序的内部状态 每章最后都给出了典型的练习题,让读者及时练习,巩固提高,并提供了参考答案 目录 第1篇 ...

    java并发编程实战 pdf

    每一种语言的程序设计思想大同小异,只是一些由语言特性的而带来的细微差别,比如Java中的Interface,你几乎在以前的学习中没有碰到过。以下我仔细给你说几点:  1。我们必须明确一个大方向,也就是说现在面向对象...

    javaPDF精讲.pdf

    每一种语言的程序设计思想大同小异,只是一些由语言特性的而带来的细微差别,比如Java中的Interface,你几乎在以前的学习中没有碰到过。以下我仔细给你说几点:  1。我们必须明确一个大方向,也就是说现在面向对象...

    Java核心技术 卷Ⅰ:基础知识 【中文】(第八版)

    对于C或 C++程序员来说,学习这一章的内容将会感觉一帆风顺,因为这些语言特性的语法本质上与C 语言相同。对于没有C语言程序设计背景,但使用过其他程序设计语言(Visual Basic)的程序 员,仔细地阅读这一章是非常...

Global site tag (gtag.js) - Google Analytics