Java 中文官方教程 2022 版(五)(3)

简介: Java 中文官方教程 2022 版(五)

Java 中文官方教程 2022 版(五)(2)https://developer.aliyun.com/article/1486295

指数和对数方法

下表列出了Math类的指数和对数方法。

指数和对数方法

方法 描述
double exp(double d) 返回自然对数的底数 e 的参数次幂。
double log(double d) 返回参数的自然对数。
double pow(double base, double exponent) 返回第一个参数的值的第二个参数的幂。
double sqrt(double d) 返回参数的平方根。

下面的程序,指数演示,显示了e的值,然后对任意选择的数字调用前面表中列出的每个方法:

public class ExponentialDemo {
    public static void main(String[] args) {
        double x = 11.635;
        double y = 2.76;
        System.out.printf("The value of " + "e is %.4f%n",
                          Math.E);
        System.out.printf("exp(%.3f) " + "is %.3f%n",
                          x, Math.exp(x));
        System.out.printf("log(%.3f) is " + "%.3f%n",
                          x, Math.log(x));
        System.out.printf("pow(%.3f, %.3f) " + "is %.3f%n",
                          x, y, Math.pow(x, y));
        System.out.printf("sqrt(%.3f) is " + "%.3f%n",
                          x, Math.sqrt(x));
    }
}

当你运行指数演示时,你将看到以下输出:

The value of e is 2.7183
exp(11.635) is 112983.831
log(11.635) is 2.454
pow(11.635, 2.760) is 874.008
sqrt(11.635) is 3.411

三角函数方法

Math类还提供了一系列三角函数,总结在下表中。传递给这些方法的值是以弧度表示的角度。你可以使用toRadians方法将角度转换为弧度。

三角函数方法

方法 描述
double sin(double d) 返回指定双精度值的正弦值。
double cos(double d) 返回指定双精度值的余弦值。
double tan(double d) 返回指定双精度值的正切值。
double asin(double d) 返回指定双精度值的反正弦值。
double acos(double d) 返回指定双精度值的反余弦值。
double atan(double d) 返回指定双精度值的反正切值。
double atan2(double y, double x) 将直角坐标(x, y)转换为极坐标(r, theta)并返回theta
double toDegrees(double d) double toRadians(double d) 将参数转换为度或弧度。

这里有一个程序,三角函数演示,使用每个方法来计算 45 度角的各种三角函数值:

public class TrigonometricDemo {
    public static void main(String[] args) {
        double degrees = 45.0;
        double radians = Math.toRadians(degrees);
        System.out.format("The value of pi " + "is %.4f%n",
                           Math.PI);
        System.out.format("The sine of %.1f " + "degrees is %.4f%n",
                          degrees, Math.sin(radians));
        System.out.format("The cosine of %.1f " + "degrees is %.4f%n",
                          degrees, Math.cos(radians));
        System.out.format("The tangent of %.1f " + "degrees is %.4f%n",
                          degrees, Math.tan(radians));
        System.out.format("The arcsine of %.4f " + "is %.4f degrees %n", 
                          Math.sin(radians), 
                          Math.toDegrees(Math.asin(Math.sin(radians))));
        System.out.format("The arccosine of %.4f " + "is %.4f degrees %n", 
                          Math.cos(radians),  
                          Math.toDegrees(Math.acos(Math.cos(radians))));
        System.out.format("The arctangent of %.4f " + "is %.4f degrees %n", 
                          Math.tan(radians), 
                          Math.toDegrees(Math.atan(Math.tan(radians))));
    }
}

该程序的输出如下:

The value of pi is 3.1416
The sine of 45.0 degrees is 0.7071
The cosine of 45.0 degrees is 0.7071
The tangent of 45.0 degrees is 1.0000
The arcsine of 0.7071 is 45.0000 degrees
The arccosine of 0.7071 is 45.0000 degrees
The arctangent of 1.0000 is 45.0000 degrees

随机数

random()方法返回一个在 0.0 和 1.0 之间伪随机选择的数字。范围包括 0.0 但不包括 1.0。换句话说:0.0 <= Math.random() < 1.0。要获得不同范围的数字,可以对随机方法返回的值进行算术运算。例如,要生成 0 到 9 之间的整数,你可以这样写:

int number = (int)(Math.random() * 10);

通过将值乘以 10,可能值的范围变为0.0 <= number < 10.0

使用Math.random在需要生成单个随机数时效果很好。如果需要生成一系列随机数,应该创建一个java.util.Random的实例,并在该对象上调用方法来生成数字。

数字总结

原文:docs.oracle.com/javase/tutorial/java/data/numbersummary.html

您可以使用包装类之一 - ByteDoubleFloatIntegerLongShort - 将原始类型的数字包装在对象中。在必要时,Java 编译器会自动为您包装(装箱)原始类型,并在必要时对其进行拆箱。

Number 类包括常量和有用的类方法。MIN_VALUEMAX_VALUE 常量包含该类型对象可以包含的最小值和最大值。byteValueshortValue 和类似方法将一个数值类型转换为另一个数值类型。valueOf 方法将字符串转换为数字,toString 方法将数字转换为字符串。

要格式化包含数字的字符串以进行输出,可以使用 PrintStream 类中的 printf()format() 方法。或者,您可以使用 NumberFormat 类使用模式自定义数字格式。

Math 类包含各种执行数学函数的类方法,包括指数、对数和三角函数方法。Math 还包括基本算术函数,如绝对值和四舍五入,以及用于生成随机数的 random() 方法。

问题和练习:数字

原文:docs.oracle.com/javase/tutorial/java/data/QandE/numbers-questions.html

问题

  1. 使用 API 文档找到以下问题的答案:
  1. 你可以使用哪个Integer方法将int转换为以十六进制表示数字的字符串?例如,哪个方法将整数 65 转换为字符串“41”?
  2. 你会使用哪个Integer方法将以基数 5 表示的字符串转换为相应的int?例如,如何将字符串“230”转换为整数值 65?展示你将用于完成此任务的代码。
  3. 你可以使用哪个 Double 方法来检测浮点数是否具有特殊值“非数字”(NaN)?
  1. 以下表达式的值是多少,为什么?
Integer.valueOf(1).equals(Long.valueOf(1))

练习

  1. MaxVariablesDemo更改为显示最小值而不是最大值。您可以删除与变量aCharaBoolean相关的所有代码。输出是什么?
  2. 创建一个程序,从命令行读取未指定数量的整数参数并将它们相加。例如,假设您输入以下内容:
java Adder 1 3 2 10
  1. 程序应显示16,然后退出。如果用户只输入一个参数,程序应显示错误消息。您可以基于ValueOfDemo编写您的程序。
  2. 创建一个类似于上一个程序但具有以下区别的程序:
  • 它不是读取整数参数,而是读取浮点参数。
  • 它显示参数的总和,小数点右侧正好有两位。
  1. 例如,假设您输入以下内容:
java FPAdder 1 1e2 3.0 4.754
  1. 程序将显示108.75。根据您的区域设置,小数点可能是逗号(,)而不是句号(.)。

检查你的答案。

字符

原文:docs.oracle.com/javase/tutorial/java/data/characters.html

大多数情况下,如果您使用单个字符值,您将使用原始的char类型。例如:

char ch = 'a'; 
// Unicode for uppercase Greek omega character
char uniChar = '\u03A9';
// an array of chars
char[] charArray = { 'a', 'b', 'c', 'd', 'e' };

然而,有时您需要将 char 用作对象—例如,作为期望对象的方法参数。Java 编程语言提供了一个包装器类,用于将char包装在Character对象中。Character类型的对象包含一个单一字段,其类型为char。这个Character类还提供了许多有用的类(即静态)方法来操作字符。

您可以使用Character构造函数创建一个Character对象:

Character ch = new Character('a');

Java 编译器在某些情况下也会为您创建一个Character对象。例如,如果您将一个原始的char传递给一个期望对象的方法,编译器会自动为您将char转换为Character。这个特性被称为自动装箱—或者拆箱,如果转换是另一种方式的话。有关自动装箱和拆箱的更多信息,请参阅自动装箱和拆箱。


注意: Character类是不可变的,一旦创建,Character对象就无法更改。


以下表列出了Character类中一些最有用的方法,但并非详尽无遗。要查看此类中所有方法的完整列表(超过 50 个),请参考java.lang.Character API 规范。

Character类中的有用方法

方法 描述
boolean isLetter(char ch) boolean isDigit(char ch) 确定指定的 char 值是字母还是数字。
boolean isWhitespace(char ch) 确定指定的 char 值是否为空格。
boolean isUpperCase(char ch) boolean isLowerCase(char ch) 确定指定的 char 值是大写还是小写。
char toUpperCase(char ch) char toLowerCase(char ch) 返回指定 char 值的大写或小写形式。
toString(char ch) 返回表示指定字符值的String对象 — 也就是一个字符的字符串。

转义序列

一个由反斜杠(\)引导的字符是一个转义序列,对编译器具有特殊含义。下表显示了 Java 转义序列:

转义序列

转义序列 描述
\t 在文本中插入一个制表符。
\b 在文本中插入一个退格符。
\n 在文本中插入一个换行符。
\r 在文本中插入一个回车符。
\f 在文本中插入一个换页符。
\' 在文本中插入一个单引号字符。
\" 在文本中插入一个双引号字符。
\\ 在文本中插入一个反斜杠字符。

当在打印语句中遇到转义序列时,编译器会相应地解释它。例如,如果你想在引号内放置引号,你必须使用转义序列 \" 来处理内部引号。要打印这个句子

She said "Hello!" to me.

你需要写

System.out.println("She said \"Hello!\" to me.");

字符串

原文:docs.oracle.com/javase/tutorial/java/data/strings.html

在 Java 编程中广泛使用的字符串是一系列字符。在 Java 编程语言中,字符串是对象。

Java 平台提供了String类来创建和操作字符串。

创建字符串

创建字符串的最直接方法是写:

String greeting = "Hello world!";

在这种情况下,Hello world!是一个字符串字面值——代码中用双引号括起来的一系列字符。每当编译器在您的代码中遇到字符串字面值时,它会创建一个带有其值的String对象——在本例中为Hello world!

与任何其他对象一样,您可以使用new关键字和构造函数创建String对象。String类有十三个构造函数,允许您使用不同的来源(如字符数组)提供字符串的初始值:

char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
String helloString = new String(helloArray);
System.out.println(helloString);

此代码片段的最后一行显示hello


注意:String类是不可变的,因此一旦创建了String对象,就无法更改。String类有许多方法,其中一些将在下面讨论,看起来修改了字符串。由于字符串是不可变的,这些方法实际上是创建并返回一个包含操作结果的新字符串。


字符串长度

用于获取有关对象信息的方法称为访问器方法。您可以与字符串一起使用的一个访问器方法是length()方法,它返回字符串对象中包含的字符数。执行以下两行代码后,len等于 17:

String palindrome = "Dot saw I was Tod";
int len = palindrome.length();

回文是一个对称的单词或句子——它正向和反向拼写相同,忽略大小写和标点符号。这是一个简短且低效的程序来反转一个回文字符串。它调用了String方法charAt(i),该方法返回字符串中第 i 个字符,从 0 开始计数。

public class StringDemo {
    public static void main(String[] args) {
        String palindrome = "Dot saw I was Tod";
        int len = palindrome.length();
        char[] tempCharArray = new char[len];
        char[] charArray = new char[len];
        // put original string in an 
        // array of chars
        for (int i = 0; i < len; i++) {
            tempCharArray[i] = 
                palindrome.charAt(i);
        } 
        // reverse array of chars
        for (int j = 0; j < len; j++) {
            charArray[j] =
                tempCharArray[len - 1 - j];
        }
        String reversePalindrome =
            new String(charArray);
        System.out.println(reversePalindrome);
    }
}

运行程序会产生以下输出:

doT saw I was toD

为了实现字符串反转,程序必须将字符串转换为字符数组(第一个for循环),将数组反转为第二个数组(第二个for循环),然后再转换回字符串。String类包括一个方法,getChars(),用于将字符串或字符串的一部分转换为字符数组,以便我们可以用以下代码替换上面程序中的第一个for循环

palindrome.getChars(0, len, tempCharArray, 0);

字符串连接

String类包括一个用于连接两个字符串的方法:

string1.concat(string2); 

这将返回一个新字符串,其中在字符串 1 的末尾添加了字符串 2。

您还可以使用concat()方法与字符串字面值,如:

"My name is ".concat("Rumplestiltskin");

字符串更常用地使用+运算符连接,如

"Hello," + " world" + "!"

这导致

"Hello, world!"

+运算符广泛用于print语句中。例如:

String string1 = "saw I was ";
System.out.println("Dot " + string1 + "Tod");

打印

Dot saw I was Tod

这样的连接可以是任何对象的混合。对于每个不是String的对象,都会调用它的toString()方法将其转换为String


注意: Java 编程语言不允许文字字符串跨越多行出现在源文件中,因此您必须在多行字符串的每一行末尾使用+连接运算符。例如:

String quote = 
    "Now is the time for all good " +
    "men to come to the aid of their country.";

使用+连接运算符在行之间断开字符串,在print语句中再次非常常见。


创建格式化字符串

您已经看到了使用printf()format()方法打印带有格式化数字的输出。String类有一个等效的类方法format(),它返回一个String对象而不是一个PrintStream对象。

使用String的静态format()方法允许您创建一个格式化的字符串,您可以重复使用,而不是一次性的打印语句。例如,而不是

System.out.printf("The value of the float " +
                  "variable is %f, while " +
                  "the value of the " + 
                  "integer variable is %d, " +
                  "and the string is %s", 
                  floatVar, intVar, stringVar); 

你可以写

String fs;
fs = String.format("The value of the float " +
                   "variable is %f, while " +
                   "the value of the " + 
                   "integer variable is %d, " +
                   " and the string is %s",
                   floatVar, intVar, stringVar);
System.out.println(fs);

在数字和字符串之间进行转换

原文:docs.oracle.com/javase/tutorial/java/data/converting.html

将字符串转换为数字

经常情况下,程序最终会在字符串对象中包含数值数据—例如用户输入的值。

包装原始数值类型的Number子类(ByteIntegerDoubleFloatLongShort)每个都提供一个名为valueOf的类方法,将字符串转换为该类型的对象。以下是一个示例,ValueOfDemo,从命令行获取两个字符串,将它们转换为数字,并对这些值执行算术运算:

public class ValueOfDemo {
    public static void main(String[] args) {
        // this program requires two 
        // arguments on the command line 
        if (args.length == 2) {
            // convert strings to numbers
            float a = (Float.valueOf(args[0])).floatValue(); 
            float b = (Float.valueOf(args[1])).floatValue();
            // do some arithmetic
            System.out.println("a + b = " +
                               (a + b));
            System.out.println("a - b = " +
                               (a - b));
            System.out.println("a * b = " +
                               (a * b));
            System.out.println("a / b = " +
                               (a / b));
            System.out.println("a % b = " +
                               (a % b));
        } else {
            System.out.println("This program " +
                "requires two command-line arguments.");
        }
    }
}

当您使用4.587.2作为命令行参数时,程序的输出如下:

a + b = 91.7
a - b = -82.7
a * b = 392.4
a / b = 0.0516055
a % b = 4.5

**注意:**包装原始数值类型的每个Number子类还提供一个parseXXXX()方法(例如,parseFloat()),可用于将字符串转换为原始数值。由于返回的是原始类型而不是对象,因此parseFloat()方法比valueOf()方法更直接。例如,在ValueOfDemo程序中,我们可以使用:

float a = Float.parseFloat(args[0]);
float b = Float.parseFloat(args[1]);

Java 中文官方教程 2022 版(五)(4)https://developer.aliyun.com/article/1486297

相关文章
|
4天前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
21 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
9天前
|
存储 网络协议 Oracle
java教程
java教程【8月更文挑战第11天】
14 5
|
1月前
|
SQL 安全 Java
「滚雪球学Java」教程导航帖(更新2024.07.16)
《滚雪球学Spring Boot》是一个面向初学者的Spring Boot教程,旨在帮助读者快速入门Spring Boot开发。本专通过深入浅出的方式,将Spring Boot开发中的核心概念、基础知识、实战技巧等内容系统地讲解,同时还提供了大量实际的案例,让读者能够快速掌握实用的Spring Boot开发技能。本书的特点在于注重实践,通过实例学习的方式激发读者的学习兴趣和动力,并引导读者逐步掌握Spring Boot开发的实际应用。
42 1
「滚雪球学Java」教程导航帖(更新2024.07.16)
WXM
|
25天前
|
Oracle Java 关系型数据库
Java JDK下载安装及环境配置超详细图文教程
Java JDK下载安装及环境配置超详细图文教程
WXM
129 3
|
1月前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
44 2
|
1月前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
47 3
|
1月前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
135 5
|
1月前
|
Java 数据安全/隐私保护
Java无模版导出Excel 0基础教程
经常写数据导出到EXCEL,没有模板的情况下使用POI技术。以此作为记录,以后方便使用。 2 工具类 样式工具: 处理工具Java接口 水印工具 导出Excel工具类 3 测试代码 与实际复杂业务不同 在此我们只做模拟 Controller Service 4 导出测试 使用Postman进行接口测试,没接触过Postman的小伙伴可以看我这篇博客Postman导出excel文件保存为文件可以看到导出很成功,包括水印 sheet页名称自适应宽度。还有一些高亮……等功能可以直接搜索使用
Java无模版导出Excel 0基础教程
|
1月前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
43 6
|
1月前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
27 2