Professional Documents
Culture Documents
Java基础知识篇
Java基础知识篇
ui
G
va
Ja
必知
关于本⼩册
Java
JavaGuide
JavaGuide
https://snailclimb.gitee.io/javaguide-interview
是否免费?
https://github.com/Snailclimb/JavaGuide
⼩册系列会涵盖哪些知识点?
1. Java JVM
2.
3. MySQL Redis
4. Spring Netty......
5.
如何贡献
JavaGuide issue pr,
pr
koushuangbwcx@163.com
Java 1.2.1
Oracle ~~~~
如何赞赏
1
Ja
va
G
ui
de
2
de
ui
G
Java
va
Ja
Java
1. Java
1.1. Java
1.1.1. Java ?
1.1.2. JVM JDK JRE
1.1.2.1. JVM
1.1.2.2. JDK JRE
1.1.3. Oracle JDK OpenJDK
1.1.4. Java C++ ?
1.1.5. Java ?
1.1.6. Java ?
1.1.7. import java javax
1.1.8. Java “ ”
1.2. Java
1.2.1. ?
1.2.2.
1.2.3.
1.2.4. Java
1.2.5.
1.2.6. continue break return
1.2.7. Java
1.2.8. == equals
1.2.9. hashCode() equals()
1.3.
1.3.1. Java
1.3.2.
1.3.3. 8
1.4.
1.4.1. ? ?
1.4.2. Java
1.4.3. - 1.4.3.1. - 1.4.3.2.
1.4.4. vs
1.4.5.
2. Java
2.1.
2.1.1.
2.1.2. Constructor override?
2.1.3. Java
2.1.4.
3
de
ui
G
2.1.5. ? ?
va
Ja
2.1.6. ?
? ?
2.1.7.
2.1.8. ,
?
2.1.9. , ?
2.2.
2.2.1.
2.2.2.
2.2.3.
2.3.
2.3.1. ?
2.3.2.
2.3.3. :static,final,this,super
2.4.
2.4.1.
2.5.
2.5.1. String StringBu!er StringBuilder ? String
?
2.5.2. Object
2.5.3. == equals( )
2.5.4. hashCode equals ( )
2.5.4.1. hashCode
2.5.4.2. hashCode
2.5.4.3. hashCode equals
2.5.5. Java
2.5.6.
3. Java
3.1.
3.1.1. Collections Arrays
3.2.
3.2.1. Java
3.2.2. Throwable
3.2.3. try-catch-finally
3.2.4. try-with-resources try-catch-finally
3.3.
3.3.1. ?
3.3.2. ?
3.4. I\O
3.4.1. Java IO ?
4
de
ui
G
3.4.1.1. , ?
va
Ja
3.4.1.2. BIO,NIO,AIO ?
4.
5.
1. Java 基本功
1.1. Java ⼊⻔(基础概念与常识)
? ?
Java
Java
Java 3
5
de
ui
G
va
Ja
.class-> JVM
( ) JIT
JIT JIT
Java
Java
Java JRE
Java JDK
Java JDK
JSP Web Java
JDK JSP Java servlet
JDK servlet
6
de
ui
G
OpenJDK Oracle
va
Ja
OpenJDK
Rhino
Oracle JDK
https://blogs.oracle.com/java-platform-group/update-and-faq-on-
the-java-se-release-cadence
2. OpenJDK Oracle JDK OpenJDK
Java
Java C++ Java
Java
C ‘\0’
Java
7
de
ui
G
https://blog.csdn.net/sszgg2006/article/details/49148189
va
Ja
java javax
Java Java
Java *.class
Java Java
1.2. Java 语法
1.2.1. 字符型常量和字符串常量的区别?
1. : ;
2. : ( ASCII ), ;
( )
3. 2 ; ( char
Java )
8
de
ui
G
va
java 2.2.2
Ja
1.2.2. 关于注释?
Java
1.
2.
3.
Clean Code
if (employee.isEligibleForFullBenefits())
1.2.3. 标识符和关键字的区别是什么?
9
de
ui
G
va
Ja
Java
“ ”
“ ” “ ”
1.2.4. Java中有哪些常⻅的关键字?
import package
goto const
1.2.5. ⾃增⾃减运算符
1 1 Java
++) --
++ --
/ /
“b=++a” 1 b “b=a++” (
b) 1 ++a a+1 a++ a
“ / / ”
1.2.6. continue、break、和return的区别是什么?
1. continue
2. break
10
de
ui
G
return return
va
Ja
1. return; return
2. return value; return
1.2.7. Java泛型了解么?什么是类型擦除?介绍⼀下常⽤的通配符?
Java generics JDK 5 ,
Java Java
Java
list.add(12);
//这⾥直接添加会报错
list.add("a");
Class<? extends List> clazz = list.getClass();
Method add = clazz.getDeclaredMethod("add", Object.class);
//但是通过反射添加,是可以的
add.invoke(list, "kl");
System.out.println(list)
1.
//此处T可以随便写为任意标识,常⻅的如T、E、K、V等形式的参数常⽤于表示泛型
//在实例化泛型类时,必须指定T的具体类型
public class Generic<T>{
private T key;
public T getKey(){
return key;
}
}
11
de
ui
G
va
2.
3.
T E K V
java
12
de
ui
G
T (type) java
va
Ja
Java -JAVA T
E K V
1.2.8. ==和equals的区别
== :
( == == )
Java ==
equals() :
equals() Object Object
Object equals()
equals()
1 equals() equals()
“==” Object equals()
2 equals() equals()
true( )
13
de
ui
G
va
}
Ja
String
String equals()
1)hashCode() :
hashCode() int
hashCode() JDK Object
Java hashCode()
Object hashcode c c++
14
de
ui
G
va
(key-value) “ ”
“ ”
2) hashCode
“HashSet ” hashCode
3) equals hashCode
hashcode ,
equals true hashcode
equals hashCode
hashCode()
hashCode() class
4) hashcode
hashCode()
hashCode
1.3. 基本数据类型
1.3.1. Java中的⼏种基本数据类型是什么?对应的包装类型是什么?各⾃占⽤多
15
de
ui
G
1.3.1. Java中的⼏种基本数据类型是什么?对应的包装类型是什么?各⾃占⽤多
va
Ja
少字节呢?
Java 8
int 32 4 0
short 16 2 0
long 64 8 0L
byte 8 1 0
char 16 2 'u0000'
float 32 4 0f
double 64 8 0d
boolean 1 false
boolean JVM
1
1. Java long L
2. char a = 'h'char : String a = "hello" :
1.3.2. ⾃动装箱与拆箱
Java
1.3.3. 8种基本类型的包装类和常量池
16
de
ui
G
Java
va
Ja
Byte,Short,Integer,Long,Character,Boolean 4
[-128 127] Character [0,127]
Boolean True Or False
[-128 127] issue/461
Float,Double **
Integer i1 = 33;
Integer i2 = 33;
System.out.println(i1 == i2);// 输出 true
Integer i11 = 333;
Integer i22 = 333;
System.out.println(i11 == i22);// 输出 false
Double i3 = 1.2;
Double i4 = 1.2;
System.out.println(i3 == i4);// 输出 false
Integer
/**
*此⽅法将始终缓存-128 到 127(包括端点)范围内的值,并可以缓存此范围之外的其他值。
*/
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
17
de
ui
G
i1=Integer.valueOf(40);
va
Ja
Integer i1 = 40;
Integer i2 = new Integer(40);
System.out.println(i1==i2);//输出 false
Integer :
Integer i1 = 40;
Integer i2 = 40;
Integer i3 = 0;
Integer i4 = new Integer(40);
Integer i5 = new Integer(40);
Integer i6 = new Integer(0);
i1=i2 true
i1=i2+i3 true
i1=i4 false
i4=i5 false
i4=i5+i6 true
40=i5+i6 true
i4 == i5 + i6 + Integer i5 i6
i4 == 40 Integer
i4 int 40 40 == 40
1.4. ⽅法(函数)
1.4.1. 什么是⽅法的返回值?返回值在类的⽅法⾥的作⽤是什么?
18
de
ui
G
va
Ja
Java)
Java
example 1
swap(num1, num2);
a = 20
b = 10
num1 = 10
num2 = 20
19
de
ui
G
va
Ja
example2.
example 2
1
0
20
de
ui
G
va
Ja
example2
C++ Pascal)
Java
example 3
21
de
ui
G
va
System.out.println("x:" + x.getName());
Ja
System.out.println("y:" + y.getName());
}
}
x:⼩李
y:⼩张
s1:⼩张
s2:⼩李
22
de
ui
G
va
Ja
s1 s2
swap x y
Java
Java
Java Ⅰ 4.5
1.4.3. 重载和重写的区别
1.4.3.1. 重载
Java
23
de
ui
G
va
Ja
1.4.3.2. 重写
1.
2. private/final/static
static
3.
Guide
24
de
ui
G
va
Ja
2.
1.4.5. ⽅法的四种类型
1
// ⽆参数⽆返回值的⽅法(如果⽅法没有返回值,不能不写,必须写void,表示没有返回值)
public void f1() {
System.out.println("⽆参数⽆返回值的⽅法");
}
/**
* 有参数⽆返回值的⽅法
* 参数列表由零组到多组“参数类型+形参名”组合⽽成,多组参数之间以英⽂逗号(,)隔开,
形参类型和形参名之间以英⽂空格隔开
*/
public void f2(int a, String b, int c) {
System.out.println(a + "-->" + b + "-->" + c);
}
25
de
ui
G
va
// 有返回值⽆参数的⽅法(返回值可以是任意的类型,在函数⾥⾯必须有return关键字返回对
Ja
应的类型)
public int f3() {
System.out.println("有返回值⽆参数的⽅法");
return 2;
}
// 有返回值有参数的⽅法
public int f4(int a, int b) {
return a * b;
}
5 return
// return在⽆返回值⽅法的特殊使⽤
public void f5(int a) {
if (a>10) {
return;//表示结束所在⽅法 (f5⽅法)的执⾏,下⽅的输出语句不会执⾏
}
System.out.println(a);
}
2. Java ⾯向对象
2.1. 类和对象
2.1.1. ⾯向对象和⾯向过程的区别
Linux/Unix
issue :
Java
Java
CPU
Java
26
de
ui
G
2.1.2. 构造器 Constructor 是否可被 override?
va
Ja
2.1.4. 成员变量与局部变量的区别有哪些?
1. :
public,private,static
static final
2. : static
static
3. :
4. : :
final
2.1.5. 创建⼀个对象⽤什么运算符?对象实体与对象引⽤有何不同?
new new
0 1
; n n
Java new
2.1.7. 构造⽅法有哪些特性?
1.
27
de
ui
G
2. void
va
Ja
3.
2.1.8. 在调⽤⼦类构造⽅法之前会先调⽤⽗类没有参数的构造⽅法,其⽬的是?
2.1.9. 对象的相等与指向他们的引⽤相等,两者有什么不同?
2.2. ⾯向对象三⼤特征
2.2.1. 封装
//获取id的⽅法
public int getId() {
return id;
}
//设置id的⽅法
public void setId(int id) {
this.id = id;
}
//获取name的⽅法
public String getName() {
return name;
}
//设置name的⽅法
public void setName(String name) {
this.name = name;
}
}
28
de
ui
G
2.2.2. 继承
va
Ja
1.
2.
3.
2.2.3. 多态
“ ”
2.3. 修饰符
2.3.1. 在⼀个静态⽅法内调⽤⼀个⾮静态成员为什么是⾮法的?
2.3.2. 静态⽅法和实例⽅法有何不同
1. " . " " .
"
2.
2.3.3. 常⻅关键字总结:static,final,this,super
29
de
ui
G
: https://snailclimb.gitee.io/javaguide/#/docs/java/basic/final
va
Ja
,static,this,super
2.4. 接⼝和抽象类
2.4.1. 接⼝和抽象类的区别是什么?
1. public (Java 8
2. static final
3.
extends
4. public public protected default
private
5.
1. JDK8
(
issue:https://github.com/Snailclimb/JavaGuide/issues/146
2. jdk9
jdk7~jdk9 Java
1. jdk 7
2. jdk8
3. Jdk 9
2.5. 其它重要知识点
30
de
ui
G
va
StringBuilder StringBuffer
Ja
AbstractStringBuilder
AbstractStringBuilder.java
/**
* The count is the number of characters used.
*/
int count;
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}}
String
AbstractStringBuilder StringBuilder StringBuffer
expandCapacity append insert indexOf
StringBuffer
StringBuilder
String String
String StringBuffer StringBuffer
StringBuilder
StringBuffer 10%~15%
1. : String
2. : StringBuilder
3. : StringBuffer
31
de
ui
G
va
public final native Class<?> getClass()//native⽅法,⽤于返回当前运⾏时对象
Ja
的Class对象,使⽤了final关键字修饰,故不允许⼦类重写。
2.5.3. == 与 equals(重要)
== :
( == == )
equals() :
1 equals() equals()
“==”
2 equals() equals()
32
de
ui
G
true ( )
va
Ja
String
2.5.4.1. hashCode()介绍
hashCode() int
hashCode() JDK
Object.java Java hashCode()
(key-value) “ ”
“ ”
33
de
ui
G
“HashSet ” hashCode
va
Ja
hashCode()
int
hashCode() hashCode()
1. hashcode
2. , equals true
3. hashcode
4. equals hashCode
5. hashCode()
hashCode() class
transient
transient transient
2.5.6. 获取⽤键盘输⼊常⽤的两种⽅法
1 Scanner
2 Bu!eredReader
34
de
ui
G
3. Java 核⼼技术
va
Ja
3.1. 集合
3.2. 异常
https://simplesnippets.tech/exception-handling-in-java-part-1/
35
de
ui
G
https://chercher.tech/java-programming/exceptions-java
va
Ja
Error :
JVM Java
Java Virtual MachineError JVM
OutOfMemoryError Java JVM
Java
Virtual MachineError NoClassDefFoundError
Java Error
Exception : Exception
RuntimeException RuntimeException Java
NullPointerException
ArithmeticException 0
ArrayIndexOutOfBoundsException
3.2.3. try-catch-finally
try catch catch
finally
catch try
finally finally try
catch return finally
4 finally
1. finally finally
2. System.exit(int) exit
36
de
ui
G
finally
va
Ja
3.
4. CPU
issue:https://github.com/Snailclimb/JavaGuide/issues/190
try-with-resources try-
finally try-
with-resources try-
finally
//读取⽂本⽂件的内容
Scanner scanner = null;
try {
scanner = new Scanner(new File("D://read.txt"));
while (scanner.hasNext()) {
System.out.println(scanner.nextLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (scanner != null) {
scanner.close();
37
de
ui
G
va
}
Ja
Java 7 try-with-resources :
try-with-resources
try-catch-finally
try-with-resources
3.3. 多线程
3.3.1. 简述线程、程序、进程的基本概念。以及他们之间关系是什么?
CPU
3.3.2. 线程有哪些基本状态?
Java 6
Java 4.1.4
38
de
ui
G
va
Ja
NEW start()
READY cpu timeslice
RUNNING
39
de
ui
G
va
Ja
wait() WAITING
TIME_WAITING( )
sleep(long millis)
wait(long millis) Java TIMED WAITING
Java RUNNABLE
BLOCKED Runnable
run() TERMINATED
Java Io 40
Java I0 40 4
InputStream/Reader:
OutputStream/Writer:
40
Ja
va
G
ui
de
41
de
ui
G
va
Ja
3.4.1.1. 既然有了字节流,为什么还要有字符流?
I/O
Java
I/O
BIO
I/O
42
de
ui
G
I/O
va
Ja
NIO
AIO IO NIO
NIO IO NIO
IO IO IO
AIO
Netty AIO
4. 参考
https://stackoverflow.com/questions/1906445/what-is-the-di!erence-b
etween-jdk-and-jre
https://www.educba.com/oracle-vs-openjdk/
https://stackoverflow.com/questions/22358071/di!erences-between-orac
le-jdk-and-openjdk?answertab=active#tab-top
5. 公众号
43