core JAVA 01

重读《core JAVA》卷一,这里记录下读书笔记。

Chapter 3 JAVA的基本程序设计结构

一个简单的Java程序


  • System.out 对象 还有一个 print 方法,它在输出之后不换行。

数据类型


  • Java 是一种强类型语言,意味着 必须为每一个变量声明一种类型。

8种基本类型:

  • 4 种整型、2种浮点类型、char、boolean

    • enter image description here

      • 整型:

        • int:4 字节,-2147483648 ~ 2147483647;
        • short:2 字节, -32768 ~ 32767;
        • long:8 字节, -9223372036854775808 ~ 9223372036854775807;
        • byte:1 字节, -128 ~ 127;
        • 在 Java 中,整型的范围与运行 Java 代码的机器无关;
      • 浮点类型:

        • float:4字节,有效位数为 6 ~ 7 位;
        • double: 8字节,有效位数为 15 位;
        • 没有后缀 F 的浮点数值默认为 double 类型;

        • 三个特殊的特殊的浮点数值:

          • 正无穷大,例如:一个正整数除以 0;
          • 负无穷大;
          • NaN,例如:0/0, 或者负数的平方根;
      • char 类型:

        • Unicode 编码单元可以表示为 十六进制值,范围从 \u0000 到 \uffff;
        • UTF-16 采用不同长度的编码表示所有 Unicode 代码点;
        • code unit 、surrogate are;
        • 建议不要在程序中使用 char 类型,除非需要对 UTF-16进行操作;
      • boolean 类型:

        • 整型值和布尔值不能进行相互转换;
        • eg :if(x=0) 在 Java 中不能通过编译,因为整数表达式 x = 0 不能转换为布尔值;

变量


  • 逐一声明变量可以提高程序 的可读性;

  • 声明一个变量之后,必须用赋值语句对变量进行显示初始化。不要使用未被初始化 的变量;

  • 在 Java 中,如果希望某个常量可以在一个类中的多个方法中使用,通常将其设为 类常量,用 static final 设置,类常量的定义位于 main 方法的外部;

运算符


  • “>>>” 用 0 填充高位,”>>” 用符号位填充高位;

数值类型之间的转换

  • enter image description here

  • 实心箭头:无信息丢失;

  • 虚箭头:可能有信息损失;

强制类型转换:

  • 当调用 round 时,仍然需要使用强制类型转换:
  • doublex = 3.14; int x = (int)Math.round(x);

括号与运算符级别:

枚举类型:

  • 包括有限个命名的值;
  • enum Size {SMALL, MEDUIM, LARGE};
  • Size 类型的变量只能存储这个类型声明中给定的某个枚举值,或者 null 值

字符串


  • Java 字符串就是 Unicode 字符序列;

子串

  • s.substring(a, b);
  • substring 的第二个参数,是不想复制的第一个位置;
  • 字符串长度:b - a;

不可变字符串:

  • 优点:编译器可以让字符串共享。想象,字符串存放在公共发字符串池中,字符串变量指向池中相应的位置。如果复制一个字符串变量,原始字符串与复制的字符串 共享相同的字符;

检测字符串是否相等:

  • 使用 equals 方法: s,equals(t)"Hello".equals(myString)
  • 不能使用 == ,== 只能检测两个字符串是否放置在同一个位置上;

空串与 NULL 串:

  • 空串是是一个 Java 对象,有自己的串长度(0)和内容(空),检查:
    • if (str.length() == 0) 或者 if(str.equals(""))
  • String 变量还可以放置一个特殊的值 NULL。表示目前没有任何对象和变量 与该变量关联。 检查:

    • if(str == null)
  • 要检查一个字符串既不是 null 也不是空串:

    • if(str != null && str.length() != 0)
    • 首先要检查不为 null,在 null 值上调用方法会出错;

代码点与代码单元

  • s.charAt(i) 返回位置 i 的代码单元;

构建字符串

  • 如果需要用许多小段的字符串构建一个字符串:

    1. 构建一个空的字符串构建器:
      StringBuilder builder = new StringBuilder();

    2. 当每次需要添加一部分内容时,就调用 append 方法:
      builder.append(str);

    3. 在需要构建字符串时,调用 toString 方法,将可以得到一个 String 对象:
      String completedString = builder.toString();

  • StringBuffer 的效率低些,允许采用多线程方式添加或删除字符串;
  • 一般所有字符串都在一个多线程中编辑,采用 StringBuilder;