java读书笔记
-
在java中,数据类型具有固定的大小,而且各种数据类型的取值范围也是固定的,例如int永远为32位的整数,和c++不同。
-
java区分大小写,注意是否有拼写错误(如,将main拼写成Main,就无法运行)
-
java使用的通用语法是:object.method(parameters),比如System.out(对象)调用函数println(可换行),print函数不换行。
-
3种注释方法:比c++多的一种是(/** ,*/)
-
整型值和布尔值之间不能进行相互转换。x=0不能转换为布尔值false,非0值也不是布尔值true。
-
声明一个变量之后,必须用赋值语句对变量进行显示初始化。
-
利用关键字final表示常量,表示这个变量只能被赋值一次(一般常量名使用全大写),在 Java 中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量,关键字 static fina设置一个类常量定义在main方法的外部。
-
当参与 / 运算的两个操作数都是整数时, 表示整数除法;否则, 表示浮点除法。 整数的求余操作(有时称为取模) 用 % 表示。例如,15/2 等于 7, 15%2 等于 1 , 15.0/2 等于 7.5。需要注意,整数被 0 除将会产生一个异常, 而浮点数被 0 除将会得到无穷大或 NaN 结果。
-
不必在数学方法名和常量名前添加前缀“ Math”, 只要在源文件的顶部加上下面这行代码就可以引用:
import static java.1ang.Math.*; -
负数%2=-1
-
&& 和 || 运算符是按照“ 短路” 方式来求值的: 如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。
-
Java 不使用逗号运算符。
-
Java 没有内置的字符串类型, 而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String。每个用双引号括起来的字符串都是 String类的一个实例。
String 类的 substring 方法可以从一个较大的字符串提取出一个子串 -
当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。
-
(任何一个 Java 对象都可以转换成字符串):
如果需要把多个字符串放在一起, 用一个定界符分隔,可以使用静态 join 方法:
String all = String.join(" / ", “S”, “M”, “L”, “XL”);
all is the string “S / H / L / XL” -
由于不能修改 Java 字符串中的字符, 所以在 Java 文档中将 String 类对象称为不可变字符串,比如字符串“ Hello” 永远包含字符 Hello 的代码单元序列, 而不能修改其中的任何一个字符。(但是如果要修改可以新建一个对象)
-
可以使用 equals 方法检测两个字符串是否相等。对于表达式: s.equals(t):如果字符串 s 与字符串 t 相等, 则返回 true ; 否则, 返回 false。要想检测两个字符串是否相等,而不区分大小写, 可以使用 equalsIgnoreCase 方法。
一定不要使用=运算符检测两个字符串是否相等! 这个运算符只能够确定两个字串
是否放置在同一个位置上。当然, 如果字符串放置在同一个位置上, 它们必然相等。 -
空串是一个 Java 对象, 有自己的串长度( 0 ) 和内容(空)不过, String 变量还可以存放一个特殊的值, 名为 null, 这表示目前没有任何对象与该变量关联。
首先要检查 str 不为 null, 如果在一个null 值上调用方法, 会出现错误。 -
使用StringBuilder类构建字符串,append(添加),toString方法等
-
要想通过控制台进行输入,首先需要构造Scanner对象:
Scanner in =new Scanner(System.in);
in.nextLine()(以空格作为分隔符读取),in.nextInt(),in.nextDouble() -
要想对文件进行读取,就需要一个用 File 对象构造一个 Scanner 对象,Scanner in = new Scanner(Paths.get(“myflle.txt”), “UTF-8”);
如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前再加一个额外的反斜杠: “ c:\mydirectory\myfile.txt ” 反而 要想写入文件, 就需要构造一个 PrintWriter 对象。在构造器中,只需要提供文件名:PrintWriter out = new Printlulriter(“myfile.txt”, “UTF-8”);
要记住一点:如果用一个不存在的文件构造一个 Scanner, 或者用一个不能被创建的文件名构造一个 PrintWriter,那么就会发生异常。Java 编译器认为这些异常比“ 被零除” 异常更严重。 -
块({ }),不能再嵌套的两个块中声明同名的变量。
-
如果在 for 语句内部定义一个变量, 这个变量就不能在循环体之外使用。 如果希望在 for 循环体之外使用循环计数器的最终值,就要确保这个变量在循环语句的前面且在外部声明!
-
• static Biglnteger valueOf(1 ong x)
返回值等于 x 的大整数。
• static BigDecimal valueOf(1 ong x)
• static BigDecimal valueOf(1 ong x ,int scale)
返回值为 X 或 x / 10scale 的一个大实数 -
创建一个数字数组时, 所有元素都初始化为 0。boolean 数组的元素会初始化为 false, 对象数组的元素则初始化为一个特殊值 null
*使用new运算创建数组:int[] a = new int[100]; -
for each 循环:**
for (variable : collection) statement**
for (int element : a)
System.out.println(element):
打印数组 a 的每一个元素,一个元素占一行。这个循环应该读作“ 循环 a 中的每一个元素”(for each element in a )
可以创建一个长度为 0 的数组:new elementType[0]
注意, 数组长度为 0 与 null 不同 -
如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用 Arrays 类的 copyOf方法:int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers , luckyNumbers .length); 第 2 个参数是新数组的长度。这个方法通常用来增加数组的大小:luckyNumbers = Arrays.copyOf(luckyNumbers , 2 * luckyNumbers.length);
如果数组元素是数值型,那么多余的元素将被赋值为 0 ; 如果数组元素是布尔型,则将赋值为 false。相反,如果长度小于原始数组的长度,则只拷贝最前面的数据元素。
要想对数值型数组进行排序, 可以使用 Arrays 类中的 sort 方法 -
Math.rand0m 方法将返回一个 0 到 1 之间(包含 0、不包含 1 ) 的随机浮点数。用n乘以这个浮点数 就可以得到从 0 到 n-l 之间的一个随机数。
int r = (int) (Math.random() * n); -
要想快速地打印一个二维数组的数据元素列表, 可以调用:
System.out.println(Arrays.deepToString(a));
输出格式为: [[16, B, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1]]
•static String toString(type[]a)
返回包含 a 中数据元素的字符串, 这些数据元素被放在括号内, 并用逗号分隔。参数: a 类型为 int、long、short、 char、 byte、boolean、float 或 double 的数组。 -
java中是数组的数组。
666:由于可以单独地存取数组的某一行, 所以可以让两行交换。
double [ ] temp = balances[i]:
balances[i] = balances[i + 1];
balances[i + 1] = temp; -
要想创建一个不规则的数组, 首先需要分配一个具有所含行数的数组。
int [][]odds = new int [NMAX + 1] [] ;
接下来, 分配这些行。
for (int n = 0; n <= NMAX ; n++)
odds [n] = new int[n + 1];
在分配了数组之后 ,没有超出边界就可以采用访问其中的元素了。
for (int n = 0; n < odds.length; n++)
for (int k = 0; k < odds [n] .length; k++)
{ // compute lotteryOdds
odds [n] [k] = lotteryOdds; } -
关于函数3
-
关于函数2
-
关于函数1
-
关于
-
. 在图 3-1 中有 6 个实心箭头,表示无信息丢失的转换,有 3 个虚箭头,表示可能有精度损失的转换。