Java 中 Math.round的用法:
1、参数的小数点后第一位<5,运算结果为参数整数部分。
2、参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。
3、参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。
Java 中 Math.round的用法:
1、参数的小数点后第一位<5,运算结果为参数整数部分。
2、参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。
3、参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。
左除
右除法
非奇异性矩阵是什么意思
注意不等于的关系运算符是~=
成立返回1,不成立返回0
1 | % 总结:Matlab的运算都是在矩阵意义下进行的,单个数据的算术运算只是矩阵运算的一种特例 |
要点提示:异常是从方法抛出的。方法的调用者可以捕获以及处理该异常
java可以让一个方法可以抛出一个异常,该异常可以被调用者捕获和处理。
(书中的例子)在这种情况下,抛出的值为new ArithmeticException(“Divisor cannot be zero”),称为一个异常。异常就是一个从异常类创建的对象。在这种情况下,异常类就是java.lang.ArithmeticException.
构造方法ArithmeticException(str)被调用用以构建一个异常,其中str是描述异常的消息。
当异常被抛出时,正常的执行流程就会被中断。就它的名字所提示的,“抛出异常”就是将异常从一个地方传递到另一个地方。调用方法的语句包含在一个try块和一个catch块中。try块包含了正常情况下执行的代码。异常被catch块所捕获。catch块中的代码执行以处理异常。之后,catch块之后的语句被执行。
throw语句类似于方法的调用,但不同于调用方法的是,它调用的是catch块。从某种意义上讲,catch块就像带参数的方法定义,这些参数匹配抛出的值的类型。但是,它不像方法,在执行catch块之后,程序控制不返回到throw语句;而是执行catch块之后的下一条语句。
catch块的头部
catch(xxxException ex)
标识符ex的作用就像是方法中的参数。所以这个参数称为catch块的参数。ex之前的类型指定了catch块可以捕获的异常类型。一旦捕获该异常,就能从catch块体中的参数访问这个抛出的值。
try-throw-catch块的模版如下
一个异常可能是通过try块中的trow语句直接抛出,或者调用一个可能会抛出异常的方法而抛出
要点提示:异常使对象,而对象都采用类来定义。异常的根类是java.lang.Throwable。
注意: 类名Error、Exception和RuntimeException有时候容易引起混淆。它们都是异常,这里讨论的错误都是发生在运行时。
Throwable类是所有异常的根。所有的java异常都直接或间接地继承自Throwable。可以通过继承
Exception或者Exception的子类来创建自己的异常类。
异常类分为三种主要类型:
大多数情况下,免检异常都会反映出程序设计上不可恢复的逻辑错误。
免检异常可能在程序的任何一个地方出现。
为避免过多地使用try-catch模块,java语言不强制要求程序猿编写代码捕获或声明免检异常。
要点提示: 异常的处理器是通过当前的方法开始,沿着方法调用链,按照异常的反向传播方向找到的。
java的异常处理模型基于三种操作: 声明一个异常(declaring an exception)、抛出一个异常(throw an exception)和捕获一个异常(catching a exception)
在java中,当前执行的语句必属于某个方法。Java解释器调用main方法开始执行一个程序。
每个方法都必须声明它可能抛出的必检异常的类型,因此java不要求在方法显式声明Error和RuntimeException。但是,方法要抛出的其他异常都必须在方法头中显式声明,这样,方法的调用者会被告知有异常。
在方法中声明一个异常,要在方法头中使用关键字throws。
public void myMethod() throws IOException
如果方法可能会抛出多个异常,就可以在关键字throws之后添加一个用逗号分隔的异常列表。
注意: 如果方法没有在父类中声明异常,那么就不能在子类中对其进行继承来声明异常。
检测到错误的程序可以创建一个合适的异常类型的i实例并抛出它,这就称为一个异常。
示例:
注意: 通常,Java API中的每个异常至少有两个构造方法: 一个无参构造方法和一个带有描述这个异常的String参数的构造方法。这个参数就叫做异常消息(额exception message),它可以用getMessage()获取。
提示: * 声明异常的关键字是throws, 抛出异常的关键字是throw *
如果在执行try块的过程中没有出现异常,则跳过catch子句。
异常处理器: try块中的某条语句抛出异常,java就会跳过try中剩余的语句,然后开始查找处理这个异常的代码的过程。处理这个异常的代码称为异常处理器。
寻找处理器的过程称为捕获一个异常。
下面截图是详细说明
注意: 一个通用的父类可以派生出各种异常类。如果一个catch块可以捕获一个父类的异常对象,它就能捕获那个父类的所有子类的异常对象。
异常对象包含过于异常的有价值的信息。
Throwable类
stackTraceElement[] 中的每个元素表示一个方法调用
stackTraceElement[] 数组中的元素有下列的方法可以调用:
不管是否在方法头中声明,每个方法都能抛出RuntimeException异常(免检异常)
注意: 在异常事件中,执行仍然会继续。如果处理器没有捕获到这个异常,程序会突然中断。
如果方法抛出RuntimeException和Error之外的异常,那么此方法就必须在try-catch块内调用
要点提示: 无论异常是否产生,finally子句总是会被执行的。
finally子句的语法:
在任何情况下,finally块中的代码都会被执行,不论try块中是否出现异常或者是否被捕获。
要点提示: 和其他异常一起抛出一个异常
catch块重新抛出原始的异常。有时候,可能需要同原始异常一起抛出一个新异常(带有附加信息),这称为链式异常。
似乎是先抛出新异常,然后再抛出原始异常。
要点提示: 可以通过能够派生出java.lang.Exception 类来定义个自定义异常类
java提供相当多的异常类,尽量不要使用它们而不要创建自己的异常类。
当遇到不能用预定义的异常类恰当描述问题,那么就可以通过派生Exception类或其他子类。
提示:
Java API中的大多数异常都包含两个构造方法:一个无参构造方法和一个带消息参数的构造方法。
要创建一个InvalidRadiusException类,必须传递一个半径。
本章介绍如何使用File类获取文件/目录的属性以及删除和重命名文件/目录,以及创建目录。
要点提示: File类包含了获得一个文件/目录的属性,以及对文件/目录进行改名和删除的方法。
存储在程序中的数据是暂时的,当程序终止时它们就会丢失。为了能够永久地保存程序中创建的数据,需要将它们存储到磁盘或其他永久存储设备的文件中。
在文件系统中,每个文件都存放在一个目录中。
绝对文件是依赖机器的。
File类意图提供了一种抽象,这种抽象是指以不依赖机器的方式来处理很多依赖于机器的文件和路径名的复杂性。
File类包含许多获取文件属性的方法,以及重命名和删除文件和目录的方法。
但是,File类不包含读写文件内容的方法。
File类是文件名及其目录路径的一个包装类。
可以用File类的isDirectory()方法来判断这个对象是否表示一个目录,还可以使用isFile()方法来判断这个对象是否表示一个文件名。
警告:在Windows中目录的分隔符是反斜杠\,但是在Java中,反斜杠是一个特殊字符,应该写成\的形式。
注意:构建一个File实例并不会在机器上创建一个文件。不管文件是否存在,都可以创建任意文件名的File实例。可以调用File实例上的exists()方法来判断这个文件是否存在。
在程序中,不要直接使用绝对文件名,因为这样可能会使程序不能在其他平台上工作。
应该使用于当前目录相关的文件名。
斜杠/是Java的目录分隔符,这点和UNIX是一样的。
要点提示: 使用Scanner类从文件中读取文本数据,使用PrintWriter类向文本文件输入数据。
File对象封装了文件或路径的属性,但是它既不包括创建文件的方法,也不包括从/向文件读/写数据(称为数据输入输出,简称I/O)的方法。
为了完成I/O操作,需要使用恰当的I/O类创建对象。这些对象包含从/向文件读/写数据的方法。
文本文件本质上是存储在磁盘上的字符。
java.io.PrintWriter类可用来创建一个文本文件写入数据。首先,必须为一个文本文件创建一个PrintWriter对象。
PrintWriter对象上有print、println和printf方法,可以使用它们向文件写入数据。
Java强制要求编写代码来处理I/O异常。
System.out.println();是控制台的标准Java对象。
必须使用close()方法关闭文件。如果没有调用该方法,数据就不能正确地保存在文件中。
程序员经常会忘记关闭文件。JDK 7 提供了下面的新的try-with-resources 语法来自动关闭文件。
关键字try后声明和创建了一个资源。
注意: 资源放在括号中。资源必须是AutoCloseable的子类型,比如PrintWriter,具有一个close方法。
资源的声明和创建必须是在同一行语句中,可以在括号中进行多个资源的声明和创建。紧接着就是资源声明的块中的语句使用资源。快结束后,资源的close()方法自动调用以关闭资源。使用try-with-resources不仅可以避免错误,还可以简化代码。
Scanner类用来从控制台读取字符串和基本数据类型数值。
Scanner可以将输入分为由空白字符串分隔的标记。为了能从键盘读取,需要为System.in创建一个Scanner。
为了从文件中读取,为文件创建一个Scanner,如下
Scanner input = new Scanner(new File(filename));
如同给出了Scanner中常用的方法。
从文件中读取数据使没有必要管斌输入文件,但这样做是一种释放文件占用的资源的好方法。可以使用try-with-resources语法重写该程序。
scanner中默认分隔符是空格,可以将分隔符理解为标记。
nextInt()等方法都被称为标记读取方法。因为它们会读取用分隔符分隔开的标记。默认情况下,分隔符是空格。
可以使用useDelimiter(String regex)方法设置新的分隔模式。
输入方法的工作原理:
一个标记方法首先跳过任意分隔符,然后读取一个以分隔符结束的标记。然后,对于nextByte,nextShort等,这个标记就分别被自动地转换为一个byte,short等类型。对于next()方法而言是无须做转换的。如果标记和期望的类型不匹配,就会抛出一个运行异常java.util.InputMismathcException.
方法next()和nextLine()都会读取一个字符串。前者读取一个由分隔符分隔的字符串,但是后者会读取一个以换行符结束的行。
注意:行分隔符是由系统定义的,在WIndows平台上是\r\n, 而在UNIX上是\n。
为了得到特定平台上的行分隔符,使用
String lineSeparator = System.getProperty(“line.separator”);
如果从键盘输入,每行就以回车键(Enter key)结束,它对应\n字符。
有关nextLine()的问题
可以使用Scanner类从文件或者键盘读取数据。也可以使用Scanner类从一个字符串扫描数据。
要点提示: 如同从电脑中的文件读取数据一样,也可以从Web上的文件中读取数据
URL全名:Uniform Resource Locator, 统一资源定位器
为了读取一个文件,首先要使用java.net.URL类的构造方法,为该文件创建一个URL对象。
要让URL类来识别一个有效的URL,前缀http:// 是必须的。
创建一个URL对象后,可以使用URL类中定义的openStream()方法来打开输入流和用输入流创建如下Scanner对象。
Scanner input = new Scanner(url.openStream());
(这里的意思是input就是给定url的内容)
要点提示: 学习开发一个程序,可以跟随超链接来遍历Web。
World Wide Web,缩写为WWW、W3或者Web,是一个因特网上的相互链接的超文本文档。使用Web浏览器,可以查看一个文档,以及跟随超链接查看其他文档。
Web爬虫,可以跟随超链接来自动遍历Web的程序。
客户程序从一个Web服务器上获取文件。
程序的算法如下:
1 | // 2.22 字符串插入、删除、替换 |
1 | // 2.21 |
1 | // 字符串比较 |
1 | % 双精度(double):8字节;单精度(single):4字节 |