`
uuhorse
  • 浏览: 64080 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Java7语法新特性

阅读更多
Java7语法新特性:


1. switch中增加对String类型的支持。

     public String generate(String name, String gender) {
        String title = "";
        switch (gender) {
            case "男":
                title = name + " 先生";
                break;
            case "女":
                title = name + " 女士";
                break;
            default:
                title = name;
        }
        return title;
    }


编译器在编译时先做处理:
①case只有一种情况,直接转成if;
②如果只有一个case和default,则直接转换为if...else...;
③有多个case,先将String转换为hashCode,然后对应的进行处理,JavaCode在底层兼容Java7以前版本。

2. 数字字面量的改进
①增加二进制表示
Java7前支持十进制(123)、八进制(0123)、十六进制(0X12AB)
Java7增加二进制表示(0B11110001、0b11110001)
②数字中可添加分隔符
Java7中支持在数字量中间增加'_'作为分隔符,更直观,如(12_123_456),下划线只能在数字中间,编译时编译器自动删除数字中的下划线。

3. 异常处理
①Throwable类增加addSuppressed方法和getSuppressed方法,支持原始异常中加入被抑制的异常。
异常抑制:在try和finally中同时抛出异常时,finally中抛出的异常会在异常栈中向上传递,而try中产生的原始异常会消失。
在Java7之前的版本,可以将原始异常保存,在finally中产生异常时抛出原始异常:
    public void read(String filename) throws BaseException {
        FileInputStream input = null;
        IOException readException = null;
        try {
            input = new FileInputStream(filename);
        } catch (IOException ex) {
            readException = ex;   //保存原始异常
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException ex) {
                    if (readException == null) {
                        readException = ex;
                    }
                }
            }
            if (readException != null) {
                throw new BaseException(readException);
            }
        }
    }

在Java7中的版本,可以使用addSuppressed方法记录被抑制的异常:
    public void read(String filename) throws IOException {
        FileInputStream input = null;
        IOException readException = null;
        try {
            input = new FileInputStream(filename);
        } catch (IOException ex) {
            readException = ex;
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException ex) {
                    if (readException != null) {    //此处的区别
                        readException.addSuppressed(ex);
                    }
                    else {
                        readException = ex;
                    }
                }
            }
            if (readException != null) {
                throw readException;
            }
        }
    }

②catch子句可以同时捕获多个异常
    public void testSequence() {
        try {
            Integer.parseInt("Hello");
        }
        catch (NumberFormatException | RuntimeException e) {  //使用'|'分割,多个类型,一个对象e
           
        }
    }

③try-with-resources语句
Java7之前需要在finally中关闭socket、文件、数据库连接等资源;
Java7中在try语句中申请资源,实现资源的自动释放(资源类必须实现java.lang.AutoCloseable接口,一般的文件、数据库连接等均已实现该接口,close方法将被自动调用)。

    public void read(String filename) throws IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
            StringBuilder builder = new StringBuilder();
			String line = null;
			while((line=reader.readLine())!=null){
				builder.append(line);
				builder.append(String.format("%n"));
			}
			return builder.toString();
        } 
    }


try子句中可以管理多个资源:
    public void copyFile(String fromPath, String toPath) throws IOException {
        try ( InputStream input = new FileInputStream(fromPath);
				OutputStream output = new FileOutputStream(toPath) ) {
            byte[] buffer = new byte[8192];
			int len = -1;
			while( (len=input.read(buffer))!=-1 ) {
				output.write(buffer, 0, len);
			}
        } 
    }


4. 变长参数方法的优化
Java7之前版本中的变长参数方法:
    public int sum(int... args) {
        int result = 0;
        for (int value : args) {
            result += value;
        }
        return result;
    }

当参数为不可具体化的类型时,如List,编译器将产生警告,需要使用@SuppressWarnings("unchecked")注解声明;Java7中使用@SafeVarargs注解抑制编译器警告。
    @SafeVarargs
    public static <T> T useVarargs(T... args) {
        return args.length > 0 ? args[0] : null;
    }

VarargsWarning.useVarargs(new ArrayList<String>());


摘自《深入理解Java7:核心技术与最佳实践》第一章。
更多代码见http://www.hzbook.com
分享到:
评论

相关推荐

    Beatles9527#StudyNotes#_21Java8语法新特性1

    参考《Java注解》第三章内容四. 接口默认方法——Java也会出现多继承问题Java8新特性default关键字,引出Java多继承问题五. Java8新特性

    尚硅谷Java视频Java8新特性视频教程

    尚硅谷_Java8新特性_Lambda 基础语法 ·04. 尚硅谷_Java8新特性_Lambda 练习 ·05. 尚硅谷_Java8新特性_四大内置核心函数式接口 ·06. 尚硅谷_Java8新特性_方法引用与构造器引用 ·07. 尚硅谷_Java8新特性_创建 ...

    Java8语法总结

    学习java8新特性,尤其是lambda和流式编程,学习过程中总结的笔记

    Java9新特性

    本套《Java9新特性》视频涵盖oracle公司2017年9月公布的java 9 新特性的核心内容。 主要包含:模块化系统,REPL工具:jshell命令,多版本兼容jar包,语法的新变化:接口私有方法、异常处理、钻石操作符、String存储...

    尚硅谷Java9新特性视频

    本套《Java9新特性》视频涵盖oracle公司2017年9月公布的java 9 新特性的核心内容。 主要包含:模块化系统,REPL工具:jshell命令,多版本兼容jar包,语法的新变化:接口私有方法、异常处理、钻石操作符、String存储...

    新手学Java7编程(第5版)

    之后,《新手学java7编程(第5版)》介绍了java的一些高级特性,包括多线程程序设计和泛型。最后以对swing的介绍结束了全书。本教程节奏轻快,可以帮助读者快速掌握java程序设计。  《新手学java 7编程(第5版)》特色 ...

    JDK7新特性(完整篇)

    1.2 JDK7新特性&lt;二&gt; 语法 . . . . . . . . . . . . . 1.3 JDK7新特性&lt;三&gt; JDBC4.1 . . . . . . . . . . 1.4 JDK7新特性&lt;四&gt; NIO2.0 文件系统 . . . 1.5 JDK7新特性&lt;五&gt; fork/join 框架 . . . . . 1.6 JDK7新特性...

    JAVA简介、JAVA主要特性、JAVA基础语法

    JAVA

    bcompare反编译java8新特性文件插件

    现有becompare3/4对于java8 新特性lamda表达式文件无法反编译进行数据比对,此插件可解决此问题。

    尚硅谷Java11新特性教程.txt

    尚硅谷Java11新特性教程(包含笔记、代码、视频)。新的局部变量的语法、更方便的调试运行程序的方式jshell及直接运行源代码、令人瞩目的ZGC, JFR、全新HttpClient API、兼容Unicode10的新的字符串API等。

    java1.5新特性

    java1.5之后的新特性: 1,枚举(enum) 作用:一般用于代表一组相同类型的常用常量。 原理:语法结构与java类的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译之后实际上是...

    《Java 核心技术 卷I 》第12版,涵盖Java17新特性(英文版)

    新版延续之前版本的优良传统,用数百个实际的工程案例,全面系统地讲解了Java语言的核心概念、语法、 重要特性、 开发方法。 着力让读者在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,具体...

    Java核心技术 第12版 开发基础+高级特性 英文原版

    新版延续之前版本的优良传统,用数百个实际的工程案例,全面系统地讲解了Java语言的核心概念、语法、 重要特性、 开发方法。 着力让读者在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,具体...

    Java基础语法面试题.docx

    Java基础语法面试题资源通常是指帮助准备Java编程面试的问题集合,涵盖了Java编程语言的基础概念、语法、特性和常见问题。这些资源可以帮助面试者巩固和扩展他们的Java知识,准备应对面试过程中的技术问题。 这些...

    本课程是Java从入门到精通的系列课程,涵盖了Java的基础语法、面向对象思想、集合等高级特性、Java8新特性,内容丰富多样

    本课程是Java从入门到精通的系列课程,涵盖了Java的基础语法、面向对象思想、集合等高级特性、Java8新特性、多线程、JVM与性能调优方法等知识点,内容丰富多样。整个过程中,不仅仅有知识的传递,更注重思想的理解和...

    深入理解java7

    《深入理解Java 7:核心技术与最佳实践》的主要内容可分为三大部分:第一部分是1-6章,全面阐释Java 7在语法、JVM、类库和API等方面的所有重要新功能和新特性,掌握这部分内容有助于大幅度提升编码效率和提高代码质量...

    java ee练习代码,基础语法+高级特性 Java学习资料

    java ee练习代码,基础语法+高级特性 Java学习资料

    利用Idea重构功能及Java8语法特性优化深层嵌套代码

    当遇到深层嵌套代码,如for,if,lambda表达式或内部类及这些代码的组合,这时我们可以通过Java8的语法特性来进行优化。下面的代码是一个嵌套循环的示例。嵌套的for/if语句通畅可以通过Java8中的stream来替代。 上述...

    Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 第02章_Java基本语法2(共48页).pptx

    Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 ...第7章 Java集合 第8章 泛型 第9章 注解&枚举 第10章 IO 第11章 多线程 第12章 Java常用类 第13章 Java反射 第14章 网络编程

    Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 第02章_Java基本语法1(共99页).pptx

    Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 ...第7章 Java集合 第8章 泛型 第9章 注解&枚举 第10章 IO 第11章 多线程 第12章 Java常用类 第13章 Java反射 第14章 网络编程

Global site tag (gtag.js) - Google Analytics