JDK 10 版本为 Java 库添加了 70 多个新的 API 和选项。以下是介绍的一些重要增强功能。 Optional.orElseThrow() 方法 一个新方法 orElseThrow() 在 java.util.Optional 类中可用,现在是 get() 的首选替代方案 方法。 用于创建不可修改集合的 API 一种新方法 copyOf() 在 List、Set 和 Map 接口中可用,它们可以从现有的集合实例中创建新的集合实例。 Collector 类具有新方法 toUnmodifiableList()、toUnmodifiableSet() 和 toUnmodifiable
JEP 286 - 局部变量类型推断 局部变量类型推断是从 Java 10 开始可用的语言最明显的变化之一。它允许使用 var 定义变量,而无需指定变量的类型。编译器使用提供的值推断变量的类型。这种类型推断仅限于局部变量。 声明局部变量的旧方法。 String name = Welcome to tutorialspoint.com; 声明局部变量的新方法。 var name = Welcome to tutorialspoint.com; 现在编译器通过检查提供的值来推断 name 变量的类型为 String。 值得注意的点 在成员变量、方法参数、返回值的情况下不进行类型推断。
JEP 322 - 基于时间的发布版本控制 从 Java 10 开始,Oracle 为 Java 版本引入了严格的基于时间的版本控制模型。现在 Java 将在每六个月后发布一个主要版本。 Java 10 于 2018 年 3 月发布,之后的所有主要版本都计划在未来几年的 3 月和 9 月发布。版本进一步分为三大类。 功能发布 − 功能版本包含语言特定的功能、JVM 功能、新的/改进的 API、API 的删除/弃用。这些功能发布的时间是固定的,并且对特定版本中包含的功能没有任何限制。如果正在开发的功能不是最新版本的一部分,那么它将在下一个版本中进行计划。 更新版本 − 更新版本包括
在线演示选项 我们已经在线搭建了 Java 编程环境,您可以在线编译和执行所有可用的示例。它使您对正在阅读的内容充满信心,并使您能够使用不同的选项验证程序。随意修改任何示例并在线执行。 使用 Live Demo 尝试以下示例 以下示例代码框右上角提供的选项 - public class MyFirstJavaProgram { public static void main(String []args) { System.out.println(Hello World); }} 对于本教程中给出的大多数示例,您将找到 Live Demo 我们网站右上角的代码部分中的选项
Java 10 是 Java 发布节奏中的主要版本,于 2018 年 3 月 10 日发布。在 Java 10 中,Oracle 已将 Java 发布节奏更改为新模型、6 个月发布节奏和 Oracle Java SE 产品的 LTS 模型。 LTS 模型代表长期支持模型。 从 Java 10 开始,Oracle 每 6 个月发布一个新版本的 Java,每个版本都包含一个或两个主要特性。 Oracle 使用发布列车概念。每个发布火车计划为 6 个月。在此时间线内开发的功能将在版本中发布,否则这些功能将移至下一个版本系列。 Oracle JDK 与 OpenJDK 大多数 Oracle JDK
Java 语言支持三种类型的注释 - Sr.No. 评论和说明 1 /* 文字 */ 编译器会忽略从 /* 到 */ 的所有内容。 2 //文字 编译器会忽略从 // 到行尾的所有内容。 3 /** 文档 */ 这是一个文档注释,通常称为 doc comment . JDK javadoc 工具使用 doc 注释 在准备自动生成的文档时。 本章都是关于解释 Javadoc。我们将了解如何利用 Javadoc 为 Java 代码生成有用的文档。 什么是 Javadoc? Javadoc是JDK自带的一个工具,用于从Java源代码生成HTML格式的Ja
小程序 是在 Web 浏览器中运行的 Java 程序。小程序可以是功能齐全的 Java 应用程序,因为它拥有整个 Java API 供其使用。 小程序和独立 Java 应用程序之间有一些重要的区别,包括以下内容 - 小程序是扩展 java.applet.Applet 类的 Java 类。 小程序上不调用main()方法,小程序类不会定义main()。 Applet 旨在嵌入 HTML 页面中。 当用户查看包含小程序的 HTML 页面时,小程序的代码会下载到用户的机器上。 查看小程序需要 JVM。 JVM既可以是Web浏览器的插件,也可以是单独的运行环境。
Java 是一种多线程编程语言 这意味着我们可以使用 Java 开发多线程程序。多线程程序包含两个或多个可以同时运行的部分,每个部分可以同时处理不同的任务,从而优化利用可用资源,特别是当您的计算机具有多个 CPU 时。 根据定义,多任务处理是指多个进程共享公共处理资源(例如 CPU)。多线程将多任务的概念扩展到应用程序中,您可以将单个应用程序中的特定操作细分为单独的线程。每个线程都可以并行运行。操作系统不仅在不同的应用程序之间分配处理时间,而且在应用程序内的每个线程之间分配处理时间。 多线程使您能够以一种可以在同一个程序中同时进行多个活动的方式进行编写。 线程的生命周期 线程在其生命周期
使用您的 Java 应用程序发送电子邮件非常简单,但首先您应该有 JavaMail API 和 Java 激活框架 (JAF) 安装在你的机器上。 您可以从 Java 的标准网站下载最新版本的 JavaMail(1.2 版)。 您可以从 Java 的标准网站下载最新版本的 JAF(1.1.1 版)。 下载并解压缩这些文件,在新创建的顶级目录中,您会发现两个应用程序的许多 jar 文件。您需要添加 mail.jar 和 activation.jar CLASSPATH 中的文件。 发送一封简单的电子邮件 这是一个从您的机器发送简单电子邮件的示例。假设您的 localhost
术语网络编程 是指编写跨多个设备(计算机)执行的程序,其中设备都通过网络相互连接。 J2SE API 的 java.net 包包含一组类和接口,这些类和接口提供低级通信细节,让您可以编写专注于解决手头问题的程序。 java.net 包提供了对两种常见网络协议的支持 - TCP − TCP 代表传输控制协议,它允许两个应用程序之间的可靠通信。 TCP 通常用于 Internet 协议,称为 TCP/IP。 UDP − UDP 代表用户数据报协议,这是一种无连接协议,允许在应用程序之间传输数据包。 本章很好地理解了以下两个主题 - 套接字编程 − 这是 Networki
Java 提供了一种机制,称为对象序列化,其中对象可以表示为字节序列,其中包括对象的数据以及有关对象类型和对象中存储的数据类型的信息。 序列化的对象写入文件后,可以从文件中读取并进行反序列化,即代表对象及其数据的类型信息和字节可用于在内存中重新创建对象。 最令人印象深刻的是整个过程是独立于 JVM 的,这意味着一个对象可以在一个平台上序列化并在完全不同的平台上反序列化。 类 ObjectInputStream 和 ObjectOutputStream 是包含序列化和反序列化对象方法的高级流。 ObjectOutputStream 类包含许多用于写入各种数据类型的写入方法,但其中一种方法
如果我们可以编写一个排序方法来对整数数组、字符串数组或任何支持排序的数组中的元素进行排序,那就太好了。 Java 通用 方法和泛型类使程序员能够分别通过单个方法声明指定一组相关方法,或通过单个类声明指定一组相关类型。 泛型还提供编译时类型安全,允许程序员在编译时捕获无效类型。 使用 Java Generic 的概念,我们可以编写一个用于对对象数组进行排序的泛型方法,然后使用 Integer 数组、Double 数组、String 数组等调用该泛型方法,对数组元素进行排序。 通用方法 您可以编写一个可以使用不同类型的参数调用的通用方法声明。根据传递给泛型方法的参数类型,编译器会适当地处理
在 Java 2 之前,Java 提供了诸如 Dictionary、Vector、Stack、 之类的 ad hoc 类 和属性 存储和操作对象组。尽管这些课程非常有用,但它们缺乏一个中心统一的主题。因此,您使用 Vector 的方式与使用 Properties 的方式不同。 集合框架旨在满足多个目标,例如 - 该框架必须是高性能的。基本集合(动态数组、链表、树和哈希表)的实现非常高效。 该框架必须允许不同类型的集合以相似的方式工作并具有高度的互操作性。 该框架必须轻松扩展和/或调整集合。 为此,整个集合框架是围绕一组标准接口设计的。 LinkedList、HashS
Java 实用程序包提供的数据结构非常强大,可以执行广泛的功能。这些数据结构由以下接口和类组成 - 枚举 位集 矢量 堆栈 字典 哈希表 属性 所有这些类现在都是遗留的,Java-2 引入了一个名为 Collections Framework 的新框架,将在下一章讨论。 - 枚举 Enumeration 接口本身不是数据结构,但它在其他数据结构的上下文中非常重要。 Enumeration 接口定义了一种从数据结构中检索连续元素的方法。 例如,Enumeration 定义了一个名为 nextElement 的方法,用于获取包含多个元素的数据结构中的下一个元素。 要了解有关此接口的更多
Java中使用包是为了防止命名冲突、控制访问、使类、接口、枚举和注释的搜索/定位和使用更容易等。 一个包 可以定义为一组相关类型(类、接口、枚举和注解),提供访问保护和命名空间管理。 Java 中的一些现有包是 - java.lang − 捆绑基础类 java.io − 输入、输出函数的类都捆绑在这个包中 程序员可以定义自己的包来捆绑类/接口组等。将您实现的相关类分组是一个很好的做法,以便程序员可以轻松确定类、接口、枚举和注释是相关的。 由于包创建了一个新的命名空间,因此不会与其他包中的名称发生任何名称冲突。使用包,更容易提供访问控制,也更容易定位相关类。 创建一个包
接口是 Java 中的引用类型。它类似于类。它是抽象方法的集合。一个类实现了一个接口,从而继承了接口的抽象方法。 除了抽象方法,接口还可以包含常量、默认方法、静态方法和嵌套类型。方法体只存在于默认方法和静态方法中。 编写接口类似于编写类。但是一个类描述了一个对象的属性和行为。接口包含类实现的行为。 除非实现接口的类是抽象类,否则接口的所有方法都需要在类中定义。 接口在以下方面类似于类 - 一个接口可以包含任意数量的方法。 一个接口写在一个带有 .java 的文件中 扩展名,接口名与文件名匹配。 接口的字节码出现在 .class 中 文件。 接口出现在包中,其对应
封装 是四个基本 OOP 概念之一。其他三个是继承、多态和抽象。 Java 中的封装是一种将数据(变量)和作用于数据(方法)的代码作为一个单元包装在一起的机制。在封装中,一个类的变量对其他类是隐藏的,只能通过其当前类的方法访问。因此也称为数据隐藏 . 在 Java 中实现封装 - 将类的变量声明为私有。 提供公共的setter和getter方法来修改和查看变量值。 示例 以下是演示如何在 Java 中实现封装的示例 - /* File name : EncapTest.java */ public class EncapTest { private String
根据字典,抽象 是处理想法而不是事件的质量。例如,当您考虑电子邮件的情况时,复杂的细节(例如您发送电子邮件后会发生什么),您的电子邮件服务器使用的协议对用户是隐藏的。因此,要发送电子邮件,您只需输入内容,提及收件人地址,然后单击发送即可。 同样在面向对象的编程中,抽象是一个向用户隐藏实现细节的过程,只有功能将提供给用户。换句话说,用户将获得关于对象做什么而不是它如何做的信息。 在Java中,抽象是通过抽象类和接口实现的。 抽象类 一个包含 abstract 的类 其声明中的关键字称为抽象类。 抽象类可能包含也可能不包含抽象方法 ,即没有主体的方法( public void get(
多态性是对象具有多种形式的能力。 OOP 中最常见的多态性使用发生在使用父类引用来引用子类对象时。 任何可以通过多个 IS-A 测试的 Java 对象都被认为是多态的。在 Java 中,所有 Java 对象都是多态的,因为任何对象都将通过其自身类型和 Object 类的 IS-A 测试。 重要的是要知道访问对象的唯一可能方法是通过引用变量。引用变量只能是一种类型。一旦声明,引用变量的类型就不能改变了。 引用变量可以重新分配给其他对象,前提是它没有声明为 final。引用变量的类型将决定它可以在对象上调用的方法。 引用变量可以引用其声明类型的任何对象或其声明类型的任何子类型。引用变量可以
在上一章中,我们讨论了超类和子类。如果一个类从它的超类继承了一个方法,那么如果它没有被标记为final,那么就有机会覆盖这个方法。 重写的好处是:能够定义特定于子类类型的行为,这意味着子类可以根据其要求实现父类方法。 在面向对象的术语中,覆盖意味着覆盖现有方法的功能。 示例 让我们看一个例子。 现场演示 class Animal { public void move() { System.out.println(Animals can move); } } class Dog extends Animal { public void move() {
java