JAVA核心技术卷1 Day2

  1. 每个变量都有一个类型(type)。

  2. 变量必须以字母开头,以字母和数字组成,不能有空格,不能用保留字作变量名,大小写是敏感的,变量长度一般没有限制。

  3. 可以有int i j;的写法,但是不提倡,逐行书写可以提高可读性,有习惯把变量名写为类型名的变形。

  4. 变量必须初始化,可以定义和初始化同时进行如int vacationDays = 12.

  5. 可在程序中任意地方声明变量,尽可能在靠近变量第一次使用的地方声明变量。(JAVA中不区分变量的声明与定义)。

  6. JAVA中用final指示常量,即表示该变量只能被赋值一次,一般常量名全大写。

  7. JAVA中要在一个类的不同方法中使用同一常量,则要在main之外用static final设置一个类常量。

  8. ±*/% /的时候,操作数是整数时用整数除法or表示浮点除法,整数被0除会产生一个异常,浮点数被0除会得到无穷大或NaN;%称求余或取模。

  9. Math类,求一个数的平方根可用sqrt方法,求幂运算可用pow方法,pow中两个参数以及返回值都是double型。

  10. 常用的三角函数;指数函数以及自然对数和以10为底的对数;e和π的近似值。

  11. 数值的合法转换:

  12. JAVA核心技术卷1 Day2

    double float long int

  13. 强制类型转换 cast

    double x = 9.997;

    int nx = (int) x;

    这样是截断小数点数字。

    若要得到最相近的整数则要调用Math.round方法

    double x = 9.997;

    int nx = (int) Math.round(x);

  14. 强制类型转换有丢失信息甚至被截断为一个完全不同的值的风险。

  15. 二元运算符+= etc ,若是x是int,x += 3.5是合法的,会把x设置成(int)(x+3.5)

  16. ++n n++ 都会使n加一,前缀先加再使用,后缀先使用再加;不建议再表达式之中使用++ --,不易阅读且会有bug的风险。

  17. == != < > <= >= && || !

    && || 会有判断第一个之后不用判断第二个的情况(短路)

  18. 三目运算符 ? :

    condition ? expression1 : expression2

    x<y ? x : y

  19. 位运算符 ?????

  20. 优先级 P44

  21. 枚举类型。

  22. 字符串 预定义类String 每个用双引号括起来的字符串都是String的一个实例

    子串 可用substring从一个较大的字符串中提取出一个子串

    eg:

    String greeting = “Hello”;

    String s = greeting.subsring(0 , 3);

    substring中的第二个参数表示第一个不取的位置,用substring可以很方便的得到取出的子串的长度

    如s.substring(a , b)的长度为b-a

  23. 用+连接两个字符串 (简单的拼接,中间没有空格)

    字符串与非字符串的值进行拼接时,后者被转换成字符串。

  24. JAVA中的Sring类对象是不可变字符串,要改变字符串可以用substring和+连用。
    JAVA中的思想是共享提升的效率远大于提取拼接所降低的效率。

  25. equals 检测字符串是否相等。
    equals允许字符串变量和字符串自变量进行比较。

    “Hello”.equals(greeting)

    若要忽略两字符串的大小写,则用equalsIgnoreCase

    千万别用==检测两字符串是否相等

  26. 空字符串和Null串是不一样的。

  27. 代码点/字符编码(找blog看)。

  28. 读取输入需要先构造一个Scanner对象且与System.in关联。

    Scanner in = new Scanner(System.in)

    Scanner类有各种方法实现输入操作。

    用Console实现从控制台读取一个密码。

  29. System.out.printfln System.out.print System.out.printf

  30. 文件的输入与输出。

  31. 控制流程即判断,循环,switch。(JAVA中没有goto,但有break)

  32. 块(block)即复合语句,是由一堆大括号括起来的若干条简单的Java语句,决定了变量的作用域,一个块可以嵌套在另一个块之中。(不能再嵌套的块中声明同名变量,这与C++不同)

  33. 条件语句 if (condition) statement

    期望在条件成真时执行多条语句,即用到块语句(block statement),即用{}。

    if (condition1) statement else condition2

    else也自动和最近的else配对。

    if … else if…交替出现的使用。

    习惯把{}单独写一行以对齐。(个人习惯)

  34. while (condition) statement

    do statement while(condition)

    while可能一次不做 do while必做一次

  35. P67两端代码未手敲。

  36. for循环(确定循环) 是支持迭代的通用结构,利用每次迭代之后更新的计数器或变量来控制迭代次数。

    for循环第一部分用来对变量进行初始化,第二部分为每次迭代之后要检测的循环条件,第三部分指示如何更新计数器。

    不成文的规定即三个部分应该对同一变量进行操作。

    在for语句内部定义的变量的作用域仅为该for语句的循环体,不同for语句可定义同名的变量。

    for循环与while循环可相互改写。

  37. P71未手敲。

  38. 多重选择语句switch语句(与C完全一样)。

    特别注意的即为switch case语句为直通式(fallthrough)行为,即遇到break才跳出,于是不常使用switch语句。若无对应的case则执行default子句。

    若要用switch语句,可在编译代码时加上-Xlint:fallthrough以达到若每个case之后少一个break,编译器就会给出一个警告。

    case标签可以是char、byte、short、int的变量表达式,也可是枚举常量和字符串字面量。

  39. 中断控制流程语句break

    JAVA把goto作为保留字,但不打算在语言中使用它,而增加了带标签的break语句来实现这种程序设计风格。

    不带标签的break即与switch case中的break一样表示跳出当前循环。

    带标签的break,break放在要跳出的循环体名称之前,可跳出多重循环。

    只能跳出语句块不能跳入语句块。

    一个需要区分的是continue语句,表示跳出当前这次循环而回到循环开头继续这个循环。

  40. 当整型和浮点型的精度无法满足要求时,可用java.math包中的两类:BigInteger和BigDecimal来分别处理任意长度的整数和浮点数。

    用valueOf方法可把普通的数值转换成大数值:

    BigInteger a = BigInteger.valueOf(100)

    大数值不能用+ *处理,而只能用大数值类红的add和multiply方法

    BigInteger c = a.add(b)//c = a + b

    BigInteger d = c.multiply(b.add(Biginteger.valueOf(2)))//d = c * (b + 2)

  41. P77代码未手敲。

  42. 数组是一种数据结构,用以存放同一类型值的集合。

    Java中习惯用int[] a这种形式来声明一个数组。

    使用new运算来创建数组 int [] a = new int[100]

    数组一旦创建就不可改变其大小,只能改变其元素。如果要经常在运行过程中扩展数组的大小,要用到另一种数据结构——数组列表(array list)。

    数组从0开始计数。

    用for循环初始化数组,初始化为0,boolean数组初始化为false,对象数组的元素初始化为null,可用for循环将其也初始化为0

    for ( i=0 ; i<10 ; i ++)

    names[i] = " ";

    可用array.length来获得数组中的元素个数

  43. for each循环

    增强的for循环,不必为下标值而分心,会遍历每个元素。

  44. 创建数组对象且同时赋予初始值的简化书写形式

    int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };

    枚举法定义数组时数组的大小即为初始值的个数。

    Java中允许数组的长度为0.长度为0不是null。

    new int [n] 创造一个长度为n的数组。

  45. Java中允许把一个数组的一个变量拷贝给另一个数组的一个变量

    int[] luckyNumbers = smallPrimes;

    luckyNumbers[5] = 12;

    若要把一个数组的所有值拷贝到一个数组上去,则要用Array类的copyOf方法

    int[] copiedLuckyNumbers = Array.copyOf(luckyNumbers, luckyNumbers.length);

    常用此方法来增加数组的大小:

    luckyNumbers = Array.copyOf(luckyNumbers, 2 * luckyNumbers.length)

    若拷贝的数组长度长于原始数组,则多余的赋0,布尔值则多余的赋false,若短,则只拷贝前面的数据元素。

  46. 数组排序的程序。

    创建两个数组,数组赋值,得到一个0到n-1的随机数,抽取,确保不会重复抽,输出结果。

    P83未手打。

  47. 多维数组

    要访问一个二维数组的所有元素,需要用嵌套的for循环来完成。

    P87未手打。

  48. 不规则数组

    实际上内存上没有多维数组的说法,只是数组的数组而已,故可以定义不规则的数组,即每行有着不同的长度。P89未手打。