ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-09-05 16:30:28  阅读:148  来源: 互联网

标签:Java String 核心技术 笔记 int 数组 字符串 java 方法


  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实际上并没有多维数组只有一维数组,多维数组是数组的数组,也就是一维数组的元素为数组。

标签:Java,String,核心技术,笔记,int,数组,字符串,java,方法
来源: https://www.cnblogs.com/mysteryily/p/16658613.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有