美文网首页
Java核心技术 卷I(第10版)读书笔记

Java核心技术 卷I(第10版)读书笔记

作者: 一份土豆 | 来源:发表于2019-02-14 17:00 被阅读0次

    小豆工作以来发现自己基础不扎实,利用空余时间再次阅读该书,目的为了扎实巩固基础,之前读过却未作笔记,对该书毫无记忆,所以决定边读边总结,持续更新。

    第3章 Java的基本程序设计结构

    1.命名:
    类名是以大写字母开头,可以跟字母和数字的任意组合,不能使用java保留字段作为类名,多个单词应该采用骆驼命名法(如:FirstSample)。
    变量名是以字母开头,并由字母或数字构成的序列,大小写敏感,如果想要知道哪些Unicode字符属于Java中的“字母”,可以使用Character类的isJavaldentifierStart 和 isJavaldentifierPart 方法来检查。

    2.数据类型:java是强语言类型,必须为每个变量声明一种类型,共有8种基本类型:4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型char,和1种用于表示真值的boolean类型,布尔类型结果为false/true,用来判断逻辑条件,不能和整型值相互转换:


    java整型.png
    浮点类型.png

    注意:一个正整数除以0的结果是正无穷大,计算0/0或者负数的平方根结果是NaN(不是一个数字),所有“非数值”的值都认为是不相同的,却可以使用Double.isNaN方法

    if(Double.isNaN(x)) // check whether x is "not a number"

    浮点数值不适合用于无法接受舍入误差的金融计算,如果在数值计算中不允许有任何的舍入误差,应该使用BigDecimal类

    3.变量:
    变量初始化:一行中声明一个变量可以提高程序的可读性,变量的声明尽可能靠近变量第一次使用的地方,是一种良好的程序编写风格。
    常量:关键字final,只能够被赋值一次,使用全大写,若希望某个常量在一个类中的多个方法使用,可以用关键词static final设置一个类常量。

    4.运算符:
    注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。

    类型转换:实线为无信息丢失转换,虚线可能有精度损失的转换


    数值类型之间的合法转换.png

    强制类型转换:会导致信息丢失

    double x = 9.99;
    int nx = (int) x;
    int nxx = (int)Math.round(x);//如要得到最接近的值,需要使用Math.round():,该方法返回long类型,强转为int
    nx = 9;
    nxx = 10;

    自增自减运算符:尽量避免使用++运算符,会带来代码的疑惑。

    int m =7;
    int n = 7;
    int a = ++m;// a is 8,m is 8
    int b = n++; // b is 7,n is 8

    关系运算符和位运算符:

    关系运算符,&& || 遵守“短路”规则
    位运算符,>>>运算符会用0填充高位,而>>运算符会用符号位填充高位,不存在<<<运算符,移位运算符的右操作数要完成模 32 的运算(除非左操作数是 long 类型, 在这种情况下需要对右操作數模 64 )。例如, 1 <<35 的值等同于 1 <<3 或 8。

    括号与运算符级别:


    运算符优先级.png

    枚举类型:

    enum Size{ SMALL,MEDIUM,LARGE};
    Size s = Size.SMALL;//声明这种类型的变量示例

    5.字符串
    拼接:如果需要把多个字符串放在一起,用一个定界符分隔,使用静态join方法:

    String all = String.join("/","S","m","l");//all is the string "S/m/l"

    想要检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法,“hello”.equalsIgnoreCase("Hello");
    注意:不能够使用 == 运算符检测两个字符串是否相等,== 只能够确定他们的存储空间的位置是否相同,字符串值相等不一定位置相等(当虚拟机始终将相同的字符串共享,就可以使用,但不建议使用)。

    码点和代码单元:

    String greeting = "Hello";
    int n = greeting.length。; // i is 5,返回采用 UTF-16 编码表示的给定字符串所需要的代码单元数量
    int cpCount = greeting.codePointCount(0, greeting.length());//得到实际的长度,即码点数量

    调用 s.charAt(n) 将返回位置 n 的代码单元,n 介于 0 ~ s.length()-1 之间。
    例如:
    char first = greeting.charAt(0); // first is 'H'
    char last = greeting.charAt(4); // last is ’o

    要想得到第 i 个码点,应该使用下列语句
    int index = greeting.offsetByCodePoints(int startlndex, int cpCount)//返回从 startlndex 代码点开始,位移 cpCount 后的码点索引。
    int cp = greeting.codePointAt(index);//返回从给定位置开始的码点。

    6.控制流程:
    多重选择:switch ..case..break, case标签可以为:
    • 类型为 char、byte、 short 或 int 的常量表达式。
    • 枚举常量。
    • 从 Java SE 7开始, case 标签还可以是字符串字面量。

    7.大数值:java.math 包中的两个很有用的类:Biglnteger 和 BigDecimal 这两个类可以处理包含任意长度数字序列的数值。
    Biglnteger 类实现了任意精度的整数运算, BigDecimal 实现了任意精度的浮点数运算。

    遗憾的是,不能使用人们熟悉的算术运算符(如:+ 和 *) 处理大数值。 而需要使用大数值类中的 add 和 multiply 方法。
    Biglnteger c = a.add(b); // c = a + b
    Biglnteger d = c.multiply(b.add(Biglnteger.valueOf(2))); // d = c * (b + 2)

    在进阶的路上,欢迎各位大侠指正

    相关文章

      网友评论

          本文标题:Java核心技术 卷I(第10版)读书笔记

          本文链接:https://www.haomeiwen.com/subject/xyoseqtx.html