Java学习笔记(一)

2020-02-03  本文已影响0人  burger8

Java学习笔记(一)

依据《写给大忙人看的Java核心技术》所记笔记

【美】Cay S.Horstmann 著

杨谦 王巍 高伟斌 谢志强 译

转载请注明出处,勿用于商业用途

第一章 基本的编程结构

一、第一个程序

  1. 在Java中,所有代码都必须在类中定义

  2. main方法是程序运行时调用的第一个方法,它被声明为静态的,表面该方法不是依赖于对象运行的。

  3. 包(package)是一组相关类的集合,每个类都放入一个包中

  4. 三种注释方法:

    //我是行注释
    /*
     我是多行注释
    */
    /**
     我是文档注释
    */
    
  5. javac 命令将Java源代码编译为中间代码,也称字节码,并将它们保存到类文件中(即.class文件)

  6. System.out是对象,是PrintStream的实例

  7. 使用点符号调用对象上的实例方法

  8. 字符串是String类的实例,可以调用length方法返回字符串的长度,即:"Hello World".length()

  9. Random类的对象可以产生随机数,可以使用new操作符构建一个Random对象 new Random();

    类名之后是构造函数的参数列表

    Random.nextInt()方法可以提供一个整数,Random类声明在java.util包中,使用需导入,即:import java.util.Random

二、基本类型

  1. 整型(没有小数,允许为负)

    int(4字节)long(8字节)short(2字节)byte(1字节)

    如果long类型还不够用时,使用BigInteger类

  2. 使用long类型时带上L后缀,byte和short型采用强制转换

  3. 十六进制使用0x前缀,二进制使用0b前缀,八进制使用0前缀

  4. 可以给数字添加下划线方便阅读,Java编译器会自动删除它们。如:1_000_000表示100万

  5. 浮点类型

    float(4字节) double(8字节)

    float类型有F后缀,没有F默认为double类型,也可使用D作为Double类型后缀

  6. 十六进制指数使用p

  7. Double.POSITIVE_INFINITY代表正无穷

    Double.NEGATIVE_INFINITY代表负无穷

    Double.NaN代表“非数值”,如0.0/0.0或负数平方根

  8. 所有的“非数值”都彼此不同,不能使用x==Double.NaN检查

    可以调用Double.isNaNDouble.isInfinite进行检查,Double.isFinite可以检查既不是无穷也不是NaN

  9. 浮点数不适合金融计算,因为存在误差,若要准确无误差的数学计算可以使用BigDecimal

  10. 布尔型

有两种数值,falsetrue,Java中布尔类型不是数字类型,与0和1没有关系

三、变量

  1. Java是强类型语言,变量值只能是某个具体类型的值

  2. Java对字母大小写敏感

    变量和方法的名称以小写字母开始,类的名称的第一个字母大写

    驼峰式大小写:当名称由多个单词组成时,单词首字母大写,如:countOfInvalidInputs

  3. 在使用变量前必须初始化变量

  4. 允许在方法中的任何地方声明变量,尽可能晚地声明变量,刚好在首次需要变量的前一刻声明

    变量声明在它的初始值刚有了的那一刻

  5. final关键字表示一个值,一旦赋值后就不能改变了(常量)

    常量的名称使用大写字母,如:final int DAYS_PER_WEEK=7;

    可以在方法外,使用static关键字声明常量,如:public static final int DAYS=7;

  6. 在类内部可以直接使用常量,在其他类中使用需要在前面加上类名

  7. System类中声明了一个常量:public static final PrintStream out;

  8. 延迟final变量的初始化也可以,只要在首次使用前只初始化一次就好。

    final变量一旦被赋值,就是最终的值,永远无法改变

四、算术操作

  1. 基本运算

    1. /操作符,如两个操作数都是整型,代表整除;如有小数会产生小数
    2. 整数除以零会导致异常,如果没有捕获异常,程序会终止
    3. 浮点数除以零会产生无限值或NaN,不会导致异常
    4. 当n为奇数时,若n为正,n%2的结果为1,若n为负,n%2的结果为-1
  2. 数学方法

    1. 静态方法不用在对象上调用,如静态常量一样,只需要在前面加上静态常量的类名即可
    2. Math.pow(x,y) 产生x的y次方,Math.sqrt(x) 计算x的平方根
    3. 计算两个值哪个小或大,Math.minMath.max
    4. Math 类提供三角函数和对数方法,以及常量Math.PIMath.E
  3. 数字类型转换

    • 合法转换
      • byte-->short\int\long\double
      • short\char-->int\long\double
      • int-->long\double
    • 合法但损失信息
      • int-->float
      • long-->float\double
  4. 大数

    java.math 中的BigIntegerBigDecimal 类可实现任意精度计算

    Java不允许对象使用操作符,操作大数时必须使用方法调用

五、字符串

  1. 字符串连接

    使用操作符+可以将两个字符串连接起来,将一个字符串和另外一个值连接起来时转换为字符串

  2. 子字符串

    要将字符串分开,使用substring方法

    substring方法的第一个参数是提取子字符串中的起始位置,第二个参数是子字符串不包含的终止位置

    split方法分割由字符串分割的所有字符串

    分隔符也可以是正则表达式

  3. 字符串比较

    检查字符串是否相等,使用equals方法

    string变量可以是null,表明该变量根本没有引用任何对象

    在null上调用任何方法都会导致空指针异常

    不考虑大小写比较两个字符串,可使用equalsIgnorelase()

  4. 数字字符串转换

    整数转换为字符串可调用静态的Integer.toString()

    字符串转整数,使用Integer.parseInt()

    对于浮点数,使用Double.toStringDouble.parseDouble

  5. String类API

    在Java中,String类是不变的(immutable),即任何String方法不能修改自己的字符串

六、输入与输出

  1. 读取输入

    要读取字符串和数字,构造一个依附到System.inScanner

    Scanner in = new Scanner(System.in);
    

    Scanner 对象的nextLine方法从输入读取一行

    nextInt() 读取整数,nextDouble() 读取浮点数

    Scanner类位于java.util包中

  2. 格式化输出

    print方法不会在输出中新起一行,常用来提示输入

    使用printf和%来格式化输出

    使用String.format 方法创建不打印输出的格式化字符串

七、控制流

  1. 分支:

    if、else、else if、switch case

  2. 循环

    while、do while、for

  3. 跳出循环

    break、continue

    break+标签可以跳出多个循环

  4. 局部变量作用域

八、数组和数组列表

  1. 使用数组

    新建数组:int[] nums

    数组初始化:nums =new int[10];nums = int[] {1,2,3,4};y

  2. 构造数组

    也可以直接构造数组:int [] nums = {1,2,3,4};

    数组长度为0和空指针null不同

  3. 数组列表

    构造数组时,必须指定长度,一旦构造好,数组的长度不能再变

    使用java.util包中的ArrayList类来管理数组

    ​ 声明变量:ArrayList<String> friends =new ArrayList<>();

    声明之后结果为一个大小为0的数组列表,可以用add方法给末尾加元素

    访问元素要使用get方法,不能用[]直接访问

    size方法可返回当前列表大小

  4. 基本类型包装类

    泛型类不能使用基本类型作为类型参数,可以使用包装类

    每一种基本类型都有对应的包装类

    Integer、Byte、Short、Long、Character、Float、Double和Boolean

    ==和!=操作符比较引用对象而不是对象的内容

  5. 增强的for循环

    for(int n:numbers){}

    其中的n不是索引值,而是被赋值为numbers[0]、numbers[1]等

  6. 数组与数组列表的复制

    数组直接等于的复制是引用直接指向同一个数组

    若真正复制数组需要使用静态方法Array.copyOf

    int[] copiedPrimes = Arrays.copyOf(primes,primes.length);

    该方法构造一个期望长度的新数组,并将原数组的元素复制进去

  7. 数组算法

    Arrays(数组)类 Collections(集合)类

    对数组或数组列表排序,使用sort方法

    Arrays.sort(names)Collections.sort(friends)

    toString() 产生一个数组的字符串表示

  8. 命令行参数

    当用命令行执行程序时,命令行中的指定参数就赋值给main函数中的args

  9. 多维数组

    Java中的多维数组是通过数组的数组来实现

    int[][] square =new int[4][4];

九、功能分解

静态方法,即static修饰的方法可在main中直接调用

变长参数必须是方法中的最后一个参数,用修饰符... 修饰

public static double max(double first,double ... rest);

上一篇下一篇

猜你喜欢

热点阅读