java基础知识点总结

Java知识点总结

  1. Java是一种非常流行的计算机编程语言,其中使用最多的是Java 8(2018年)。

  2. JDK是开发工具,JRE是运行环境,JVM是核心所在。JDK包含JRE,JRE包含JVM。

  3. 安装JDK的时候,两项建议:

    ​ a) 路径当中不要有中文或者是空格。

    ​ b) 要单独取消外部公共JRE的安装。

  4. 命令提示符(cmd)

    ​ a) 启动:开始 + R,输入cmd回车

    ​ b) 切换盘符:“盘符名称:回车”

    ​ c) 进入文件夹:cd 文件夹名称

    ​ d) 进入多级文件夹:cd 文件夹1\文件夹2\文件夹3

    ​ e) 返回上一级:cd ..

    ​ f) 返回盘符根路径:cd \

    ​ g) 查看当前文件夹的内容:dir

    ​ h) 清空屏幕:cls

    ​ i) 退出:exit

  5. HelloWorld源代码编写:大小写、扩展名、符号、中英文。

  6. 运行HelloWorld两个步骤:

    ​ a) 编译:javac HelloWorld.java

    ​ b) 运行:java HelloWorld

  7. Path环境变量的配置。

  8. Notepad++基本使用,两个设置:设置-首选项-新建-默认语言用Java而且右侧编码选ANSI。

  9. 程序注释:

    ​ a) 概念:对程序代码进行解释说明的文字,不影响程序运行。

    ​ b) 单行注释:“//”开头,直到本行结束为止。

    ​ c) 多行注释:“/”开头,“/”结尾,中间的都是注释。

    ​ d) 文档注释:“/**”开头,“*/”结尾。

  10. 关键字

    ​ a) 概念:被保留的、有特殊含义的词汇。

    ​ b) 特点1:完全是小写字母。

    ​ c) 特点2:在增强记事本当中有特殊的颜色。

  11. 常量概念:程序运行期间,不可以发生改变的量。

  12. 常量的分类:

    ​ a) 字符串常量:双引号,可以包含0-n个字符。

    ​ b) 整数常量:100、200、1024

    ​ c) 浮点数常量:3.14、-2.5

    ​ d) 字符常量:单引号,有且仅有一个字符

    ​ e) 布尔常量:true、false,只有两个。

    ​ f) 空常量:null(不能直接用来打印输出)。

  13. 变量:程序运行期间,内容在一定范围之内可以发生改变的量。

  14. 如何使用变量:

    ​ a) 第一种方法:
    ​ 数据类型 变量名称 = 数据值;

    ​ b) 第二种方法:
    数据类型 变量名称;
    ​ 变量名称 = 数据值;

  15. 标识符:见名知意。类名称每个单词首字母大写;变量名称第一个单词首字母小写,从第二个单词开始首字母大写。

  16. 数据类型(基本类型和引用类型),基本类型分为:

    ​ a) 整数类型:byte、short、int、long

    ​ b) 浮点类型:float、double

    ​ c) 字符类型:char

    ​ d) 布尔类型:boolean

  17. 运算符:对常量或者变量进行操作的符号。

  18. 表达式:用运算符连起来的式子。

  19. 算术运算符:

    ​ a) 四则运算:+ - * /

    ​ b) 取模运算:%(只看余数)

    ​ c) 字符串连接:任何数据类型和字符串连在一起,都是字符串结果

    ​ d) 自增自减运算符,单独使用前后没有区别,但是混合使用有重大区别

    ​ i. 前++,先加后用

    ​ ii. 后++,先用后加

  20. 赋值运算符:

    ​ a) 基本:=

    ​ b) 复合:+= -= *= /= %= a += 3如同a = a + 3

  21. 比较运算符:> < >= <= == !=

  22. 逻辑运算符:

    ​ a) 与 & &&

    ​ b) 或 | ||

    ​ c) 亦或 ^

    ​ d) 非 !

  23. Scanner键盘输入的三个步骤:

    ​ a) 导包:import java.util.Scanner;

    ​ b) 创建:Scanner sc = new Scanner(System.in);

    ​ c) 使用:

    ​ i. 获取int数值:int num = sc.nextInt();

    ​ ii. 获取字符串:String str = sc.next();

  24. 流程:也就是代码的若干个步骤,先做什么,后做什么。

  25. 流程分类:

    ​ a) 顺序结构

    ​ b) 选择结构

    ​ c) 循环结构

  26. 选择结构,if语句的格式三种:

    ​ a) 单if语句:执行代码,或者不执行;有或无

    ​ b) 标准的if-else语句:执行A或者执行B,二者选其一

    ​ c) 扩展的if-else语句:N者选其一

  27. 循环结构:

    ​ a) for循环:格式比较死,擅长控制次数

    ​ b) while循环:格式比较灵活,不太在意次数。

    ​ i. 标准格式

    ​ ii. 扩展格式

  28. 跳转控制语句:

    ​ a) break:一旦执行,整个循环立刻结束

    ​ b) continue:一旦执行,当前单次循环立刻结束,马上开始下一次。

  29. 循环嵌套。

  30. 数组:一种引用数据类型,容器,可以存放多个数据,但是数据类型一定统一。

  31. 定义数组:

    ​ a) 数据类型[] 数组名称;

    ​ b) 数据类型 数组名称[];(了解即可)

  32. 定义了数组,一定要进行初始化才能使用:

    ​ a) 动态初始化:指定长度

    ​ b) 静态初始化:指定内容

  33. 动态初始化的格式:

    ​ a) 第一种方法:
    ​ 数据类型[] 数组名称 = new 数据类型[数组长度];

    ​ b) 第二种方法:
    ​ 数据类型[] 数组名称;
    ​ 数组名称 = new 数据类型[数组长度];

  34. 静态初始化的格式:

    ​ a) 标准格式:
    ​ 数据类型[] 数组名称 = new 数据类型[] {元素1, 元素2, 元素3, ...};

    ​ b) 简便格式:
    ​ 数据类型[] 数组名称 = {元素1, 元素2, 元素3, ...};

    ​ c) 标准格式可以拆分成为两个步骤;但是简便格式必须一个步骤完成。

  35. 获取数组的长度:
    数组名称.length
    注意:数组在内存当中一旦被创建,长度不可以改变。

  36. Java内存分为五个部分:

    ​ a) 栈(Stack):存放局部变量。

    ​ b) 堆(Heap):new出来的。

    ​ c) 方法区(Method Area):存放.class相关信息

    ​ d) 本地方法区(Native Method Area):与操作系统相关

    ​ e) 寄存器(pc Register):与CPU相关,性能极高。

  37. 方法:就是将一些代码使用大括号包起来,然后取一个名字。使用的时候,只要根据名称调用即可。而且比循环要更加灵活。

  38. 如何定义一个方法:
    修饰符 返回值类型 方法名(参数类型 参数名称) {
    方法体
    return 返回值;
    }

  39. 调用方法的三种方式:

    ​ a) 单独调用:方法名称(实际参数);

    ​ b) 打印调用:System.out.println(方法名称(实际参数));

    ​ c) 赋值调用:数据类型 变量名称 = 方法名称(实际参数);

  40. 如何定义一个没有返回值的方法:
    修饰符 void 方法名称(参数类型 参数名称) {
    方法体
    // return;
    }

  41. 调用没有返回值的方法,只能使用单独调用,不能使用打印调用或者赋值调用。

  42. 重载(Overload):多个方法的名称相同,但是参数列表不同。

  43. 重载中,什么叫做参数不同:

    ​ a) 参数的个数不同

    ​ b) 参数的类型不同

    ​ c) 参数的多类型顺序不同

  44. 重载中,与什么无关:

    ​ a) 与返回值类型无关

    ​ b) 与参数名称无关

  45. 参数传递:也就是在调用方法的时候,向方法当中传入数据的动作。

  46. 参数传递的两项规则:

    ​ a) 对于基本类型(以及String)来说,形式参数的操作【不会】影响实际参数。

    ​ b) 对于引用类型(除了String)来说,形式参数的操作【会】影响实际参数。

  47. 面向过程:当需要实现一个功能的时候,每一个过程中的详细步骤和细节都要亲力亲为。

  48. 面向对象:当需要实现一个功能的时候,不关心详细的步骤细节,而是找人帮我做事儿。

  49. 类和对象的关系:

    ​ a) 类是抽象的,通常不能直接使用。好像是一张手机设计图纸。

    ​ b) 对象是具体的,根据类创建一个对象使用,也就是根据图纸创造一个手机。

  50. 如何定义一个类:成员变量、成员方法。

    ​ a) 成员变量:直接定义在类当中,在方法外面。

    ​ b) 成员方法:去掉static关键字,其他和此前的普通方法一样。

  51. 如何根据类创建对象,格式:类名称 对象名 = new 类名称();

  52. 如何使用对象:

    ​ a) 使用成员变量:对象名.成员变量名

    ​ b) 调用成员方法:对象名.成员方法名(参数)

  53. 局部变量和成员变量的不同:

    ​ a) 定义的位置不同

    ​ b) 内存的位置不同

    ​ c) 生命周期不同

    ​ d) 默认值不同

  54. private关键字用法:直接写在成员变量前面,类外面不能直接访问,确保安全性。间接访问:编写一对儿Getter Setter方法。(特例:如果是boolean类型,getXxx必须叫做isXxx的形式。)

  55. this关键字典型用法:用来区分同名的成员变量和局部变量。在成员变量的前面写上“this.”前缀即可。

  56. 构造方法:专门用来创建对象的方法,通过new关键字创建对象就是在调用构造。

    ​ a) 构造方法不能写返回值类型,连void都不能写。

    ​ b) 构造方法的名称必须和所在的类名称完全一样,大小写也要一样。

    ​ c) 构造方法也是可以重载的。

    ​ d) 构造方法如果没有定义,默认送一个;如果定义了,那么默认的不再赠送。

  57. 如何定义一个标准的POJO类:

    ​ a) 所有的成员变量都用private修饰

    ​ b) 为每一个成员变量编写一对儿Getter Setter方法

    ​ c) 编写一个无参数的构造方法

    ​ d) 编写一个全参数的构造方法

  58. 只要是字符串,必然就是对象。

  59. API文档的基本使用。

  60. 如何创建字符串:

    ​ a) 直接赋值双引号,也是一个字符串对象。

    ​ b) 可以通过new关键字来调用String的构造方法:

    ​ i. public String(char[] array):根据字符数组来创建字符串

    ​ ii. public String(char[] array, int offset, int count):根据字符数组当中的一部分来创建字符串。

  61. 字符串池:是为了节省内存,重复利用相同的字符串。

    ​ a) 凡是双引号直接写上的字符串,默认就在池中;

    ​ b) 凡是new出来的字符串,默认不在池中。

  62. 字符串的内容永不可变。每当你觉得好像是应该变量,必然是创建了一个新的字符串。

  63. 字符串的比较方法:

    ​ a) public boolean equals(Object obj):严格区分大小写。

    ​ b) public boolean equalsIgnoreCase(String str):忽略大小写

  64. 字符串的替换方法:
    public String replace(CharSequence oldStr, CharSequence newStr)

  65. 字符串的切割方法:
    public String[] split(String regex)
    注意:不要使用英文句点作为切分的标识,如果非要用英文句点,应该写[\.](file://.)

  66. 集合:和数组类似,但是主要区别就是集合的长度可变,数组的长度不可变。

  67. 如何创建一个ArrayList集合?

    ​ a) 导包:import java.util.ArrayList

    ​ b) 创建:ArrayList<泛型> list = new ArrayList<>()

    ​ c) 泛型:集合当中存储的是统一的什么类型。

    ​ d) 注意:泛型只能使用引用类型,不能使用基本类型。

  68. 如何使用ArrayList集合,常用方法:

    ​ a) 添加:public boolean add(E element)

    ​ b) 获取:public E get(int index)

    ​ c) 长度:public int size()

  69. 如何让集合存储基本类型:使用包装类。记住两个特例(int对应Integer,char对应的Character),其他都是首字母大写即可。

  70. 集合能否存储自定义的类型,例如Person?可以,没问题。

  71. IO流是用来传输数据的技术,典型应用包括读写文件。

  72. IO流的分类:

    ​ a) 字节输入流

    ​ b) 字节输出流

    ​ c) 字符输入流:FileReader、BufferedReader

    ​ d) 字符输出流:FileWriter、BufferedWriter

  73. FileWriter一般使用步骤:创、写、关。

    ​ a) 创:FileWriter fw = new FileWriter(“file01.txt”);

    ​ b) 写:fw.write(“Hello”);

    ​ c) 关:fw.close();

  74. FileWriter如何才能追加写入呢?构造方法第二个参数为true即可。

  75. 如何实现换行?

    ​ a) Windows当中:\r\n

    ​ b) macOS当中:\r或者\n

    ​ c) Linux当中:\n

  76. 五种write方法的重载:

    ​ a) 写字符串的整体

    ​ b) 写字符串的部分

    ​ c) 写字符数组的整体

    ​ d) 写字符谁书的部分

    ​ e) 写单个字符对应的数字(参考ASCII码表或者Unicode表)

  77. FileReader一般使用步骤:创、读、关。

    ​ a) 创:FileReader fr = new FileReader(“file01.txt”);

    ​ b) 读单个字符:
    int ch; // 单个字符的ASCII值
    while ((ch = fr.read()) != -1) {
    // ...
    }

    ​ c) 读字符数组:
    char[] buf = new char[1024];
    int len; // 有效个数
    while ((len = fr.read(buf)) != -1) {
    String str = new String(buf, 0, len);
    }

  78. BufferedXxx和FileXxx有什么区别?BufferedXxx有8192长度的char[]字符数组作为缓冲,所以性能更加高一些。

  79. BufferedWriter有额外的方法:public void newLine(),根据操作系统自动选择写入换行符。

  80. BufferedReader有额外的方法:public String readLine(),读取一行字符串,不包含换行符。

  81. 关于方法的参数和返回值类型:

    ​ a) 任何数据类型(基本类型、数组、字符串、自定义的类)都可以作为参数。

    ​ b) 任何数据类型(基本类型、数组、字符串、自定义的类)都可以作为返回值。

  82. 使用接口的好处:通用性、隔离性。

  83. 定义接口的格式:
    public interface 接口名 {
    // ...
    }

  84. 接口的组成部分:

    ​ a) 抽象方法【核心内容】

    ​ b) 常量

    ​ c) 默认方法(Java 8)

    ​ d) 静态方法(Java 8)

    ​ e) 私有方法(Java 9)

  85. 定义一个抽象方法,格式:
    public abstract 返回值类型 方法名(参数类型 参数名);

    ​ a) 修饰符public abstract也可以省略不写

    ​ b) 抽象方法不可以写方法体大括号

  86. 接口要想使用,一定要有一个实现类。如何实现?
    public class 类名称 implements 接口名 {
    // 覆盖重写所有的抽象方法
    }

  87. 如何覆盖重写(Override)抽象方法呢?一般步骤:

    ​ a) 将抽象方法抄写过来

    ​ b) 去掉abstract关键字

    ​ c) 写上方法体

  88. 使用接口和实现类的一般格式:

    ​ a) 创建:接口名称 引用名 = new 实现类名称();

    ​ b) 调用:引用名.抽象方法名(参数);

    ​ c) 注意:

    ​ i. 只能调用左侧接口当中定义好的方法,无法调用右侧类当中特有的方法。

    ​ ii. 运行程序的时候,方法的执行者其实是右边的类对象。

    ​ iii. “调用的时候看左边,但是运行的时候看右边。”

  89. 从Java 8开始,没有接口的实现类,也可以直接使用接口:Lambda表达式。Lambda表达式就替代了实现类。

  90. Lambda使用前提:一定要有函数式接口才能用,没有函数式接口就不能用Lambda表达式。

  91. 函数式接口:有且仅有一个抽象方法的接口。无所谓有没有@FunctionalInterface,这是一个可选的检测手段而已。

  92. 使用Lambda必须有推断环境:

    ​ a) 要么根据参数类型传参来推断函数式接口

    ​ b) 要么就根据赋值语句左侧类型来推断函数式接口

  93. Lambda表达式的标准格式:(int a, int b) ->

    ​ a) 一些参数(方法的参数)

    ​ b) 一个箭头

    ​ c) 一些代码(方法体)

  94. Lambda表达式的简便格式:
    (int num) -> {return ++num;}
    (num) -> {return ++num;}
    num -> {return ++num;}
    num -> ++num;

    ​ a) 参数的类型可以省略

    ​ b) 如果有且仅有一个参数,那么小括号可以省略

    ​ c) 如果有且仅有一个语句,那么大括号和return也可以省略

  95. 对比一下静态方法与成员方法的区别:

    ​ a) 静态方法与对象无关,可以直接通过类名称调用:
    类名称.静态方法名(参数值);

    ​ b) 成员方法一定要有对象才能使用:
    对象名.成员方法名(参数值);

  96. 方法引用:如果Lambda表达式想做的事情,在某一个地方某一个方法已经做过了,那么就可以使用方法引用来替代Lambda。

  97. 方法引用的方式:

    ​ a) 通过类名称引用静态方法:类名称::静态方法名

    ​ b) 通过对象名引用成员方法:对象名::成员方法名

  98. Stream流式思想:简化了普通的集合操作,类似于流水线。Stream流在Java当中就是一个java.util.stream.Stream接口的对象。

    ​ a) 如何获取流:

    ​ i. 通过集合获取:集合名称.stream()

    ​ ii. 通过数组获取:Stream.of(数组名称) 注意,数组当中必须是引用类型元素

    ​ b) 映射的方法:map,参数是一个负责转换的Lambda表达式

    ​ c) 过滤的方法:filter,参数是一个可以产生boolean结果的Lambda表达式

    ​ d) 遍历的方法:forEach,参数也是一个Lambda,Lambda对应的抽象方法应该只有一个参数并且不产生返回值。

    ​ e) 如何获取并发流

    ​ i. 直接一次性获取并发流:.parallelStream()

    ​ ii. 首先获取普通流,然后继续变成并发流:.stream().parallel()

  99. 模块化思想可以为我们带来两点好处:

    ​ a) 整体一整个,文件体积太大。如果只是用到了其中的一部分内容,就会浪费。

    ​ b) 精确控制package包级别的访问控制。只有导出的包,模块之外才可以访问,否则只能模块内部自己访问。

    ​ c) 模块的描述信息module-info.java文件的基本内容:
    module 本模块的名称 {
    exports 导出的包名称;
    requires 需要依赖的其他模块名称;
    }

posted @ 2021-07-13 20:46  Lucky_龍  阅读(149)  评论(0)    收藏  举报