1- # Java编程语言概述
2-
3- # Java基础语法
4-
5- # Java数组
6-
7- # 面向对象编程
8-
9- # 高级类特性
10-
11- # Java API
12-
13- # 异常处理
14-
15- # 集合与泛型
16-
17- # Java IO流
18-
19- # Java多线程
20-
21- # Java Reflection(Java反射)
22-
23- # 网络编程
24-
25- # Java8 新特性
26-
27- # Java9/Java10/Java11新特性
28-
29- # JavaSE项目
30-
311## 1 Java数据类型
322
333java数据分为两种:基本数据类型(Primitive Type)和引用数据类型(Reference Type)
@@ -81,7 +51,7 @@ Object o=new Object(); // 强引用
8151
8252---
8353
84- ## 2 变量
54+ ## 2 变量与常量
8555
8656Java支持的变量类型有:成员变量和局部变量
8757
@@ -100,7 +70,7 @@ public class Variable{
10070}
10171```
10272
103- 1 . 类变量(静态变量)
73+ 1 . 类变量(静态变量,也称常量 )
10474
10575> 独立于方法之外,用static修饰;存储于方法区中,生命周期与当前类相同;` 为什么是类变量,则需要看完JVM的对象生命周期 `
10676> 无论创建多少对象,对象只拥有类变量的一份拷贝
@@ -116,11 +86,43 @@ public class Variable{
11686
11787### 2.2 局部变量
11888
119- 在方法体中的变量
89+ 1 . 声明在方法、构造方法或者语句块中,在方法、构造方法、或者语句块 ** 被执行的时候创建** ,当它们** 执行完成后,变量将会被销毁**
90+ 2 . 如果方法体中传递的不是引用类型,则只会值传递,而不会改变方法体外的变量值
91+ 3 . ** 没有默认值** ,所以局部变量被声明后, ** 必须经过初始化** ,才可以使用
12092
121- ---
93+ ### 2.3 常量(JVM中有详细解释)
94+
95+ 常量通常也被称为` final变量 ` ,在整个程序中只会被分配一次,为所有对象共享
96+
97+ 定义类型:`final 数据类型 常量名称(=值)
98+
99+ #### 2.3.1 编译时常量
100+
101+ 如:
102+
103+ ``` java
104+ private final static String UER_NAME = " shadow" ;
105+ ```
106+
107+ 不需要在运行时确定,即编译期类不会初始化,你可以当做这常量是独立的,不会依赖类
108+
109+ #### 2.3.2 运行时常量
110+
111+ ``` java
112+ private final static Integer UER_NAME_LENGTH = " shadow" . length();
113+ ```
114+
115+ 运行时才会确定,即需要类的初始化才会完成
116+
117+ #### 2.3.3 区别
122118
119+ 编译期常量如果更改,那么所有引用到该常量的文件都需要更改;如果是运行时常量,则不需要
123120
121+ 比如定义不是内部类文件dog和cat,cat引用dog的编译期常量,一旦dog修改值,用javac编译,cat依旧是旧值
122+
123+ 所以推荐常量使用enum,不用整个再次编译(有待证实,没有部署图床,所以没写代码)
124+
125+ ---
124126
125127## 3 修饰符
126128
@@ -200,12 +202,68 @@ Java中无法引用没有包、默认包和顶级类,`顶级类导入只能由
200202
201203##### 3.5.2.1 使用场景
202204
203- 对于类,如果处于安全和效率考虑可以采用final ,如string
205+ 如果处于 ` 安全和效率 ` 考虑可以采用final ,如string
204206
205207#### 3.5.3 abstract
206208
209+ 功能是定义一个` 抽象类 ` ,abstract和interface类似,主要是区分编程中的`概念
210+
211+ ##### 3.5.3.1 abstract class 和 interface
212+
213+ > 比如需要设计一个动物,动物能够吃喝,然后对动物可以进行拓展,比如猫与狗;所以动物就是抽象,吃喝就是抽象方法,因为不是对应具体的人
214+
215+ > 这种动物最好是用abstract class(猫是动物的子类,所以不用interface),而不是用interface,因为Java是单一继承,多实现。
216+
217+ > 如果动物还要能够骑车或赛马,则可以用interface,因为不是所有的动物都能骑车;
218+
219+ ##### 3.5.3.2 abstract class
207220
221+ 1 . 不能被实例化,因为是抽象的,所以不能new
222+ 2 . 可以有变量和方法,方法可以是抽象的和非抽象的,且抽象方法不能具体实现
223+ 3 . 抽象方法不能声明成static和final
224+ 4 . 如果子类不是抽象类,则必须实现父类的所有抽象方法;如果子类是抽象类,则不用
225+
226+ ##### 3.5.3.3 abstract interface
227+
228+ abstract对于接口来说是多余的,一般不这么使用
208229
209230#### 3.5.4 synchronized 与 volatile
210231
211232在高并发与多线程中
233+
234+ ## 4 运算符
235+
236+ ### 4.1 关系运算符
237+
238+ 简单,自己百度
239+
240+ ### 4.2 位运算符(主要用于算法)
241+
242+
243+ | 类型 | & | 或 | ^ | ~ | << | >> | >>> |
244+ | ---------- | ---------- | ---------- | --------- | ------ | ----------------------------- | -------------------- | ---------------------- |
245+ | 名称 | 与 | 或 | 异或 | 取反 | 左移 | 右移 | 无符号右移 |
246+ | 按位操作 | 都是1置1 | 都是0置0 | 不同置1 | 取反 | 5<<2左移两位,类似于乘法5* 4 | 5>>2右移两位,除法 | 5>>>2,无符号右移两位 |
247+
248+
249+ * ">>>"
250+
251+ 无符号右移,移动之后由0填充
252+
253+ * ">>"
254+
255+ 有符号右移,移动之后由左边的符号位填充
256+
257+ * "<<"
258+
259+ 有符号左移,移动之后右边末尾由0填充
260+
261+
262+
263+ ### 4.3 instanceof 运算符
264+
265+ 用于判断一个对象是否是一个特定的类型` ( Object reference variable ) instanceof (class/interface type) `
266+
267+ ```
268+ boolean type = shadow instanceof String; // 判断 shadow是 String 类型,所以返回真
269+ ```
0 commit comments