Java核心技术卷1 1-3章个人笔记


  1. java的11个特性:简单性、面向对象、分布式、健壮性、安全性、体系结构中立、可移植性、解释性、高性能、多线程、多态性。

  2. 在使用命令行工具来来运行java程序时,先要用终端进入文件目录.然后使用java xxx.java;javac xxx即可。

  3. 关键字public private等称为访问修饰符(access modifier)

  4. 类名是以大写字母开头名词。如果名字由多个名词组成,每个单词的第一个字母都应该大写。这种命名法为骆驼命名法(camel case)。

  5. java中共有8种基本类型(primitive type),其中共有4种整型、2种浮点类型、一种字符类型char、和boolean类型。

  6. 整形有4种类型

    类型 存储需求
    int 4字节
    short 2字节
    long 8字节
    byte 1字节
  7. java程序必须保证在所有机器上都能够得到相同的运行结果,所以各种数据类型的取值范围必须固定。

  8. 长整型数值有一个L或l(如40000000000L)。十六进制有一个前缀0x或0X。八进制前缀为0,例如010代表8。加前缀0b或0B可以写二进制数。用下划线1_000_000只是为了让人容易读,编译器会去除。

    System.out.println(010);
    

    以上述程序为例,输出为8。

  9. java没有任何无符号(unsigned)形式的int,long,short,byte类型。

  10. Byte.unsignedInt(b)可以得到一个0-255的int值。Integer和Long类都提供了处理无符号除法和余数的方法。

  11. 浮点类型有两种

    类型 存储需求 取值范围
    float 4字节 有效位数6-7位
    double 8字节 有效位数15位

    float类型的数值有一个后缀F或f。没有后缀的浮点数总是默认为double类型。也可以在浮点数值后加后缀D或d。

  12. 16进制表示浮点数值时,0.125=2^-3可以表示位0x1.0p-3。在十六进制表示法中,使用p表示指数。尾数采用16进制,指数采用十进制。指数的基数为2。

  13. 所有的浮点数值都遵循IEEE754规范。常量Double.POSITIVE_INFINITY,DOUBLE.NEGATIVE_INFINITY,DOUBLE.NAN分别表示正无穷大、负无穷大、不是一个数字。判断一个特定值是否是Double.NAN时,不能用==。而是判断if Double.isNaN(x)。

  14. 浮点运算不适用于无法接受舍入误差的计算。这种计算应使用BigDicamal类。

  15. /u表示转义序列。

    转义序列 名称 unicode值
    /b 退格 /u0008
    /t 制表 /u0009
    /n 换行 /u000a
    /r 回车 /u000d
    双引号 /u0022
    单引号 /u0027
    / 反斜杠 /u005c
  16. unicode和char类型见书P33

  17. 使用关键字final指示常量,习惯上常量全大写。

  18. static final设置类常量

  19. 用public修饰类变量时,其他类的方法也可以使用这个常量。如Math.PI。

  20. 枚举类型enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE},Size s=Size.MEDIUM

  21. 使用strictfp关键字标记的方法必须使用严格的浮点计算来生成可生成的结果。

  22. 取余运算在计算商值向0方向舍弃小数位

  23. 取模运算在计算商值向负无穷方向舍弃小数位

  24. 比如a=4,b=-3时,a/b = -1.3333…

  25. 此时,取余c = -1,取模c = -2(%在不同语言中有不同的意义,比如Java或者c/c++中%为取余,python中%则为取模)

  26. java中的floorMod()为取模运算。

  27. 强制类型转换通过截断小数部分将浮点值转换为整型。对浮点数采用舍入运算需要使用Math.round()方法.round返回值为long类型

  28. 位运算符有&(and) |(or) ^(xor ) ~ (not). >> <<可以将位模式左移或右移。

  29. String类的subString可以从较大的字符串中提取一个子串。

  30. java允许使用+号连接两个字符串,当一个字符串和一个非字符串进行拼接时,后者会转换为字符串。

  31. 如果需要把多个字符串放在一起,可以使用静态join方法:

    String all=String.join("/","s","m","l","xl");//all is the string "s/m/l/xl" 
    
  32. repeat方法

    String repeated="Java".repeat(3);//repeated is "JavaJavaJava"
    
  33. Java字符串中的单一字符不能修改,所以在Java文档中将String类对象称其为时不可变的(immutable)。

  34. 使用equals方法来比较两个字符串是否相等,采用==来判断是不正确的。想检测两个字符串是否相等而不区分大小写可以使用equalsIgnoreCase方法。

  35. 空串和null串的区别在于:空串是一个已经实例化的对象,具有内存空间。null串是没有实例化的对象,不占内存空间。空串可以调用属性、方法,null串会报错(NullPointerException)。

  36. length方法返回的是采用UTF-16编码表示给定字符字符串所需要的代码单元数量。

  37. 得到码点数量可以调用codePointCount方法。

    int count=s.codePointCount(0,s.length());
    
  38. charAt方法返回位置n的代码单元。因为UTF-16编码部分字符需要两个代码单元,所以使用charAt时会出错。

  39. 使用codePointAt返回第i个码点。

  40. 要遍历一个字符串并且以此查看每一个码点

    int cp=sentence.codePointAt(i);
    if(Character.isSupplementaryCodePoint(cp)) i+=2;
    else i++;
    

    也可以将它转换为一个数组再完成遍历。

    int [] codePoints=str.codePoints().toArray();
    
  41. 使用StringBuilder类来解决字符串多次拼接。

    StringBuilder builder=new StringBuilder();
    //append方法用于添加内容
    builder.append(ch);//添加字符
    builder.append(str);//添加字符串
    String completeString=builder.toString();//最后得到完成的字符串
    
  42. 标准输入流System.in,标准输出流System.out。Scanner对象可关联标准输入流。

    Scanner in=new Scanner(System.in);
    
  43. nextLine方法用于读取一行输入。next用于读取一个单词。nextInt用于读取下一个整数。nextDouble用于读取下一个浮点数。

    String s1=in.nextLine();
    String s2=in.next();
    int x=in.nextInt();
    double y=in.nextDouble();
    
  44. Scanner类定义在java.util包内、要通过import导入包。

  45. 要读取密码时

    Console cons=System.console();
    String username=cons.readLine("User name: ");
    char[] passwd=cons.readPassword("Password: ");
    

    采用console对象来处理输入时,必须每次读取一行输入,没有能够读取单个单词或数值的方法。

  46. printf方法和c一样,可以格式化输出。转换符见P58。

  47. String.format方法可以创建一个格式化的字符串。转换符见P59,60。

  48. 读取一个文件时需要构造一个Scanner对象

    Scanner in=new Scanner(Path.of("xxxx"),StandardCharsets.UTF_8);//XXXX为文件地址。字符编码并不是普遍适用,要具体看文本文件。
    
  49. 要写入一个文件需要构造一个PrintWriter对象。

    PrintWriter out=new PrintWriter("xxxx",StandardCharsets)
    

    如果文件不存在,创建该文件。

  50. switch case标签可以是类型为char,byte,short,int的常量表达式,可以是枚举常量,可以是字符串字面量。

  51. 带标签的break语句可以跳出多重嵌套的循环语句,普通break语句只能跳出一种循环。

    read_data:
    while(...)
    {
    	...
    	for(...)
    	{
    		if(..)
    		{
    			break read data;//直接跳出read_data循环
    		}
    	}
    }
    

    标签可以应用到任何语句,包括if语句和块语句。

  52. continue语句将控制转移到最内层循环的首部。简单来说就是跳过最内层循环的一次循环continue后的代码

  53. 使用BigInteger和BigDecimal这两个类可以处理包含任意长度数字序列的数组。

  54. 使用valueof方法可以将普通的数转换为大数

    BigInteger a=BigInteger.valueof(100);
    BigInteger b=new BigInteger("312313516534654564531321564684");//对于更大的数,可以使用带字符串参数的构造器
    

    BigInteger.ZERO,BigInteger.ONE等为一些常量。

  55. 使用add,multiply,divide表示+,*,/。

  56. int [] a;只是声明一个变量,要初始化需要使用new操作符。

  57. for each循环格式为for (variable:collection) statement。例如

    for(int element:a){}
    
  58. 调用Arrays.toString(a)可以返回一个包含数组元素的字符串,这些元素包围在中括号内,并用逗号分隔。

  59. 使用Arrays类的CopyOf方法可以将一个数组的所有值拷贝到一个新的数组中去。

    int []copiedLuckyNumbers=Arrays.copyOf(luckyNumbers,luckyNumbers.length)
    //第二个参数是新数组的长度
    luckyNumbers=Arrays.copyOf(luckyNumbers,2*luckyNumbers.length)
    //该方法可用来增加数组的大小
    
  60. main方法接受一个字符串数组args,也就是在命令行上的指定的参数。

  61. Arrays.sort(a)可以对数值型数组进行排序。排序方法为优化的快速排序算法。

  62. for each循环语句不能自动处理二维数组的每一个元素,需要使用两个嵌套的循环

    for(double[] row:a)
    	for(double value:row)
    		do something with value
    

    使用Arrays.deepToString(a)可以快速打印一个二维数组。

  63. java实际上并没有多维数组只有一维数组,多维数组是数组的数组,也就是一维数组的元素为数组。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/287298.html

(0)
上一篇 2022年9月5日 16:35
下一篇 2022年9月5日 16:51

相关推荐

发表回复

登录后才能评论