Java 中文官方教程 2022 版(二十八)(3)

简介: Java 中文官方教程 2022 版(二十八)

Java 中文官方教程 2022 版(二十八)(2)https://developer.aliyun.com/article/1486867

Duration

一个Duration在衡量机器时间的情况下最为适用,比如使用Instant对象的代码。Duration对象以秒或纳秒为单位进行衡量,不使用年、月和日等基于日期的构造,尽管该类提供了将时间转换为天、小时和分钟的方法。Duration可以具有负值,如果创建时结束点早于起始点。

以下代码计算两个瞬间之间的持续时间(以纳秒为单位):

Instant t1, t2;
...
long ns = Duration.between(t1, t2).toNanos();

以下代码将 10 秒添加到一个Instant中:

Instant start;
...
Duration gap = Duration.ofSeconds(10);
Instant later = start.plus(gap);

一个Duration与时间线无关,即它不跟踪时区或夏令时。将相当于 1 天的Duration添加到ZonedDateTime中,结果将确切地添加 24 小时,而不考虑夏令时或其他可能导致的时间差异。

ChronoUnit

讨论 Temporal Package 中的ChronoUnit枚举定义了用于衡量时间的单位。当您想要以单个时间单位(如天或秒)衡量一段时间时,ChronoUnit.between方法非常有用。between方法适用于所有基于时间的对象,但仅以单个单位返回时间量。以下代码计算两个时间戳之间的间隔,以毫秒为单位:

import java.time.Instant;
import java.time.temporal.Temporal;
import java.time.temporal.ChronoUnit;
Instant previous, current, gap;
...
current = Instant.now();
if (previous != null) {
    gap = ChronoUnit.MILLIS.between(previous,current);
}
...

Period

要使用基于日期的值(年、月、日)来定义一段时间,请使用Period类。Period类提供了各种get方法,比如getMonthsgetDaysgetYears,以便您可以从期间中提取时间量。

所有三个单位(月、日和年)一起表示的总时间段。要以单个时间单位(如天)表示测量的时间量,可以使用ChronoUnit.between方法。

以下代码报告了你的年龄,假设你出生于 1960 年 1 月 1 日。使用Period类来确定年、月和日的时间。使用ChronoUnit.between方法确定相同的时间段,以总天数显示在括号中:

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);
Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() +
                   " months, and " + p.getDays() +
                   " days old. (" + p2 + " days total)");

该代码生成类似以下的输出:

You are 53 years, 4 months, and 29 days old. (19508 days total)

要计算距离你下一个生日还有多长时间,可以使用来自Birthday示例的以下代码。使用Period类来确定月和日的值。ChronoUnit.between方法返回总天数的值,并显示在括号中。

LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);
LocalDate nextBDay = birthday.withYear(today.getYear());
//If your birthday has occurred this year already, add 1 to the year.
if (nextBDay.isBefore(today) || nextBDay.isEqual(today)) {
    nextBDay = nextBDay.plusYears(1);
}
Period p = Period.between(today, nextBDay);
long p2 = ChronoUnit.DAYS.between(today, nextBDay);
System.out.println("There are " + p.getMonths() + " months, and " +
                   p.getDays() + " days until your next birthday. (" +
                   p2 + " total)");

该代码生成类似以下的输出:

There are 7 months, and 2 days until your next birthday. (216 total)

这些计算没有考虑时区差异。例如,如果你出生在澳大利亚,但目前居住在班加罗尔,这会稍微影响你确切年龄的计算。在这种情况下,可以结合使用PeriodZonedDateTime类。当你将Period添加到ZonedDateTime时,会考虑时差。

时钟

原文:docs.oracle.com/javase/tutorial/datetime/iso/clock.html

大多数基于时间的对象提供一个无参数的now()方法,使用系统时钟和默认时区提供当前日期和时间。这些基于时间的对象还提供一个带有一个参数的now(Clock)方法,允许您传入一个替代的Clock

当前日期和时间取决于时区,对于全球化应用程序,需要一个Clock来确保日期/时间是使用正确的时区创建的。因此,虽然使用Clock类是可选的,但这个特性允许您测试您的代码是否适用于其他时区,或者通过使用一个固定的时钟,时间不会改变。

Clock类是抽象的,因此您不能创建它的实例。以下工厂方法对于测试很有用。

非 ISO 日期转换

原文:docs.oracle.com/javase/tutorial/datetime/iso/nonIso.html

本教程不会详细讨论java.time.chrono包。但是,了解到该包提供了几个不基于 ISO 的预定义年表,如日本、伊斯兰、民国和泰国佛教。您还可以使用此包创建自己的年表。

本节将向您展示如何在 ISO 日期和其他预定义年表日期之间进行转换。

转换为非 ISO 日期

您可以使用from(TemporalAccessor)方法将 ISO 日期转换为其他年表的日期,例如JapaneseDate.from(TemporalAccessor)。如果无法将日期转换为有效实例,则此方法会抛出DateTimeException。以下代码将LocalDateTime实例转换为几个预定义的非 ISO 日历日期:

LocalDateTime date = LocalDateTime.of(2013, Month.JULY, 20, 19, 30);
JapaneseDate jdate     = JapaneseDate.from(date);
HijrahDate hdate       = HijrahDate.from(date);
MinguoDate mdate       = MinguoDate.from(date);
ThaiBuddhistDate tdate = ThaiBuddhistDate.from(date);

StringConverter示例将从LocalDate转换为ChronoLocalDate再转换为String,然后再转回去。toString方法接受LocalDate实例和Chronology,并通过提供的Chronology返回转换后的字符串。DateTimeFormatterBuilder用于构建可用于打印日期的字符串:

/**
 * Converts a LocalDate (ISO) value to a ChronoLocalDate date
 * using the provided Chronology, and then formats the
 * ChronoLocalDate to a String using a DateTimeFormatter with a
 * SHORT pattern based on the Chronology and the current Locale.
 *
 * @param localDate - the ISO date to convert and format.
 * @param chrono - an optional Chronology. If null, then IsoChronology is used.
 */
public static String toString(LocalDate localDate, Chronology chrono) {
    if (localDate != null) {
        Locale locale = Locale.getDefault(Locale.Category.FORMAT);
        ChronoLocalDate cDate;
        if (chrono == null) {
            chrono = IsoChronology.INSTANCE;
        }
        try {
            cDate = chrono.date(localDate);
        } catch (DateTimeException ex) {
            System.err.println(ex);
            chrono = IsoChronology.INSTANCE;
            cDate = localDate;
        }
        DateTimeFormatter dateFormatter =
            DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
                             .withLocale(locale)
                             .withChronology(chrono)
                             .withDecimalStyle(DecimalStyle.of(locale));
        String pattern = "M/d/yyyy GGGGG";
        return dateFormatter.format(cDate);
    } else {
        return "";
    }
}

当使用以下日期调用预定义年表的方法时:

LocalDate date = LocalDate.of(1996, Month.OCTOBER, 29);
System.out.printf("%s%n",
     StringConverter.toString(date, JapaneseChronology.INSTANCE));
System.out.printf("%s%n",
     StringConverter.toString(date, MinguoChronology.INSTANCE));
System.out.printf("%s%n",
     StringConverter.toString(date, ThaiBuddhistChronology.INSTANCE));
System.out.printf("%s%n",
     StringConverter.toString(date, HijrahChronology.INSTANCE));

输出如下:

10/29/0008 H
10/29/0085 1
10/29/2539 B.E.
6/16/1417 1

转换为基于 ISO 的日期

您可以使用静态LocalDate.from方法将非 ISO 日期转换为LocalDate实例,如下例所示:

LocalDate date = LocalDate.from(JapaneseDate.now());

其他基于时间的类也提供此方法,如果日期无法转换,则会抛出DateTimeException

来自StringConverter示例的fromString方法解析包含非 ISO 日期的String并返回LocalDate实例。

/**
 * Parses a String to a ChronoLocalDate using a DateTimeFormatter
 * with a short pattern based on the current Locale and the
 * provided Chronology, then converts this to a LocalDate (ISO)
 * value.
 *
 * @param text   - the input date text in the SHORT format expected
 *                 for the Chronology and the current Locale.
 *
 * @param chrono - an optional Chronology. If null, then IsoChronology
 *                 is used.
 */
public static LocalDate fromString(String text, Chronology chrono) {
    if (text != null && !text.isEmpty()) {
        Locale locale = Locale.getDefault(Locale.Category.FORMAT);
        if (chrono == null) {
           chrono = IsoChronology.INSTANCE;
        }
        String pattern = "M/d/yyyy GGGGG";
        DateTimeFormatter df = new DateTimeFormatterBuilder().parseLenient()
                              .appendPattern(pattern)
                              .toFormatter()
                              .withChronology(chrono)
                              .withDecimalStyle(DecimalStyle.of(locale));
        TemporalAccessor temporal = df.parse(text);
        ChronoLocalDate cDate = chrono.date(temporal);
        return LocalDate.from(cDate);
    }
return null;
}

当使用以下字符串调用方法时:

System.out.printf("%s%n", StringConverter.fromString("10/29/0008 H",
    JapaneseChronology.INSTANCE));
System.out.printf("%s%n", StringConverter.fromString("10/29/0085 1",
    MinguoChronology.INSTANCE));
System.out.printf("%s%n", StringConverter.fromString("10/29/2539 B.E.",
    ThaiBuddhistChronology.INSTANCE));
System.out.printf("%s%n", StringConverter.fromString("6/16/1417 1",
    HijrahChronology.INSTANCE));

打印的字符串应该都能转换回 1996 年 10 月 29 日:

1996-10-29
1996-10-29
1996-10-29
1996-10-29

传统日期时间代码

原文:docs.oracle.com/javase/tutorial/datetime/iso/legacy.html

在 Java SE 8 发布之前,Java 日期和时间机制由 java.util.Datejava.util.Calendarjava.util.TimeZone 类以及它们的子类,如 java.util.GregorianCalendar 提供。这些类有几个缺点,包括:

  • Calendar 类不是类型安全的。
  • 由于这些类是可变的,它们不能在多线程应用程序中使用。
  • 应用程序代码中常见的错误是由于月份编号不寻常和缺乏类型安全性。

与传统代码的互操作性

也许您有使用 java.util 日期和时间类的传统代码,并且希望在最小更改代码的情况下利用 java.time 功能。

JDK 8 发布中添加了几种允许在 java.utiljava.time 对象之间进行转换的方法:

以下示例将 Calendar 实例转换为 ZonedDateTime 实例。请注意,必须提供一个时区来从 Instant 转换为 ZonedDateTime

Calendar now = Calendar.getInstance();
ZonedDateTime zdt = ZonedDateTime.ofInstant(now.toInstant(), ZoneId.systemDefault()));

以下示例展示了 DateInstant 之间的转换:

Instant inst = date.toInstant();
Date newDate = Date.from(inst);

以下示例将从 GregorianCalendar 转换为 ZonedDateTime,然后从 ZonedDateTime 转换为 GregorianCalendar。其他基于时间的类是使用 ZonedDateTime 实例创建的:

GregorianCalendar cal = ...;
TimeZone tz = cal.getTimeZone();
int tzoffset = cal.get(Calendar.ZONE_OFFSET);
ZonedDateTime zdt = cal.toZonedDateTime();
GregorianCalendar newCal = GregorianCalendar.from(zdt);
LocalDateTime ldt = zdt.toLocalDateTime();
LocalDate date = zdt.toLocalDate();
LocalTime time = zdt.toLocalTime();

将 java.util 日期和时间功能映射到 java.time

由于在 Java SE 8 发布中完全重新设计了日期和时间的 Java 实现,您不能将一个方法替换为另一个方法。如果您想使用 java.time 包提供的丰富功能,最简单的解决方案是使用前一节中列出的 toInstanttoZonedDateTime 方法。但是,如果您不想使用该方法或该方法不满足您的需求,则必须重写您的日期时间代码。

在 概述 页面介绍的表格是评估哪些 java.time 类满足您需求的好地方。

两个 API 之间没有一对一的映射对应关系,但以下表格给出了 java.util 日期和时间类中的哪些功能映射到 java.time API 的一般想法。

java.util 功能 java.time 功能 注释

| java.util.Date | java.time.Instant | InstantDate 类相似。每个类:- 表示时间线上的瞬时时间点(UTC)

  • 持有独立于时区的时间
  • 表示为自 1970-01-01T00:00:00Z 以来的纪元秒数加上纳秒

Date.from(Instant)Date.toInstant() 方法允许在这些类之间进行转换。 |

| java.util.GregorianCalendar | java.time.ZonedDateTime | ZonedDateTime 类是 GregorianCalendar 的替代品。它提供以下类似功能。人类时间表示如下:

LocalDate:年,月,日

LocalTime:小时,分钟,秒,纳秒

ZoneId:时区

ZoneOffset:与 GMT 的当前偏移量

GregorianCalendar.from(ZonedDateTime)GregorianCalendar.to(ZonedDateTime) 方法促进这些类之间的转换。

java.util.TimeZone java.time.ZoneIdjava.time.ZoneOffset ZoneId 类指定时区标识符,并访问每个时区使用的规则。ZoneOffset 类仅指定与格林威治/UTC 的偏移量。更多信息,请参阅时区和偏移类。
将日期设置为 1970-01-01GregorianCalendar java.time.LocalTime 将日期设置为 1970-01-01GregorianCalendar 实例中的代码以使用时间组件可以替换为 LocalTime 实例。
GregorianCalendar 时间设置为 00:00. java.time.LocalDate 将时间设置为 GregorianCalendar 实例中的 00:00 以使用日期组件的代码可以替换为 LocalDate 实例。(这种 GregorianCalendar 方法存在缺陷,因为由于转换到夏令时,有些国家一年中不会发生午夜。)

日期和时间格式化

尽管java.time.format.DateTimeFormatter提供了一个强大的机制来格式化日期和时间值,但你也可以直接使用java.time基于时间的类与java.util.FormatterString.format一起使用,使用与java.util日期和时间类相同的基于模式的格式化。

摘要

原文:docs.oracle.com/javase/tutorial/datetime/iso/summary.html

java.time 包含许多类,您的程序可以使用这些类来表示时间和日期。这是一个非常丰富的 API。基于 ISO 的日期的关键入口点如下:

  • Instant 类提供了时间线的机器视图。
  • LocalDateLocalTimeLocalDateTime 类提供了日期和时间的人类视图,没有任何关于时区的参考。
  • ZoneIdZoneRulesZoneOffset 类描述时区、时区偏移和时区规则。
  • ZonedDateTime 类表示带有时区的日期和时间。OffsetDateTimeOffsetTime 类分别表示日期和时间,或仅时间。这些类考虑了时区偏移。
  • Duration 类以秒和纳秒来衡量时间量。
  • Period 类使用年、月和日来衡量时间量。

其他非 ISO 日历系统可以使用 java.time.chrono 包来表示。尽管本教程不涵盖此包,但 非 ISO 日期转换 页面提供了关于将基于 ISO 的日期转换为其他日历系统的信息。

日期时间 API 是作为 Java 社区流程的一部分开发的,其编号为 JSR 310。更多信息,请参阅 JSR 310: 日期和时间 API

问题和练习:日期时间 API

原文:docs.oracle.com/javase/tutorial/datetime/iso/QandE/questions.html

问题

1. 你会使用哪个类来存储你的生日,包括年、月、日、秒和纳秒?

2. 给定一个随机日期,如何找到前一个星期四的日期?

3. ZoneIdZoneOffset之间有什么区别?

4. 如何将Instant转换为ZonedDateTime?如何将ZonedDateTime转换为Instant

练习

1. 为给定年份编写一个示例,报告该年份内每个月的长度。

2. 为当前年份的给定月份编写一个示例,列出该月份内所有的星期一。

3. 编写一个示例,测试给定日期是否是一个星期五的 13 日。

检查你的答案。

Trail: 国际化

原文:docs.oracle.com/javase/tutorial/i18n/index.html

本教程中的课程将教您如何国际化 Java 应用程序。国际化的应用程序易于根据全球用户的习俗和语言进行定制。


注意: 本教程涵盖了核心国际化功能,这是桌面、企业和移动应用程序提供的附加功能所需的基础。有关更多信息,请参阅Java 国际化主页


定义了国际化这一术语,提供了一个快速的示例程序,并提供了一个检查表,您可以用来国际化现有程序。

解释了如何创建和使用Locale对象。

展示了如何动态访问随Locale变化的对象。

解释了如何根据Locale格式化数字、日期和文本消息,以及如何使用模式创建自定义格式。

提供了在与区域设置无关的方式下操作文本的技术。

解释了如何为 IDN 提供国际化支持。

解释了如何启用依赖于区域设置的数据和服务的插件。

教训:介绍

原文:docs.oracle.com/javase/tutorial/i18n/intro/index.html

国际化 是设计应用程序的过程,使其能够在不进行工程更改的情况下适应各种语言和地区。有时国际化一词被缩写为 i18n,因为在第一个 “i” 和最后一个 “n” 之间有 18 个字母。

一个国际化的程序具有以下特点:

  • 通过添加本地化数据,同一个可执行文件可以在全球范围内运行。
  • 文本元素,比如状态消息和 GUI 组件标签,不是硬编码在程序中的。而是存储在源代码之外,并动态检索。
  • 支持新语言不需要重新编译。
  • 依赖文化的数据,比如日期和货币,以符合最终用户的地区和语言的格式出现。
  • 它可以快速本地化。

本地化 是通过添加特定区域或语言的区域特定组件和翻译文本来使软件适应特定区域或语言的过程。本地化一词通常缩写为 l10n,因为在 “l” 和 “n” 之间有 10 个字母。

本地化的主要任务是翻译用户界面元素和文档。本地化不仅涉及改变语言交互,还涉及其他相关变化,比如数字、日期、货币的显示等。如果音频和图像等其他类型的数据在文化上敏感,可能需要本地化。应用程序国际化得越好,为特定语言和字符编码方案本地化就越容易。

一开始国际化可能看起来有点令人生畏。阅读以下章节将有助于您逐渐了解这个主题。

一个快速示例

本节向您展示如何逐步国际化一个简单的程序。

清单

所以你继承了一个需要国际化的程序,或者你正在计划确定新开发软件的需求。你可能不知道从哪里开始?查看这个清单。它总结了必要的国际化任务,并提供了本章相关课程的链接。

一个快速示例

原文:docs.oracle.com/javase/tutorial/i18n/intro/quick.html

如果你是国际化软件的新手,这节课适合你。这节课使用一个简单的示例来演示如何国际化程序,以便以适当的语言显示文本消息。你将学习如何LocaleResourceBundle对象一起工作,以及如何使用属性文件。

国际化前

源代码的第一个版本包含了硬编码的英文消息版本,这不是编写国际化软件的正确方式。

国际化后

这是我们的源代码在国际化后的 sneak preview。

运行示例程序

要运行示例程序,你需要在命令行上指定语言和国家。本节将向你展示一些示例。

国际化示例程序

国际化程序只需要几个步骤。你会惊讶于它是多么容易。

Java 中文官方教程 2022 版(二十八)(4)https://developer.aliyun.com/article/1486877

相关文章
|
9天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
【4月更文挑战第21天】本文介绍了Selenium中处理特殊测试场景的方法,如鼠标悬停。Selenium的Actions类提供了鼠标悬停功能,用于模拟用户在网页元素上的悬停行为。文中通过实例展示了如何使用Actions悬停并展开下拉菜单,以及在搜索时选择自动补全的字段。代码示例包括了打开百度首页,悬停在“更多”元素上显示下拉菜单并点击“音乐”,以及在搜索框输入关键词并自动补全的过程。
33 0
|
1天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(<https://www.sojump.com/m/2792226.aspx/>)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
9 0
|
2天前
|
Java 测试技术 项目管理
Java基础教程(22)-构建工具Maven的基本使用
【4月更文挑战第22天】Maven是Java项目管理及构建工具,简化构建、测试、打包和部署等任务。遵循约定优于配置原则,核心是`pom.xml`配置文件,用于管理依赖和项目信息。安装涉及下载、解压、配置环境变量。在IDEA中使用Maven创建项目,通过`pom.xml`添加依赖和管理版本。常用命令包括`clean`、`compile`、`test`、`package`、`install`和`deploy`。IDEA支持直接执行这些命令。
|
2天前
|
NoSQL Java 关系型数据库
Java基础教程(21)-Java连接MongoDB
【4月更文挑战第21天】MongoDB是开源的NoSQL数据库,强调高性能和灵活性。Java应用通过MongoDB Java驱动与之交互,涉及MongoClient、MongoDatabase、MongoCollection和Document等组件。连接MongoDB的步骤包括:配置连接字符串、创建MongoClient、选择数据库和集合。伪代码示例展示了如何建立连接、插入和查询数据。
|
3天前
|
存储 前端开发 测试技术
《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)
【4月更文挑战第27天】本文介绍了使用Java+Selenium进行Web自动化测试时,如何遍历和操作多选按钮的方法。文章分为两个部分,首先是一个本地HTML页面的示例,展示了多选按钮的HTML代码和页面效果,并详细解释了遍历多选按钮的思路:找到所有多选按钮的共同点,通过定位这些元素并放入list容器中,然后使用for循环遍历并操作。 第二部分介绍了在JQueryUI网站上的实战,给出了被测网址,展示了代码设计,同样使用了findElements()方法获取所有多选按钮并存储到list中,然后遍历并进行点击操作。最后,文章对整个过程进行了小结,并推荐了作者的其他自动化测试教程资源。
11 0
|
3天前
|
Java 关系型数据库 MySQL
Java基础教程(20)-Java连接mysql数据库CURD
【4月更文挑战第19天】MySQL是流行的关系型数据库管理系统,支持SQL语法。在IDEA中加载jar包到项目类路径:右击项目,选择“Open Module Settings”,添加库文件。使用JDBC连接MySQL,首先下载JDBC驱动,然后通过`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接。执行CRUD操作,例如创建表、插入数据和查询,使用`Statement`或`PreparedStatement`,并确保正确关闭数据库资源。
|
3天前
|
设计模式 算法 Java
Java基础教程(19)-设计模式简述
【4月更文挑战第19天】设计模式是软件设计中反复使用的代码设计经验,旨在提升代码的可重用性、可扩展性和可维护性。23种模式分为创建型、结构型和行为型三类。创建型模式如工厂方法、抽象工厂、建造者、原型和单例,关注对象创建与使用的分离。结构型模式涉及对象组合,如适配器、装饰器、外观等,增强结构灵活性。行为型模式专注于对象间职责分配和算法合作,包括责任链、命令、观察者等。设计模式提供标准化解决方案,促进代码交流和复用。
|
4天前
|
前端开发 测试技术 Python
《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)
【4月更文挑战第25天】本文介绍了自动化测试中如何处理单选和多选按钮的操作,包括它们的定义、HTML代码示例以及如何判断和操作这些元素。文章通过一个简单的HTML页面展示了单选和多选框的示例,并提供了Java+Selenium实现的代码示例,演示了如何检查单选框是否选中以及如何进行全选操作。
11 0
|
5天前
|
网络协议 Java 网络架构
Java基础教程(18)-Java中的网络编程
【4月更文挑战第18天】Java网络编程简化了底层协议处理,利用Java标准库接口进行TCP/IP通信。TCP协议提供可靠传输,常用于HTTP、SMTP等协议;UDP协议则更高效但不保证可靠性。在TCP编程中,ServerSocket用于监听客户端连接,Socket实现双进程间通信。UDP编程中,DatagramSocket处理无连接的数据报文。HTTP编程可以通过HttpURLConnection发送请求并接收响应。
|
6天前
|
前端开发 Java 测试技术
《手把手教你》系列技巧篇(三十二)-java+ selenium自动化测试-select 下拉框(详解教程)
【4月更文挑战第24天】本文介绍了在自动化测试中处理HTML下拉选择(select)的方法。使用Selenium的Select类,可以通过index、value或visible text三种方式选择选项,并提供了相应的取消选择的方法。此外,文章还提供了一个示例HTML页面(select.html)和相关代码实战,演示了如何使用Selenium进行选择和取消选择操作。最后,文章提到了现代网页中类似下拉框的新设计,如12306网站的出发地选择,并给出了相应的代码示例,展示了如何定位并选择特定选项。
16 0