九章
1.在程序中,可能会因为各种程序员预料不到的异常出现,也可能由超过程序员可控范围的环境因素产生,如用户的坏数据,试图打开一个根本不存在的文件等,在java中,被称为异常。
2.抛出异常:通常,为了保证程序有效的运行,需要对抛出的异常进行相应的处理
3.捕捉异常:try,catch语句就是用来捕捉和处理异常的
4.finally语句:无论程序是否出现异常,都会执行finally语句,但是在以下四种情况不会执行finally语句块 1.在finally语句块中出现异常 2.在前面的代码块中使用了System.exit()退出程序 3.程序所在线程死亡 4.关闭cpu
5.java常见的异常类
6.用户只需要继承Exception类即可自定义异常类,大体可以分为以下几个步骤 1.创建自定义异常类 2.在方法中通过throw关键字抛出异常对象 3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throw关键字指明要抛出给方法调用者的异常,继续进行下一步操作
7.使用throws关键字抛出异常:throws关键字通常被用于声明方法时,用来指定可能抛出的异常,多个异常可使用逗号分隔
8.使用throw关键字抛出异常 : throw通常用于方法体中,并且抛出一个异常对象,程序在执行到throw语句立刻中断,它后面的语句不会执行
9.运行时异常:RuntimeException异常时程序运行中抛出的异常,java类库的每个包中都定义了异常类所有这些类都是Throwable类的子类,Throwable类派生了两个子类,分别是Exception类和Error类,Error类及其子类用来描述java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重,Exception类称为非致命性类,可以通过捕捉处理来使程序继续执行,Exception类又根据错误发生的原因分为 RuntimeException异常和除 RuntimeException异常之外的异常。
10.异常的使用原则:java异常强制用户考虑程序的强健性和安全性,异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理,编写代码处理某个方法可能出现异常时,可遵循以下几条原则
1.在当前方法声明中使用try-catch语句捕获异常
2.一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或者异常的子类
3.如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子类,不能抛出新异常
十章
1.String类:单个字符可以用char类型保存,多个字符组成的文本就需要保存在String对象中。String通常被称为字符串,一个String对象最多可以保存(2的32次方-1)个字节(占用4GB空间大小)的文本内容。
2.声明字符串:在java语言中,字符串必须包含在一对双引号(" ")之内。在Java中由双引号(" ")包围的都是字符串,不能作为其他数据类型来使用,如"1+2"的输出结果不可能为3可以通过以下语法格式来声明字符串变量:String str;
String:指定该变量为字符串类型 str:任意有效的标识符,表示字符串变量的名称
声明字符串变量s String s; 声明的字符串变量必须经过初始化才能使用,否则 编译器会报出"变量未被初始化错误"
3.创建字符串:在Java语言中,将字符串作为对象来处理,因此可以将创建其他类对象一样来创建字符串对象。 创建对象要使用类的构造方法。String类的常用构造方法如下:
1.String(char a[]) 2.String(char a[], int offset, int length) 3.String(char[] value)
4.连接字符串:对于已经声明的字符串,可以对其进行相应的操作,连接字符串就是字符操作中较简单的一种,可以对多个字符串进行连接,也可使字符串与其他数据进行连接。 使用"+"运算符可以实现连接多个字符串的功能。"+"运算符可以连接多个String对象并产生一个新的String对象。
连接其他数据类型:字符串也可同其他基本数据类型进行连接。如果将字符串同其他数据类型进行连接,会将其他数据类型的数据直接转换成字符串。 误区警告:只要"+"运算符的一个操作数是字符串,编译器就会将另一个操作数转换成字符串形式,所以应谨慎地将其他数据类型的数据与字符串相连,以免出现意想不到的结果
5.字符串作为对象,可通过相应方法获取字符串的有效信息,如获取某字符串的长度、某个索引位置的字符等。
6.获取字符串长度:使用String类的length()方法可获取声明变量的字符串对象的长度。语法如下:str.length(); 其中,str为字符串对象。
获取字符串长度,代码如下:
String str = "We are student"; int size = str.length();
上代码是将字符串str的长度赋值给int型变量size,此时变量size的值为15,这表示length()方法返回的字符串的长度(包括字符串的空格) 。
7.串查找:String类提供了两种查找字符串的方法,即indexOf()与lastIndexOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或字符串。indexOf()方法返回的时搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是字符或字符串最后一次出现的位置。
1.indexOf(String s)
该方法用于返回参数字符串s在指定字符串中首次出现的索引位置。当调用String类的indexOf'()方法时,会从当前字符串的开始位置搜索s的位置。如果没有检索到字符串s,该方法的返回值是-1,语法如下: str.indexOf(substr) str:任意字符串对象。 substr:要搜索的字符串。
查找字符a在字符串str中的索引位置,代码如下:
String str = "We are sudente"; int size = str.indexOf("a"); //变量size的值是3
在Java语言中,String对象是用数组表示的。字符串的下标是0~length()-1。因此,字符串"We are students"的下标
2.lastlndexOf(String str)
该方法用于返回指定字符串最后一次出现的索引位置。当调用String类的lastlndecOf()方法时,会从当前字符串的开始位置检索参数字符串str,并将最后一次出现str的索引位置返回。如果没有索引到字符串str,该方法返回-1。 语法如下:
str.lastIndexOf(substr)
str:任意字符串对象。 substr:要搜索的字符串。
说明:如果lastIndexOf()方法中的参数是空字符串""(注意g),则返回的结果与调用length()方法的返回结果相同。
8.获取指定索引位置的字符:使用charAt()方法可将指定索引处的字符返回。语法如下:
str.charAt(int index) str:任意字符串。 index:任意值,用于指定要返回字符串的下标。
9.字符串操作:Sstring类中包含了很多方法,允许程序员对字符串进行操作来满足实际的編程中的需要。
10.获取子字符串:通过String类的substring()方法可对字符串进行截取。substring()方法被两种不同的重载形式,来满足不同的需要。这些形式的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。
1.substring(int benginIndex)
该方法返回的是指定的索引位置开始截取直到该字符串结尾的子串。语法如下:
str.substring(int benginIndex)
其中,benginIndex指定从某一索引处开始截取字符串。
截取字符串,代码如下:
String str = "Hello World"; //定义字符串str
String substr = str.substring(3); //获取字符串,此时substr值为lo world
误区警示:在字符串中,空格占用一个索引位置。
2.substring(int benginIndex,int endIndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的子串。语法如下:
substring(int beginIndex,int endIndex)
beginIndex :开始截取子字符串的索引位置。
endIndex:子字符串在整个字符串中的结束位置。
11.去除空格:trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法如下:
str.trim() 其中,str为任意字符串对象。
12.字符替换:replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。语法如下:str.replace(CharSequence target,CharSequence replacement)
target:要替换的字符或字符串。 replacement:用于替换原来字符串的内容。
replace()方法返回的结果是一个新的字符串。如果字符或字符串oldChar没有出现在该对象表达式中的字符串序列中,则将原字符串返回。
13.判断字符串的开始和结尾:starts With()方法与ends With()方法分别用于判断是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型。
1.startsWith()方法
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串。语法如下:
str.startsWith(String prefix)
其中,prefix是指作前缀的字符串。
2.endsWith()方法
该方法用于判断当前字符串是否为给定堵塞子字符串结束。语法如下:
str.endsWith(String suffix) 其中,suffix是指作为前缀的字符串。
14.判断字符串是否相等:对字符串对象进行比较不能简单地使用比较运算符”==“,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍会返回false。使用比较运算符比较两个字符串。代码如下:
String tom = new String("I am a student");
String jerry = new String("I am a student");
boolean b = (tom == jerry):
此时,布尔型变量b的值为false,因为字符串是对象,tom、Jerry是引用,内存如下示:
tom ————I am a student
Jerry————I am a student
因此,要比较两个字符串内容是否相等,应使用equals()方法和equalsIgnoreCase()方法。
1.equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true。否则,返回false。语法如下:
str.equals(String otherstr)
其中,str、otherstr是要比较的两个字符串对象。
2.equalsIgnoreCase ()方法
使用equals()方法对字符串进行比较时是区分大小写的,equalsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。语法如下:
str.equalsIgnoreCase(String otherstr)
其中, str、otherstr是要比较的两个字符串对象。
通过下面的例子可以看出equals()方法和equalsIgnoreCase()方法的区别。
15.按字典顺序比较两个字符串:compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将String对象的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数:如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数:如果这两个字符串相等,则结果为0。语法如下:
str.compareTo(String otherstr)
其中, str、otherstr是要比较的两个字符串对象。
说明:compareTo()方法只有在equals(Object)方法返回true是才返回0.
16.字母大小写转换:String类的toLowerCase()方法可将字符串中的所有大写字母改写为小写字母,而toUpperCase()方法可将字符串中的所有小写字母改写为大写字母。
1.toLowerCase()方法
该方法将字符串中的所有大写字母转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回:否则将 返回一个新的字符串,将原字符串中每个大写字母都转换成小写,字符串长度不变。语法如下:str.toLowerCase() 其中,str是要进行转换的字符串。
2.toUpperCase()方法
该方法将字符串中的所有小写字母转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回:否则将返回一个新字符串,将原字符串中每个小写字母都转换成大写,字符串长度不变。语法如下:str.toUpperCase()其中, str是要进行转换的字符串。
说明:使用toLowerCase()方法和toUpperCase()方法进行大小写转换时,数字或其他非英文文字母类字符不受影响。
17.字符串分割 :使用split()方法可以是字符串按指定的分割字符或字符串进行分割,并将分割后的结果存放在字符串数组中。split()方法提供了以下两种字符串分割形式。
1.split(String sign)
该方法可根据给定的分割符对字符串进行拆分。语法如下:
str.split(String sign) 其中,sign为分割字符串的分割符,也可以的使用正则表达式。
说明:没有统一的对字符进行分割的符号。如果想定义多个分割符,可使用符号”|“。例如,”,=“表示分割符分别为”|“和”,=“。
2.split(String sign,int limit)
sign:分割字符串的分割符,也可以使用正则表达式。
limit:限制的分割次数。
18.格式化字符串:String 类的静态 format0方法用于创建格式化的字符串。format0方法有两种重载形式。
1. format(String format,Object...args)
该方法使用指定的格式字符串和参数返回--个格式化字符串,格式化后的新字符串使用本地默认的语言环境。语法如下:
str.format(String format,Object...args)
format:格式字符串。 args: 格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数自是可变的,可以为 0。
2. format(Local l,String format,Object...args)
该方法使用指定的语言环境、格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用其指定的语言环境。语法如下:
str.format(Local l,String format,Object...args)
3: 格式化过程中要应用的语言环境。如果1为 null,则不进行本地化。
format:格式字符串。 args: 格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为 0。
19.日期和时间字符串格式化:在应用程序设计中,经常需要显示日期和时间。如果想输出满意的日期和时间格式,一般需要编写大量的代码、经过各种算法才能实现。fomat0方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。
1.日期格式化
先来看一个例子。返回一个月中的天数,代码如下:
Date date = new Date(): //创建 Date 对象 date
String s = String.format("%te", date); //通过 format()方法对 date 进行格式化
2.时间格式化
使用 format0方法不仅可以完成日期的格式化,也可以实现时间的格式化。时间的格式化转换符要比日期的格式化转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒等。格式化时间的转换符
3.格式化常见的日期时间组合
格式化日期与时间组合的转换符定义了各种日期时间组合的格式,
1.常规类型格式化:常规类型格式化可应用于任何参数类型
2.使用正则表达式:正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“\\d”表示数字0~9中的任何一个,“\d”就是元字符。
说明:在正则表达式中,“.”代表任何一个字符,因此在正则表达式中如果想使用普通意义的点字符“.”,,必须使用转义字符“\”。
在正则表达式中,可以使用方括号括起若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。例如,reg ="[abc]4",这样字符串 a4、b4、c4 都是和正则表达式匹配的字符串。方括号元字符还可以为其他格式。如:
[^456]:代表 4、5、6之外的任何字符。
[a-r]:代表 a~r 中的任何一个字母。
[a-zA-Z]: 可表示任意一个英文字母。
[a-e[g-z]]: 代表 a~e或 g~z 中的任何一个字母 (并运算)
[a-o&&[defl:代表字母 d、e、f(交运算)。
[a-d&&[^bc]l: 代表字母 a、d (差运算)。
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如,“A*”代表 A 可在字符串中出现0次或多次。
3.正则表达式分析:通常情况下 E-mail 的格式为“x@x.com.cn”字符 X 表示任意的一个或多个字符,@为 E-mai地址中的特有符号,符号@后还有一个或多个字符,之后是字符“.com”,也可能后面还有类似“.cn”的标记。总结 E-mail 地址的这些特点,可以写正则表达式“\\w+@\\w+\\w2.3)w{2.3}”来匹配 E-mail 地址。字符集“\\ w”匹配任意字符符号“+”表示字符可以出现 1 次或多次,表达式“(\\.\\w{2,3})*”表示形如“.com”格式的字符串以出现 0 次或多次。而最后的表达式“\\.\\w{23}”用于匹配 E-mail 地址中的结尾字符,如“.cn”。
4.字符串生成器:创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的 String 实例,会在内存中创建新的字符串对象。如重复地对字符串进行修改,将极大地增加系统开销。而JDK 新增了可变的字符序列 StringBuilder类.大大提高了频繁增加字符串的效率。
5.使用 StringBuilder 类新创建的 StringBuilder 对象初始容量是16个字符,可以自行指定初始长度。如果附加的字符超过可容纳的长度,则StringBuilder 对象将自动增加长度以容纳被附加的字符。若要使用 StringBuilder 类最后输出字符串结果,可使用 toString0方法。利用 StringBuilder 类中的方法可动态地执行添加、删除和插入等字符串的编辑操作。该类的常用方法如下。
1.append()方法
该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如 int、boolean、char、String、double 或者另一个字符串生成器等。语法如下:
append(content)
其中,content 表示要追加到字符串生成器中的内容,可以是任何类型的数据或者其他对象
2.insert(int offset, arg)方法
该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入 int、flat、char 和 boolean 等基本数据类型的数据或其他对象。语法如下:
insert(int offset arg)
offset: 字符串生成器的位置。该参数必须大于等于 0,且小于等于此序列的长度。
arg: 将插入至字符串生成器的位置。该参数可以是任何数据类型的数据或其他对象向字符串生成器中指定的位置添加字符,代码如下:
StringBuilde bf=newStringBuilder("hello");//创建字符生成器
bf.insert(5,"world");//添加至字符生成器的位置及内容
System.out.println(bf.toString());//此时输出信息为 helloworld
3,delete(int start , int end)方法
移除此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end-1 处的字符。如果不存在这种字符,则一直到序列尾部。如果 start 等于 end,则不发生任何更改。语法如下:
delete(int start , int end)
start:将要删除的字符串的起点位置。
end:将要删除的字符串的终点位置。
删除指定位置的子字符串,代码如下:
StringBuilder bf = new StringBulder("StringBuilder");//创建字符串生成器
bf.delete(5,10)://删除的子字符串
System.out.println(bf.toString());//此时输出的信息为Strinder
说明:想要了解更多 StringBuilder 类的方法,可查询java.lang.StringBuilder 的 API说明
十一章
1.Java 是一种面向对象语言,但在 Java 中不能定义基本数据类型的对象,为了能将基本数据类型式为对象进行处理,Java 提出了包装类的概念,它主要是将基本数据类型封装在包装类中,如int 型的包装类 Integer、 boolcan 的类 Boolean 等,这样便可以把这些基本数据类型转换为对象进行处理。 说明: Java是可以直接处理基本数据类型的,但在有些情况下需要将其作为对象来处理,这时就需将其转换为包装类了,这里的包装类相当于基本数据类型与对象类型之间的一个桥梁。由于包装类和基本数据类型间的转换,引入了装箱和拆箱的概念:装箱就是将基本数据类型转换为包装类,而拆箱就是将包装类转换为基本数据类型,这里只需要简单了解这两个概念即可。
Integer类:java.lang 包中的 Integer 类、Byte 类、Short 类和 Long 类,分别将基本数据类型 int、byte、 short和long 封装成一个类,由于这些类都是 Number 类的子类,区别就是封装不同的数据类型,其包含的方法基本相同,所以本节以 Imteger 类为例讲解整数包装类。
2.Integer 类在对象中包装了一个基本数据类型 int 的值,该类的对象包含一个 int 类型的字段。此外,该类提供了多个方法,能在 int 类型和 String 类型之间瓦相转换,同时还提供了其他一些处理 int类型时非常有用的常量和方法。
3.Integer 类提供了以下4个常量:
MAX VALUE: 表示 int 类型可取的最大值,即 2的31次方-1。
MIN VALUE:表示 int 类型可取的最小值,即-2的31次方。
SIZE:用来以二进制补码形式表示 int 值的位数。
TYPE: 表示基本类型 int的 Class 实例。
4.Double 类:Double 类和 Float类是对 double、float 基本类型的封装,它们都是 Number 类的子类,都是对浮点数进行操作,所以常用方法基本相同,本节将对 Double 类进行讲解。对于 Float 类,可以参考 Double类的相关内容。
Double 类在对象中包装一个基本类型为 double 的值,每个 Double 类的对象都包含一个 double类型的字段。此外,该类还提供多个方法,可以将 double 类型转换为 String 类型,将 String 类型转换为 double类型,也提供了其他一些处理 double 类型时有用的常量和方法。
5.Double 类主要提供了以下常量:
MAX EXPONENT:返回it 值,表示有限 double 变量可能具有的最大指数。
MIN EXPONENT:返回 int 值,表示标准化 double 变量可能具有的最小指数。
NEGATIVE INFINITY:返回 double 值,表示保存 double 类型的负无穷大值的常量。
POSITIVE INFINITY:返回 double 值,表示保存 double 类型的正无穷大值的常量。
6.Boolean 类将基本类型为 boolean 的值包装在一个对象中。一个 Boolean 类型的对象只包含一个类型为 boolean 的字段。此外,此类还为 boolean 类型和 String 类型的相互转换提供了许多方法,并提供了处理 boolean 类型时非常有用的其他一些常量和方法。
7.Character 类:Character 类在对象中包装一个基本类型为 char 的值,该类提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转换成小写,反之亦然。Character 类提供了很多方法来完成对字符的操作,
8.Character 类提供了大量表示特定字符的常量,例如:
CONNECTOR PUNCTUATION:返回 bvte 型值,表示 Unicode 规范中的常规类别“Pc”。
UNASSIGNED:返回 byte 型值,表示 Unicode 规范中的常规类别“Cn”。
TITLECASE_LETTER: 返回 byte 型值,表示 Unicode 规范中的常规类别“Lt”。
说明:Character 类提供的常量有很多,详细列表可查看 Java API文档。
9.Number 类:前面介绍了 Java 中的包装类,对于数值型的包装类,它们有一个共同的父类一Number 类,该类是一个抽象类,它是 Bvte、Integer、Short、Long、Float 和 Double 类的父类,其子类必须提供将表示的数值转换为 bvteint、short、long、flat 和 double 的方法。例如,doubleValue0方法返回双精度浮点值,floatValue0方法返回单精度浮点值,
10.数字处理:在Java 语言中,提供了一个执行数学基本运算的 Math 类,该类包括常用的数学运算方法,如三角函数方法、指数函数方法、对数函数方法、平方根函数方法等一些常用数学函数方法。除此之外还提供了一些常用的数学常量,如 PI、E 等。本节将讲解 Math 类以及其中的一些常用方法。
在实际开发中,随机数的使用是很普遍的,所以要掌握生成随机数的操作。在 Java 中主要提供了两种生成随机数的方式,分别为调用 Math 类的 random0方法生成随机数和调用 Random 类生成各种据类型的随机数。
在Java 中,还提供了大数字的操作类,即 java,mathBigInteger 类与 javamath.BigDecimal类。这两个类用于高精度计算,其中 BigInteger 类是针对大整数的处理类,而 BigDecimal类则是针对大小数的处理类。
11.数字格式化:数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数字,数字格式化操作主要针对的是浮点型数据,包括 double 型和 float 型数据。在 Java 中使用 java.text.DecimalFormat 格式化数字,本节将着重讲解 DecimalFormat 类。在 Java 中,没有格式化的数据遵循以下原则:
如果数据绝对值大于 0.001 并且小于 10000000,使以常规小数形式表示.
如果数据绝对值小于 0.001 或者大于 10000000,使用科学记数法表示。
由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在 Java中,可以使用 DecimalFormat 类进行格式化操作。
DecimalFormat 类是 NumberFormat 的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况下,可以在实例化 DecimalFormat 对象时传递数字格式,也可以通过 DecimalFormat 类中applyPattemn0方法来实现数字格式化。
当格式化数字时,可在 DeimalFormat 类中使用一些特殊字符构成一个格式化模板,使数字按照一定的特殊字符规则进行匹配。表 11.7 列举了格式化模板中的特殊字符及其所代表的含义.
12.Math类:Math 类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大值、最小值,以及平均值函数方法。这些方法都被定义为static形式,所以在程序中应用比较简便。可以使用以下形式调用:
Math.数学方法
在 Math 类中,除函数方法外还存在一些常用数学常量,如 PI、E 等。这些数学常量作为 Math 类的成员变量出现,调用起来也很简单。可以使用如下形式调用:
Math.PI Math.E
Math 类中的常用数学运算方法较多,大致可以将其分为四大类别,分别为三角函数方法,指数函数方法,取整函数方法,以及取最大值、最小值和绝对值函数方法。
13.三角函数方法:Math 类中包含的三角函数方法如下:
public static double sin(double a): 返回角的三角正弦
public static double cos(double a): 返回角的三角余弦
public static double tan(double a): 返回角的三角正切
public static double asin(double a): 返回一个值的反正弦
public static double acos(double a):返回一个值的反余弦
public static double atan(double a): 返回一个值的反正切
public static double toRadians(double angdeg): 将角度转换为弧度
public static double toDegrees(double angrad): 将弧度转换为角度
以上每个方法的参数和返回值都是 double 型的。将这些方法的参数的值设置为 double 型是有一定道理的,参数以弧度代替角度来实现,其中 1°等于Π/180 弧度,所以180°可以使用Π弧度来表示。除了可以获取角的正弦、余弦、正切、反正弦、反余弦、反正切,Math 类还提供了角度和弧度相互转换的方法 toRadians()和 toDegrees()。但需要注意的是,角度与弧度的转换通常是不精确的。
14.指数函数方法:Math类中与指数相关的函数方法如下:
public static double exp(double a):用于获取e的a次方
public static double log(double a):用于获取自然对数,即取lna的值
public static double log10(double a):用于取底数为10的a的对数
public static double sqrt(double a):用于取a的平方根,其中a的值不能为负值
public static double cbrt(double a):用于取a的立方根
public static double pow(double a,double b):用于取a的b次方
指数运算包括求方根、取对数以及求n次方的运算。
15.在具体的问题中,取整操作使用也很普遍,所以Java在Math类中添加了数字取整法。Math类中包括以下几种取整方法:
public static double ceil(double a):返回大于等于参数的最小整数。
public static double floor(double a):返回小于等于参数的最小整数。
public static double rint(double a):返回与参数最接近的整数,如果存在两个同样接近的整数,则结果取偶数。
public static double round(double a):将参数加上0.5后返回与参数接近的整数。
public static double round(double a):将参数加上0.5后返回与参数接近的整数,然后强制转换为长整型。
注意:由于数1.0和数2.0距离数1.5都是0.5个单位长度,因此Math.rint(1.5)返回偶数2.0.
16.取最大值、最小值、绝对值函数方法
在程序中最常用的力法就是敢展大值、最小值、绝对值等,Math 类中包括的操作方法如下:
public static double max(double a.double b): 取a与b之间的最大值。
public static int min(int a,int b): 取a与b之间的最小值,参数为整型。
public static long min(long a,long b): 取a与b之间的最小值,参数为长整型。
public static float min(foat a,foat b): 取a与b之间的最小值,参数为单精度浮点
public static double min (double a,double b): 取a与b之间的最小值,参数为双精度浮点型
public static int abs(int a): 返回整型参数的绝对值。
public static long abs(long a): 返回长整型参数的绝对值。
public static float abs(floata): 返回单精度浮点型参数的绝对值。
public static double abs(double a): 返回双精度浮点型参数的绝对值。
17.Random类:Random 类是JDK 中的随机数生成器类,可以通过实例化一个 Random 对象创建一个随机数生成器,语法如下: Random r = new Random();
以这种方式实例化对象时,Java 编译器将以系统当前时间作为随机数生成器的种子。因为每时每刻的时间不可能相同,所以产生的随机数不同。但是如果运行速度太快,也会产生两个运行结果相同的随机数。
用户也可以在实例化 Random 类对象时,设置随机数生成器的种子。语法如下:
Random r = new Random(seedValue):
r: Random 类对象 seedValue: 随机数生成器的种子
Random 类中,提供了获取各种数据美型随机数的方法,下面列举几个常用的方法
public int nextInt():返回一个随机整数
public int nextint(int n): 返回大于等于0且小于n的随机整数
public long nextLong(): 返回一个随机长整型值
public boolean nextBoolean(): 返回一个随机布尔型值。
public float nextFloat(): 返回一个随机单精度浮点型值。
public double nextDouble(): 返回一个随机双精度浮点型值
public double nextGaussian(): 返回一个概率密度为高斯分布的双精度浮点型值。 注意: random()方法返回的值实际上是伪随机数,它通过复杂的运算而得到一系列的数。该方法是通过当前时间作为随机教生成器的参数,所以每次执行程序都会产生不同的随机数。
18.Biglnteger类:Biglnteger类的数学范围较Integer类的数字围要大得多。前文介绍过Ingteger类是int的包装类。int的最大值为2的31次方-1,如果 要计算更大的数字,使用Integer类就无法实现了,所以Java中提供了BigInteger类来处理更大的数字。BigInteger类支持任意精度的整数,也就是说,在运算中BigInteger类可以准确的表示任何大小的整数值而不会丢失信息。
在BigInteger类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。
使用BigInteger类,可以实例化一个BigInteger对象,并自动调用相应的构造函数。BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
例如,将2转换为BigInteger类型,可以使用以下语句进行初始化操作:
BigInteger twoInstance = new BigInteger("2");
注意:参数2的双引号不能省略,因为参数是以字符串的形式存在的。
一但创建了对象实例,就可以调用 Biglnteger 类中的一些方法进行运算操作,包括基本的数学运算和位运算以及一些取相反数、取绝对值等操作。下面列举了 BigInteger 类中常用的几种运算方法:
public BigInteger add(BigInteger val): 做加法运算。
public BigInteger subtract(BigInteger val): 做减法运算
public BigInteger multiply(BigInteger val): 做乘法运算
public BigInteger divide(BigInteger val): 做除法运算。
public BigInteger remainder(BigInteger val): 做取余操作。
public BigIntegerll divideAndRemainder(BigInteger val): 用数组返回余数和商,结果数组中第一
个值为商,第二个值为余数。
public BigInteger pow(int exponent): 进行取参数的 exponent 次方操作
public BigInteger negate0: 取相反数
public BigInteger shiftLeft(int n): 将数字左移n位,如果 n为负数,做右移操作
public BigInteger shiftRight(intn): 将数字右移n位,如果n为负数,做左移操作仅
public BigInteger and(BigInteger val); 做与操作。
public BigInteger or(BigInteger val): 做或操作
public int compareTo(BigInteger val): 做数字比较操作
public boolean equals(Object x): 当参数是 BigInteger 类型的数字并日数值与对象实例的数值相等时,返回 true。
public BigInteger min(BigInteger val): 返回较小的数值
public BigInteger max(BigInteger val): 返回较大的数值。 误区警示:在本实例中需要注意的是,divideAndRemainder0方法做除法操作,以数组的形式返回,数组中第一个值为做除法的商,第二个值为做除法的余数。
19.BigDecimal类:BigDecimal类和BigInteger类都能实现大数字的运算,不同的是BigDecimal类加入了小数概念。一般的float型和double型数据只可以用来做科学计算或工程计算,但由于商业计算中要求数字精度比较高,所以要用到BifDecimal类。BigDecimal类支持任何精度的定点数,可以用它来精确计算货币值,在BifDecimal类中, BigDecimal 类型的数字可以用来做超大的浮点数的运算,如加、减、乘、除等,但是在所有的运算中除法是最复杂的,因为在除不尽的情况下商小数点后的末位的处理是需要考虑的。
20.System 类:
System 类是JDK 中提供的系统类,该类是用 fial修饰的,所以不允许被继承。System 类提供了很多系统层面的操作方法,并且这些方法全部都是静态的。Svstem 类提供的较常用方法
21.控制台输出字符
System 类提供了标准输入、标准输出和错误输出流,也就是说,System 类提供了3 个静态对象:in、out 和err。本书中的代码多次使用了这些对象,最常见的就是 out 对象。在控制台输出字符串,输出的方法有两种,下面分别进行讲解。
1.不会自动换行的 print()方法
print0方法的语法如下;
System.out.print("Hellol");
此方法输出“Hello”文字,输出完毕后,光标会停留在“Hello”文字末尾,不会自动换行
2.可以自动换行的 printin()方法
printin()方法在print后面加上了“In”后缀 (就是line 的简写),语法如下:
System.out.println(“书籍是人类进步的阶梯!”);
此方法输出“书籍是人类进步的阶梯!”后会自动换行。光标停留在下一行的开头。
综上所述,Java 输出换行的方法有以下两种:
System.out.print("\n"); //利用换行符n实现换行
System.out.println(); //空参数即可实现换行
误区警告: 使用这两个输出方法时还要注意以下两点:
(1)“System.outprintln("\n")”会打印两个空行
(2)“System.out.print0();”无参数会报错
22.计时:System.currentTimeMillis0方法可以获取自 1970年1月1日零点至的毫秒数。虽然 Date日期类也有类似的方法,但代码会比 System 类多,所以 System.currentTimeMillis0方法是为获取当前毫秒数最常用的方法。因为该方法的返回值精确到毫秒,所以可以利用该方法来记录程序的运行时间。【例11.14】查看执行一万次字符串拼接所消耗的时间
23.Scanner 类:与C 语言不同,Java 从控制台中读出用户输入的值,用到的不是一行可以直接使用的代码,而是由一个叫 Scanner 的类来实现的。Scanner 英文直译就是扫描仪,它的用途就和现实生活的扫描仪一样,可以把数字化信息流转为人类可识别的文字。控制台输出内容用到了 System.out 就表示向控制台输出System.in 就表示从控制台输入,让 Scanner 扫描 Svstem.in 就可以获取用户输入的值了。
使用 Scanner 类首先要引入该类,其语法如下: import java.util.Scanner; //引入 Scanner类
误区警告:nextLine()方法扫描的内容是从第一个字符开始到换行符为止,而 next()、nextInt()等方法扫描的内容是从第一个字符开始到这段完整内容结束。
使用Scanner类扫描控制台的代码如下:
Scanner sc = new Scanner(System.in);
System.in 表示控制台输入流,在创建 Scanner 对象时把 System.in 作为参数,这样创建出的扫描器对象扫描的目标就是用户在控制台中输入的内容,再通过表 11.13 中列出的方法将用户输入的内容转为Java的数据类型,就可以对数据进行加工、显示了。
24.日期时间类:在程序开发中,经常需要处理日期时间,Java 中提供了专门的日期时间类来处理相应的问题,本节将对 Java 中的日期时间类进行详细讲解。
Date 类用于表示日期时间,使用该类表示时间需要使用其构造方法创建对象, 误区警告:(1)本节介绍的Date 类在java.util 包下,但java.sql包下也有一个 Date 类,不要将两者搞混(2)因为代码执行的时间不同,所以每次“获取的当前时间”得到的结果都不会一样。
25.日期时间格式化:如果在程序中直接输出 Date 对象,显示的是“Mon Feb 29 17:39:50CST2016”这种格式的日期时间,那么应该如何将其显示为“2016-02-29”或者“17:39:50”这样的日期时间格式呢? Java 中提供了DateFormat 类来实现类似的功能。
DateFormat 类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化。DateFormat 类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期时间Formatter,格式化风格主要包括 SHORT、MEDIUM、LONG和FULL4种:
SHORT:完全为数字,如 12.13.52或3:30pm。
MEDIUM:较长,如Jan 12,1952。
LONG:更长,如 January 12,1952 或 3:30:32pm。
FULL:完全指定,如Tuesday、April 12、1952AD或3:30:42pm PST。
另外,使用 DateFormat类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建 DateFormat 类的一个对象,由于它是抽象类,因此可以使用其静态方法getDateInstance()进行创建,语法如下:
DateFormat df = DateFormat.getDatelnstance();
使用 getDateInstance()方法获取的是所在国家或地区的标准日期格式。另外,DateFormat 类还提供了一些其他静态方法。例如,使用 getTimeInstance()方法可获取所在国家或地区的时间格式,使用getDateTimeInstance()方法可获取日期和时间格式。
26.Calendar 类:打开JavaAPI文档可以看到iavautilDate 类提供的大部分方法都已经过时了,因为 Date类在设计之初没有考虑到国际化,而且很多方法也不能满足用户需求,比如需要获取指定时间的年月日时分秒信息,或者想要对日期时间进行加减运算等复杂的操作,Date 类已经不能胜任,因此JDK提供了新的时间处理类--Calendar 日历类。
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH_DAY OF MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。另外,该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protected。
Calendar 提供了一个类方法 getInstance(),以获得此类型的一个通用的对象。Calendar 类的getInstance()方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化,其使用方法如下:
Calendar rightNow = Calendar.getlnstance();
说明:由于 Calendar 类是一个抽象类,不能用new创建实例对象,因此除了使用 getInstance()方法创说明建其对象,如果需要创建其对象,必须使用其子类,
27.Runtime 类:Runtime 类是JDK 提供的运行时类,该类为Java 程序提供了与当前运行环境相连接的一个通道Java 程序可以利用该类对当前的运行环境执行一些简单的操作。Runtime 类不能使用 new 关键字创实例,只能通过 RuntimegetRuntime()方法获取实例。
Runtime 类的常用方法如表 11.21所示,本节将重点讲解利用 Runtime 类执行本地命令和查看Java虚拟机所占内存这两个操作。
28.执行本地命令:本地命令指的是操作系统的命令。例如,在 Linux 系统下就表示 shell 命令,在 Windows 系统下就表示 cmd 命令。
Runtime 类提供exec0方法让Java 代码可以执行系统的命令,exec0方法有很多重载的形式,例如:
Process exec(String command)
Process exec(String[] cmdarray)
command:要执行的系统命令,字符串类型。
cmdarray:要执行的命令和相应的命令参数,字符串数组类型。
其实这两个重载方式很类似,如执行“javac hellojava”这行命令,使用第一种重载方式的代码如下:
Runtime.getRuntime().exec("javac hello.java");
使用第二种重载方式的代码如下:
String command[] = { "javac", "hello.java"} ;
Runtime.getRuntime().exec(command);
exec()方法会返回一个 Process 对象。Process 类是 Java 中进程类,该类是抽象类,不能使用new关键字创建实例。