JDK1.7 新特性

JDK 1.7新特性与应用实战:Java SE 7深度解析 Java Development Kit 1.7,简称 JDK 1.7,是Java平台的一次重大更新,于2011年7月28日正式发布。它的推出旨在提供更强大的语言和API特性,提升开发者的编码效率,同时增强性能和安全性。JDK 1.7的开发目标是让Java开发更简洁、更安全,且对多核处理器的支持更佳。JDK 1.7为性能调优提供了多种工具,这些工具可以帮助开发者分析和诊断性能问题。 阅读详情

1、switch支持String做参数

/***
 * switch支持字符串做参数 jdk7
 * @author huangjiawei
 */
public class SwitchTest {
 public static void switchTest(String arg) {
     switch (arg) {
      case "Lisa":
      System.err.println("我是Lisa!");
      break;
      case "Mike":
      System.err.println("我是Mike!");
      break;
      default:
      System.err.println("我是你的唯一!");
      break;
     }
 }
 public static void main(String[] args) {
     switchTest("Lisa");//我是Lisa!
     switchTest("Mike");//我是Mike!
     switchTest("");//我是你的唯一!
 }
}

 

2、数字字面量的改进

2.1. Java7 前支持 十进制(1234)、八进制(01234)、十六进制(0x1234)  

     Java 8支持二进制(0B11110001)

2.2. 可以使用下划线隔开_

public class BinaryTest {
     private static int a = 16;//十进制
     private static int b = 020;//八进制
     private static int c = 0x10;//十六进制
     private static int d = 0b0001_0000;//二进制,使用分隔符隔开
     public static void main(String[] args) {
         System.err.println(a);//16
         System.err.println(b);//16
         System.err.println(c);//16
         System.err.println(d);//16
     }
}

3、资源自动关闭

在Java中,有许多的资源在使用完成之后需要对其进行关闭操作。举个例子,InputStream,Writer,Sockets,Connection等等。在Java 7 之前通常都是显示调用其close()方法,在Java 7,你可以不用理会其是否未关闭,我们可以使用try-with-resources代码块。

import java.io.BufferedReader;
import java.io.FileReader;

public class TryTest {

    /*
     * 接受一个文件的路径 Java 7之前
     */
    public static String tryTest(String path) {

        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(path));
            return br.readLine();
        } catch (Exception e) {
            System.err.println("BufferedReader Exception" + e);
        } finally {
            if (br != null) {
                try {
                    br.close();
                    br.ready();// 流已经关闭,此处抛出异常
                } catch (Exception e) {
                    System.err.println("BufferedReader close Exception" + e);
                }
            }
        }
        return "";
    }

    /*
     * 接受一个文件的路径 Java7
     */
    public static String tryTest1(String path) {
        /*
         * 当try语句块运行结束时,FileInputStream 会被自动关闭。这是因为FileInputStream 实现了java中的java.lang.AutoCloseable接口。 所有实现了这个接口的类都可以在try-with-resources结构中使用。
         */
        try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            return br.readLine();
        } catch (Exception e) {
            System.err.println("BufferedReader Exception" + e);
        }
        return "";
    }

    public static void main(String[] args) {
        tryTest("C:\\Users\\huangjiawei\\Desktop\\my-release-key.keystore");
        tryTest1("C:\\Users\\huangjiawei\\Desktop\\my-release-key.keystore");
    }
}

 

4、catch多个异常

Java7之前,捕获多个异常必须有多个catch子句,在Java 7,我们可以这样子写:

import java.util.Date;

/**
 * 多个catch语句永远只执行第一个匹配到的catch异常,后面有再多的catch都会被忽略掉
 */
public class CatchTest {
    /*
     * java 7以前
     */
    public static void CatchTest() {
        int a = 100;
        int b = 0;
        Date date = null;
        try {
            System.err.println(date.getTime());// 这里抛出异常,下面的语句就不会执行啦!
            int result = a / b;// 不会执行
            System.err.println(result);// 不会执行
        } catch (NullPointerException e) {
            System.err.println(e);// java.lang.NullPointerException
        } catch (ArithmeticException e) {
            System.err.println(e);
        } catch (Exception e) {
            System.err.println(e);
        }
    }

    /*
     * java 7
     */
    public static void CatchTest1() {
        int a = 100;
        int b = 0;
        Date date = null;
        try {
            int result = a / b;
            System.err.println(result);
            System.err.println(date.getTime());
        } catch (ArithmeticException | NullPointerException e) {
            System.err.println(e);// java.lang.ArithmeticException: / by zero
        }
    }

    public static void main(String[] args) {
        CatchTest();
        CatchTest1();
    }
}

5、实例创建类型推断

import java.util.ArrayList;
import java.util.List;

public class TypeTest {

    /*
     * java 7前,前后<>都必须声明类型
     */
    List<String> list = new ArrayList<String>();

    /*
     * java 7,后<>不须声明类型,自动根据前面<>推断其类型
     */
    List<String> list1 = new ArrayList<>();
}

6、增强的文件系统

Java7 推出了全新的NIO2.0 API以此改变针对文件管理的不便,使得在java.nio.file包下使用Path、Paths、Files、WatchService、FileSystem等常用类型可以很好的简化开发人员对文件管理的编码工作。

6.1 Path接口和Paths类

Path接口的某些功能其实可以和java.io包下的File类等价,当然这些功能仅限于只读操作。在实际开发过程中,开发人员可以联用Path接口和Paths类,从而获取文件的一系列上下文信息。

  • int getNameCount(): 获取当前文件节点数
  • Path getFileName(): 获取当前文件名称
  • Path getRoot(): 获取当前文件根目录
  • Path getParent(): 获取当前文件上级关联目录

联用Path接口和Paths类型获取文件信息:

import java.nio.file.Path;
import java.nio.file.Paths;

public class PathPathsTest {
    public static void main(String[] args) {
        Path path = Paths.get("C:\\\\Users\\\\huangjiawei\\\\Desktop\\\\my-release-key.keystore");
        System.out.println("文件节点数:" + path.getNameCount()); // 文件节点数:4
        System.out.println("文件名称:" + path.getFileName()); // 文件名称:my-release-key.keystore
        System.out.println("文件根目录:" + path.getRoot()); // 文件根目录:C:\
        System.out.println("文件上级关联目录:" + path.getParent());// 文件上级关联目录:C:\Users\huangjiawei\Desktop
    }
}

6.2. Files类

联用Path接口和Paths类可以很方便的访问到目标文件的上下文信息。当然这些操作全都是只读的,如果开发人员想对文件进行其它非只读操作,比如文件的创建、修改、删除等操作,则可以使用Files类型进行操作。
Files类型常用方法如下:

  • Path createFile(): 在指定的目标目录创建新文件
  • void delete(): 删除指定目标路径的文件或文件夹
  • Path copy(): 将指定目标路径的文件拷贝到另一个文件中
  • Path move(): 将指定目标路径的文件转移到其他路径下,并删除源文件

使用Files类型复制、粘贴文件示例:

Files.copy(Paths.get("/test/src.xml"), Paths.get("/test/target.xml"));

使用Files类型来管理文件,相对于传统的I/O方式来说更加方便和简单。因为具体的操作实现将全部移交给NIO2.0 API,开发人员则无需关注。

6.3. WatchService

Java7 还为开发人员提供了一套全新的文件系统功能,那就是文件监测。在此或许有很多朋友并不知晓文件监测有何意义及目,那么请大家回想下调试成热发布功能后的Web容器。当项目迭代后并重新部署时,开发人员无需对其进行手动重启,因为Web容器一旦监测到文件发生改变后,便会自动去适应这些“变化”并重新进行内部装载。Web容器的热发布功能同样也是基于文件监测功能,所以不得不承认,文件监测功能的出现对于Java文件系统来说是具有重大意义的。
文件监测是基于事件驱动的,事件触发是作为监测的先决条件。开发人员可以使用java.nio.file包下的StandardWatchEventKinds类型提供的3种字面常量来定义监测事件类型,值得注意的是监测事件需要和WatchService实例一起进行注册。

StandardWatchEventKinds类型提供的监测事件:

  • ENTRY_CREATE:文件或文件夹新建事件;
  • ENTRY_DELETE:文件或文件夹删除事件;
  • ENTRY_MODIFY:文件或文件夹粘贴事件;

使用WatchService类实现文件监控完整示例:

import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

/**
 * 文件监控系统
 */
public class WatchViewTest {
    public static void testWatch() {
        /* 监控目标路径 */
        Path path = Paths.get("C:\\Users\\huangjiawei\\Desktop");
        try {
            /* 创建文件监控对象. */
            WatchService watchService = FileSystems.getDefault().newWatchService();
            /* 注册文件监控的所有事件类型. */
            path.register(
                    watchService,
                    StandardWatchEventKinds.ENTRY_CREATE,
                    StandardWatchEventKinds.ENTRY_DELETE,
                    StandardWatchEventKinds.ENTRY_MODIFY);
            /* 循环监测文件. */
            while (true) {
                WatchKey watchKey = watchService.take();
                /* 迭代触发事件的所有文件 */
                for (WatchEvent<?> event : watchKey.pollEvents()) {
                    System.out.println(event.context().toString() + " 事件类型:" + event.kind());
                }
                if (!watchKey.reset()) {
                    return;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        testWatch();
    }
}

 

通过上述程序示例我们可以看出,使用WatchService接口进行文件监控非常简单和方便。首先我们需要定义好目标监控路径,然后调用FileSystems类型的newWatchService()方法创建WatchService对象。接下来我们还需使用Path接口的register()方法注册WatchService实例及监控事件。当这些基础作业层全部准备好后,我们再编写外围实时监测循环。最后迭代WatchKey来获取所有触发监控事件的文件即可。

现在我终于知道,spring boot中那个所谓的dev-tools热更新的基本原理啦!原来JDK都有提供这样的API。

来自:https://www.jb51.net/article/136093.htm

 

JDK1.7,JDK的种类:最主流的JDK是Sun公司发布的JDK JDK的核心是Java SE API。Java SE API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。Java SE API包括一些重要的语言结构以及基本图形,网络和文件I/O。我们在自己的程序中,调用前辈们写好的这些Class,来作为我们自己开发的一个基础。当然,现在已经有越来越多的性能更好或者功能更强大的第三方类库供我们使用。一般来说,Java API的非I/O部分对于运行Java的所有平台是相同的,而I/O部分则仅在通用Java环境中实现。 JDK的种类:最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。 立即下载

相关推荐

JDK7发布版

官方64位的第一版JDK7,编译后理论上可运行在JAVA7以上的环境中,可编译出,通用jar包,值得收藏,欢迎下载!

JDK版本发布历史

JDK版本发布历史

窗外有风景,笔下有前途,低头是题海,抬头是未来 2959

基于LORA的双机通信的智能农业系统

通过LoRa模块与主机进行通信,监测环境中的温度、湿度、土壤湿度和光照强度等参数,并根据预设的自动控制逻辑或者手动指令控制继电器开关,从而调节风扇、加热器、水泵、喷雾器和灯光等设备,为植物提供适宜的生长环境。使用的Lora是大夏龙雀的感觉这个是我使用过的Lora里面最好用的,因为不用设置频道就可以直接透明传输,使用起来得心应手。就像两个单片机直接串口通信一样,缺点是异步串行,不能同时进行接收和发送。继电器灯亮模拟打开对应的风扇、水泵、灯、喷雾、加热。1.使用温度传感器测当前环境的温湿度。

ssjsjss的博客 1739

JDK 1.7 新特性

总结JDK1.7中的新特性

fanxiaobin 2069

OpenBCI脑电数据处理实战:用MNE库从Raw对象到可视化分析全流程

本文提供了使用MNE-Python库处理OpenBCI脑电数据的完整实战指南。从通过BrainFlow库获取原始数据流、创建核心的Raw对象,到进行工频滤波、带通滤波等关键预处理步骤,最后实现时域信号、功率谱密度及地形图等多种专业可视化分析,手把手教你完成脑机接口数据处理的全流程。

gin88的博客 367

【毕业设计参考】基于yolov8+pyqt5自适应界面设计的锂电池表面缺陷检测系统

基于YOLOv8+PyQt5的锂电池表面缺陷检测系统结合了先进的目标检测技术与友好的用户界面设计,为锂电池质量检测提供了一种高效、准确的解决方案。未来,随着深度学习技术的不断发展,我们可以进一步优化模型,提高检测精度和速度,同时拓展系统功能,如实现实时视频流检测、与生产系统的深度集成等,为锂电池产业的发展注入新的活力。希望本文对大家在相关领域的研究和实践有所帮助,欢迎大家在评论区交流讨论。

1182

JDK1.7、JDK1.8 新特性(全)

https://blog.csdn.net/qq_29411737/article/details/80835658 jdk1.8新特性知识点: 1 jdk1.8对hashMap等map集合的优化 2 Lambda表达式 3 函数式接口 4 方法引用和构造器调用 5 Stream API 6 并行流和串行流 7 Optional容器 Java 8引入Optional类来防止空指针异常,Option...

try to do 7597

AI量化投资开源平台——Qlib(微矿)的学习使用笔记(随缘更新)

Qlib 涵盖了量化投资的全过程,为用户的 AI 算法提供了高性能的底层基础架构,从框架设计上让用户可以更容易地应用 AI 算法来辅助解决量化投资的各个关键问题(例如 Alpha 预测,风险预测,市场动态性建模)。本文旨在记录一些面向初学者的基础内容。

in_void的博客 3133

JDK1.7和JDK1.8版本的新特性

一.JDK1.7版本的新特性1.二进制字面量2.数字字面量可以出现下划线3.switch 语句可以用字符串 二.JDK1.8版本的新特性1.新特性一:新增的日期时间相关类 2.特性二:Lambda表达式,Lambda表达式的书写语法​,匿名内部类的Lambda表达式简化规则​,Lambda表达式可作为参数传递​,Lambda表达式的另一种写法, 方法引用​,构造器引用​3 .特性三:Stream流,Stream 的操作三个步骤,创建Stream的方式 ,Stream 的中间操作, Stream 的终止操作

naoguoteng的博客 3242

HarmonyOS ArkTS开发实战:用Axios封装一个通用的网络请求工具类(附完整代码)

本文详细介绍了如何在HarmonyOS ArkTS开发中利用Axios封装一个通用的网络请求工具类,涵盖架构设计、核心模块实现、UI状态联动及高级功能扩展。通过单例控制器、拦截器链配置和Token自动刷新机制,提升网络请求的稳定性和可维护性,适用于各类HarmonyOS应用开发场景。

weixin_30772105的博客 490

Python内置函数zip()——《Python内置函数手册》Python老吕编著

zip()函数是 Python 中的一个内置函数,用于将多个可迭代对象(如列表、元组、字符串等)中对应的元素打包成一个个元组,然后返回由这些元组组成的迭代器。zip()函数常用于将多个序列并行迭代,或者用于数据对齐。zip()它返回一个迭代器,这意味着你可以逐个获取打包后的元素,而不是一次性将所有元素加载到内存中。如果输入的可迭代对象长度不一致,zip()会以最短的可迭代对象为准,只打包到最短对象的末尾。它可以用来并行迭代多个序列,使得代码更加简洁和高效。在接下来的章节中,我们将详细介绍。

Python老吕的博客 680

Java JDK 1.7 和 JDK 1.8 新特性

引言   本文主要介绍 Java JDK 中 1.7 和 1.8 的新特性。 JDK 1.7 新特性   1. switch可以接受String类型; public class Switch { public void test(String str) { switch (str) { case "computer": System.out.println("c...

weixin_30628077的博客 153

【光子 AI】AI Agent 知识体系深度研究报告

从理论基础到前沿应用:全面解析人工智能代理的核心架构、关键技术与发展趋势📅 2026 年 3 月 | 📊 深度研究报告 | 🔬 人工智能领域 | 📈 前沿技术分析**AI Agent(人工智能代理)**是一种能够感知环境、基于所获得的信息做出决策,并执行行动以影响该环境的软件系统。AI Agent 的设计旨在模仿或实现智能行为,它们可以在各种环境中操作,包括物理世界和虚拟空间。随着大语言模型(LLM)技术的突破性进展,AI Agent 正从实验室研究快速走向产业应用。根据 Gartner 发布的《2

AI天才研究院 176

jdk1.7新特性详解

开发期间略知jdk1.7的一些特性,没有真正的一个一个得展开研究,而是需要说明再去查,导致最整个新特性不是特别的清楚,这种情况以后得需要改变了,否则就会变成代码的奴隶。现在正好有时间可以细细的研究研究了。文章主要参照。

weixin_JimZemlin的博客 678

手把手教你完成YOLOv11分类识别界面搭建,使用Qt6设计YOLOv11分类识别系统,前台系统+后台管理系统开发实战,全网最详细教程

本项目结合YOLOv11分类识别算法和PySide6框架,开发了一套图形化分类识别系统。系统支持图片、视频和摄像头实时分类检测,并具备完善的用户管理功能,包括登录验证、个人信息修改等模块。最新版本新增了管理员后台管理系统,包含用户管理、权限控制等功能。系统采用MySQL数据库存储用户数据,界面设计采用QtDesigner完成,实现了高效的目标分类与友好的交互体验。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1048

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jdk1.7新特性

jdk1.7新特性 1.对Java集合(Collections)的增强支持 // 创建List接口对象 List<String> list = new ArrayList<String>(); list.add("item") String item = list.get(0); // 创建Set接口对象 Set<String> set = new HashS...

white_zzZ的博客 745

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jdk1.7 新特性

1,switch中可以使用字串了 String s = "test"; switch (s) { case "test" : System.out.println("test"); case "test1" : System.out.println("test1"); break ; default : System.out.println("break");

梦想的追求 1584

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java中JDK 1.7和JDK 1.8新特性问题

JDK 1.7的部分新特性如下:   1)switch可以接受Stringe类型。随着Java语言的发展,在java7中,开始支持String类型。 public class Switch { public void test(String str) { switch (str) { case "computer": System.out.println("computer...

weixin_38894058的博客 1725

黑马程序员————JDK1.7/1.8新特性详解

本文讲解了JDK1.7和1.8的一些常见新特性,例如JDK1.7新添加的try-resource语句实现对资源的自动关闭,和还有对文件相关的一些操作。 JDK 1.8最显著的新特性莫过于lambda函数式接口,和JavaFX。

瑞雪的博客 3788

[转]JDK1.7和JDK1.8的新特性

JDK1.7和JDK1.8的新特性

可一的专栏 563

java jdk 1.8特性_Java JDK 1.7 和 JDK 1.8 新特性

引言本文主要介绍 Java JDK 中 1.7 和 1.8 的新特性。JDK 1.7 新特性1. switch可以接受String类型;public class Switch {public void test(String str) {switch (str) {case "computer":System.out.println("computer");break;case "book":Sy...

weixin_39574943的博客 263

JDK 1.7新特性技术解析

JDK 1.7引入的这些新特性,不仅增强了Java语言的表达能力,还提高了开发效率和代码的可读。

m0_61431263的博客 676

JDK1.7和JDK1.8新特性

JDK1.7新特性 JDK1.7概述 JDK1.7二>语法 JDK1.7三>遍历文件树 JDK1.7四> ............ 1,switch中可以使用字串了 String s = "test";   switch (s) {   case "test" :        System.out.println("test"); case "test1" : 

马万明的专栏 2975

JDK新特性(jdk1.5、jdk1.6、jdk1.7)

JDK1.5新特性1、泛型(Generics) 为集合(collections)提供编译时类型安全,无需每刻从Collections取得一个对象就进行强制转换(cast) 2、增强的for循环(foreach) 减少迭代器(iterator)的潜在错误(error-proneness)3、自动...

chenyuanyuan1992的博客 177

.Jdk1.7新特性与Jdk1.8新特性的理解,JDK常用的包---

Jdk1.7新特性1.自动资源管理Java中某些资源是需要手动关闭的,如InputStream,Writes,Sockets,Sql classes等。这个新的语言特性允许try语句本身申请更多的资源, 这些资源作用于try代码块,并自动关闭。 2.新增一些取环境信息的工具方法System.getJavaHomeDir() // JRE的安装目录    File System.getUserHom...

yuanaili的博客 852

JDK版本新特性介绍&JDK1.7

JDK1.7新特性介绍 1. 对Java集合(Collections)的增强支持 在JDK1.7之前的版本中,Java集合容器中存取元素的形式如下: 以List、Set、Map集合容器为例: // 创建List接口对象 List<String> list = new ArrayList<String>(); list.add("item") String item = list.get(0);

衣带渐宽终不悔,为伊消得人憔悴! 5559
上一篇: svn分支开发与主干合并
下一篇: linux上用Xftp 5+Xshell 5配合部署tomcat项目
夜未眠shm
博客等级 码龄14年 15粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值