ref: https://github.com/DuGuQiuBai/Java
DAY1-3
第一章 JAVA概述
计算机基础知识
计算机
计算机硬件
计算机软件
软件开发
计算机语言
人机交互方式
键盘功能键及快捷键介绍
常用的DOS命令
JAVA语言概述
Java语言发展史
Java语言平台版本
Java语言特点: 跨平台性(JVM)
JRE与JDK
-
JRE(java运行环境)
JVM + 核心类库
-
JDK(java开发工具包)
JRE + java开发工具(编译工具javac.exe,打包工具jar.exe)
JDK下载与安装
HelloWorld案例
开发工具介绍
HelloWorld
class HelloWorld {
public static void main(String [] args) {
System.out.println(“Hello World”);
}
}
程序解析
- javac 源文件名.java
- java HelloWorld
运行与工作原理
在这里插入图片描述
常见错误
环境变量配置
path环境变量配置的作用
path环境变量配置方式
classpath环境变量配置方式
第二章 JAVA基础语法[上]
关键字
标识符
注释
//; /* */; /** */
常量、进制和进制转换
- 字符串常量, 整数常量, 小数常量,字符常量, 布尔常量, 空常量
- 二进制(0b…),八进制(0…),十进制(默认),十六进制(0x…)
- 原码、反码和补码
原码: 最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
正数:原码,反码,补码相同
负数:原码(最高位为1),反码(除符号位外,逐位取反),补码(反码+1)
变量
使用变量前需进行初始化
数据类型和类型转换
byte(1字节),short(2字节),int(4字节),long(8字节);
float(4字节),double(8字节);
char(2字节),boolean(1字节)
byte b1=3,b2=4,b;
b=b1+b2; //编译失败:因为b1和b2是变量,默认使用int类型进行存储
b=3+4; //会检查和是否超出byte类型的范围。如果没有可以赋值。
运算符
算术运算符
- +(正号),-(负号),+,-,*,/,%,(前)++,(后)++,(前)–,(后)–,+(字符串相加)
赋值运算符
- = , +=, -=, *=, /=, %=
比较运算符
- ==, !=, >, < , >=, <=, instanceof(检查是否是类的对象)
逻辑运算符
- &, |, ^, !, &&, ||
- 单&和单|时,无论左边真或假,右边都进行运算;双&在左边为假时,右边不参与运算,返回false;双|在左边为真时,右边不参与运算,返回true。
- 一般建议使用&&, ||
位运算符(直接对二进制进行运算)
- <<, >>, >>>(无符号右移), &, |, ^, ~(反码)
三目运算符
// z: max(x, y)
int x=3,y=4,z;
z = (x>y)?x:y;
语句
顺序结构;选择结构:if, switch;循环结构: for,while, do-while
DAY4-5
第三章Java基础语法[下]
方法
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
函数体;
return 返回值;
}
重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
数组
定义:
- 格式1:数据类型[] 数组名;
- 格式2:数据类型 数组名[];
初始化:使用前必须先初始化
- 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。eg. int[] arr = new int[3];
- 静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。eg. int[] arr = new int[]{1,2,3}; or int[] arr = {1,2,3};
异常:数组索引越界,空指针异常
二维数组
- 格式1 eg. int[][] arr = new int[3][2];
- 格式2 eg. int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3]
arr[2] = new int[1]; - 格式3 eg. int[][] arr = {{1,2,3},{4,6},{6}};
DAY6-7
第四章面向对象[上]
面向对象思想
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
类与对象及其使用
类:是一组相关的属性(成员变量)和行为(成员方法)的集合
对象:是该类事物的具体体现
- 如何使用
创建对象:
1 类名 对象名 = new 类名();
2 对象名.成员变量
3 对象名.成员方法
对象的内存图
成员变量和局部变量的区别
- 在类中的位置不同
成员变量 类中方法外
局部变量 方法内或者方法声明上 - 在内存中的位置不同
成员变量 堆内存
局部变量 栈内存 - 生命周期不同
成员变量 随着对象的存在而存在,随着对象的消失而消失
局部变量 随着方法的调用而存在,随着方法的调用完毕而消失 - 初始化值不同
成员变量 有默认的初始化值
局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
匿名对象
封装(private)
- private最常见的应用:
把成员变量用private修饰
提供对应的getXxx()/setXxx()方法 - 被private修饰的成员只在本类中才能访问
- private仅仅是封装的一种体现,类和方法其实也是封装体
this关键字
this:代表所在类的对象引用
方法被哪个对象调用,this就代表那个对象
局部变量隐藏成员变量时,使用this
构造方法
- 类
- 成员变量
- 构造方法
- 无参构造方法
- 带参构造方法
- 成员方法
- getXxx()
- setXxx()
- 给成员变量赋值的方式
- 无参构造方法+setXxx()
- 带参构造方法
static关键字
- 可以修饰成员变量和成员方法
- static关键字特点
随着类的加载而加载
优先于对象存在
被类的所有对象共享(判断是否使用静态关键字) - static关键字注意事项
在静态方法中没有this关键字
静态方法只能访问静态的成员变量和静态的成员方法
制作帮助文档
制作帮助文档(API)
javadoc -d 目录 -author -version ArrayTool.java
DAY8-10
第五章面向对象[下]
继承
-
通过extends关键字可以实现类与类的继承
class 子类名 extends 父类名 {} -
单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。
-
子类只能继承父类所有非私有的成员(成员方法和成员变量)
-
子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
-
super:代表父类存储空间的标识 (可以理解为父类引用)
-
静态随着类的加载而加载。
-
执行流程:静态代码块 – 构造代码块 – 构造方法
-
只要有子父关系,肯定先初始化父亲的数据,然后初始化子类的数据。
-
方法重写:父类中私有方法不能被重写
-
方法重写overload 和 方法重载override区别
-
final关键字
修饰类,类不能被继承
修饰变量,变量就变成了常量,只能被赋值一次
修饰方法,方法不能被重写
多态
成员访问特点
成员变量:编译看左边,运行看左边
成员方法:编译看左边,运行看右边
静态方法:编译看左边,运行看左边
抽象类
一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
abstract class 类名 {}
public abstract void eat();
抽象类不能实例化,由具体的子类实例化。
抽象类的子类,要么是抽象类,要么重写抽象类中的所有抽象方法
接口
interface 接口名 {}
class 类名 implements 接口名 {}
接口不能实例化,具体的子类实例化。
接口的子类,要么是抽象类,要么重写接口中的所有抽象方法
抽象类和接口的区别
- 成员区别
抽象类 变量,常量;有抽象方法;抽象方法,非抽象方法
接口 常量;抽象方法 - 关系区别
类与类 继承,单继承
类与接口 实现,单实现,多实现
接口与接口 继承,单继承,多继承 - 设计理念区别
抽象类 被继承体现的是:”is a”的关系。共性功能
接口 被实现体现的是:”like a”的关系。扩展功能
包和导包
package, import, class 有没有顺序关系?有
package(唯一) -> import(多个) -> class(多个)
权限修饰符
public protected 默认 private
同一类中 ✔️ ✔️ ✔️ ✔️
同一包子类,其他类 ✔️ ✔️ ✔️
不同包子类 ✔️ ✔️
不同包其他类 ✔️
内部类
把类定义在其他类的内部
内部类的访问特点:
内部类可以直接访问外部类的成员,包括私有。
外部类要访问内部类的成员,必须创建对象。
DAY11-14
第七章常用类
Object类/Scanner类
- 子类构造方法默认访问父类的无参构造方法
- object类的成员方法
public int hashCode()
public final Class getClass()
public String toString()
public boolean equals(Object obj)
protected void finalize()
protected Object clone() - == 和equals()的区别?
==
基本类型:比较的是基本类型的值是否相同
引用类型:比较的是引用类型的地址值是否相同
equals()
只能比较引用类型,默认比较的是对象的地址值是否相同。
但是,可能被重写,一定要根据实际的情况来看。 - Scanner类的成员方法
hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx
nextXxx() 获取下一个输入项。
eg. public int nextInt(); public String nextLine()
String类/StringBuffer类/StringBuilder类
- 构造方法:
public String():创建String对象
public String(byte[] bytes):把字节数组转成字符串。
public String(byte[] bytes,int index,int length):把字节数组中的一部分转成字符串
public String(char[] value):把字符数组转成字符串
public String(char[] value,int index,int count):把字符数组的一部分转成字符串
public String(String original):把字符串转成字符串 - A:判断功能
boolean equals(Object obj):比较字符串的内容是否相同,严格区分大小写
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,不考虑大小写
boolean contains(String str):判断是否包含指定的小串
boolean startsWith(String str):判断是否以指定的字符串开头
boolean endsWith(String str):判断是否以指定的字符串结尾
boolean isEmpty():判断字符串的内容是否为空 - B:获取功能
int length():返回字符串的长度。字符的个数。
char charAt(int index):返回字符串中指定位置的字符。
int indexOf(int ch):返回指定字符在字符串中第一次出现的位置
97,‘a’
int indexOf(String str):返回指定字符串在字符串中第一次出现的位置
int indexOf(int ch,int fromIndex):返回指定字符从指定位置开始在字符串中第一次出现的位置
int indexOf(String str,int fromIndex):返回指定字符串从指定位置开始在字符串中第一次出现的位置
String substring(int start):返回从指定位置开始到末尾的子串
String substring(int start,int end):返回从指定位置开始到指定位置结束的子串 - C:转换功能
byte[] getBytes():把字符串转换为字节数组
char[] toCharArray():把字符串转换为字符数组
static String valueOf(char[] chs):把字符数组转成字符串
static String valueOf(int i):把int类型的数据转成字符串
把任意类型转换为字符串的方法。
String toLowerCase():把字符串转小写
String toUpperCase():把字符串转大写
String concat(String str):字符串的连接 - D:其他功能
- a:替换功能
String replace(char old,char new)
String replace(String old,String new) - b:去除字符串两空格
String trim() - c:按字典顺序比较两个字符串
int compareTo(String str)
int compareToIgnoreCase(String str)
- a:替换功能
数组高级和Arrays类
排序(冒泡排序,选择排序),查找(基本查找,二分查找)
基本类型包装类(Integer,Character)
正则表达式(Pattern,Matcher)
Math类/Random类/System类
BigInteger类/BigDecimal类
Date类/DateFormat类/Calendar类
DAY15-18
第八章API-集合
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
Collection
- Collection接口成员方法
- 添加功能
add(Object obj)
addAll(Collection c) - 移除功能
remove(Object obj)
removeAll(Collection c)
clear() - 判断功能
contains(Object obj)
containsAll(Collection c)
isEmpty() - 获取功能
iterator()
size() - 交集功能
retainAll(Collection c) - 转数组功能
toArray()
Object[] toArray() 把集合转成数组,可以实现集合的遍历
Iterator iterator() 迭代器,集合的专用遍历方式
- 添加功能
- Iterator: 依赖于集合而存在
- Iterator 接口成员方法:boolean hasNext();E next()
List
- 有序的 collection(也称为序列),列表通常允许重复的元素。
- List接口成员方法
add(int index,Object obj)
remove(int index)
get(int index)
set(int index,Object obj)
listIterator()
List集合的特有遍历功能:通过size()和get()方法结合即可 - ListIterator 接口的成员方法:boolean hasPrevious();E previous()
- 常见数据结构:
栈,队列,数组,链表,树,哈希表 - ArrayList底层数据结构是数组,查询快,增删慢;线程不安全,效率高
- Vector底层数据结构是数组,查询快,增删慢;线程安全,效率低
- Vector类特有功能
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
- Vector类特有功能
- LinkedList底层数据结构是链表,查询慢,增删快;线程不安全,效率高
- LinkedList类特有功能
public void addFirst(E e)及addLast(E e)
public E getFirst()及getLast()
public E removeFirst()及public E removeLast()
- LinkedList类特有功能
泛型
是一种把明确数据类型的工作推迟到创建对象或者调用方法的时候采取明确的特殊的数据类型。
<数据类型>
增强for
for(元素的数据类型 变量名 : 数组或者Collection集合对象) {
使用变量名即可
}
静态导入
导入到了方法的级别,方法必须是静态的
可变参数
修饰符 返回值类型 方法名(形式参数数据类型… 变量) {}
Set
无序,唯一
- HashSet集合的底层数据结构是哈希表
首先判断对象的哈希值是否相同hashCode()
->如果不同,就直接添加到集合;如果相同,就继续执行equals()进行比较
->如果返回false,就直接添加到集合;如果返回true,说明元素重复,不添加。 - LinkedHashSet底层数据结构是哈希表和链表。哈希表保证元素的唯一性,链表保证元素的有序。(存储顺序和取出顺序一致)
- TreeSet底层数据结构是红黑树,平衡二叉树。
Map
- Map和Collection的区别?
Map双列集合,由键值对组成;键唯一,值可以重复;数据结构针对键有效;
Collection单列集合,有单个元素组成;Set唯一,List可重复;数据结构针对元素有效。 - Map接口成员方法
- 添加功能
put - 移除功能
remove
clear - 判断功能
containsKey,containsValue
isEmpty - 获取功能
size
get
keySet
values
entrySet
- 添加功能
- HashMap
- LinkedHashMap
键有序,唯一 - TreeMap
Collections
- Collection和Collections的区别
Collection是单例集合的顶层接口,定义了单例集合的共性功能;
Collections是针对集合进行操作的工具类 - Collections常见功能:排序,二分查找,最大值,反转,随机置换
DAY19-22
第九章API-IO
异常
- Throwable
- Error
- Exception
- RuntimeException
- 非RuntimeException(编译时异常)
- 处理方案
try…catch…finally
throws - throws和throw的区别?
throws:方法声明上,后面跟的是类名,用逗号隔开,可以跟多个。表示可能有异常
throw: 方法体中,后面跟的是对象名,只能跟一个。表示有一个异常产生
File
- File的构造方法
File file = new File("d:\\demo\\a.txt");
File file = new File("d:\\demo","a.txt");
File file = new File("d:\\demo");
File file2 = new File(file,"a.txt");
- File的成员方法
- 创建功能
CreateNewFile()
mkdir()
mkdirs() - 删除功能
delete() - 重命名功能
renameTo() - 判断功能
isDirectory()
isFile()
exists()
isHidden()
canWrite()
canRead() - 基本获取功能
get三个
lastModifiedTime
length - 高级获取功能
String[] filename = file.list()
File[] fileArray = file.listFiles() - 文件名称过滤器
- 创建功能
递归
字节流
- 字节流写数据: OutputStream
- FileOutputStream
- 创建字节输出流对象 - > 调用写数据功能 - > 释放资源
FileOutputStream fos = new FileOutputStream("fos.txt"); fos.write("helloworld".getBytes()); fos.close();
- 字节流读取数据:InputStream
- FileInputStream
- 创建字节输入流对象 - > 调用读数据功能 - > 释放资源
FileInputStream fis = new FileInputStream("fis.txt"); //方式1:一次读取一个字节 int by = 0; while((by=fis.read())!=-1) { System.out.print((char)by); } //方法2:一次读取一个字节数组,效率更高 byte[] bys = new byte[1024]; int len = 0; while((len=fis.read(bys))!=-1) { System.out.print(new String(bys,0,len)); } fis.close();
- 字节缓冲流
BufferedInputStream
BufferedOutputStream
转换流
- 转换流本身是一个字符流:字符流 = 字节流 + 编码表
- 编码表:字符和对应数据组成的一张表
- 常见编码表:ASCII,UTF-8
- FileWriter
- FileReader
字符流
- OutputStreamWriter字符输出流
public void write(int c)
public void write(char[] cbuf)
public void write(char[] cbuf,int off,int len)
public void write(String str)
public void write(String str,int off,int len) - InputStreamReader字符输入流
public int read()
public int read(char[] cbuf) - 字符缓冲流
BufferedWriter - void newLine()
BufferedReader - String readLine()
其他流
- 操作基本数据类型的流
DataInputStream
DataOutputStream - 内存操作流
操作字节数组
ByteArrayInputStream
ByteArrayOutputStream
操作字符数组
CharArrayReader
CharArrayWrite
操作字符串
StringReader
StringWriter - 打印流
- 标准输入输出流
System.in的类型是InputStream.
System.out的类型是PrintStream是OutputStream的子类FilterOutputStream 的子类. - 随机访问流
RandomAccessFile类不属于流,是Object类的子类。但它融合了InputStream和OutputStream的功能。支持对随机访问文件的读取和写入 - 合并流
SequenceInputStream类可以将多个输入流串流在一起,合并为一个输入流,因此,该流也被称为合并流 - 序列化流
序列化流ObjectOutputStream
反序列化流ObjectInputStream - Properties集合