@@ -114,16 +114,98 @@ public class Variable{
114114> 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
115115> 生命周期:在对象创建时创建,在对象销毁时销毁
116116
117- ### 2.2局部变量
117+ ### 2.2 局部变量
118118
119119在方法体中的变量
120120
121+ ---
122+
123+
124+
121125## 3 修饰符
122126
127+ Java中无法引用没有包、默认包和顶级类,` 顶级类导入只能由另一个顶级类导入 `
128+
123129### 3.1 public
124130
131+ * 公共的,对象可以任意地方被调用
132+ * 且该修饰的方法、变量能够被继承
133+
125134### 3.2 private
126135
127- ### 3.3 protected
136+ 私有的,只能在同一个类中被访问;且该修饰的方法、变量不能被继承
137+
138+ ### 3.3 protected(继承访问权限)
139+
140+ * protected 可以修饰数据成员,构造方法,方法成员,` 不能修饰类(内部类除外) `
141+ * ` 接口及接口的成员变量和成员方法 ` 不能声明为 protected
142+ * 保护的意思就是 保护我的家人,只能跟我有继承关系的人才能访问
143+
144+ 使用场景:继承父类的protected的函数或变量,对于其他成员是private,所以主要用于代码的简洁性,顺序执行的代码
145+
146+ ### 3.4 default(同级包访问权限)
147+
148+ * 默认的,即包权限,默认能被同一个包下的类访问
149+ * 不管是都是继承,只要不在同一个包下,则不能被访问
150+
151+ ### 3.5 非访问修饰符
152+
153+ 底层原理将在JDK源码中查看
154+
155+ #### 3.5.1 static (静态修饰符)
156+
157+ 1 . 用于修饰方法和变量,且方法和变量的生命周期跟类一致,不管创建多少实例对象且只有一份拷贝,` 不能修饰类 ` ;静态变量主要配合final+static使用,可以使用类访问
158+ 2 . 对于static方法不能含有非静态成员的变量或方法,因为static是在类加载时初始化,而非静态则需要具体的对象才能调用
159+
160+ ##### 3.5.1.1 使用场景
161+
162+ 1.加载机制不同
163+
164+ 静态变量是被所有对象所共享,在内存中只有一个副本,是在类初次加载的时候初始化
165+
166+ 非静态变量是类产生的多个对象每人一份,创建对象的时候初始化
167+
168+ > 加载机制不同,所有频繁使用的变量可以用静态变量
169+
170+ 2.static块
171+
172+ 根据加载机制不同,定义个static块可以更快的初始化需要的` 静态对象 ` ;类中可以有多个static块,在类每次加载时,按照顺序执行。
173+
174+ > 注意:static不能修饰局部变量,且static不会改变访问权限
175+
176+ 3.初始化加载顺序
177+
178+ 父类静态成员变量->父类静态代码块->子类静态成员变量->子类静态代码块->父类非静态成员变量->
179+
180+ 父类非静态代码块->父类构造函数->子类非静态成员变量->子类非静态代码块->子类构造函数
181+
182+ #### 3.5.2 final(最终的)
183+
184+ 1 . 可以修饰类、方法和变量(包括成员变量和局部变量)
185+ 2 . 修饰类时表明是最终的,即不可继承
186+ 3 . 修饰变量时,如果是基本数据类型,则初始化后不可更改,如果是引用数据类型,则初始化后不能再指向其他的对象(不能再被赋值)
187+
188+ ``` java
189+ final String s = " abd" ;// final修饰的是引用变量,但指向的对象内容是可变的
190+ s = " sdf" ;// 错误}
191+ ```
192+
193+ ``` java
194+ String s = " abd" ;// final修饰的是类String,而没修饰变量引用s,所以引用是可变的
195+ s = " sdf" ;// 正确
196+ ```
197+
198+ 第二个为什么是正确的,主要在于String s只是一个对象的引用,不是对象;而”abd“字符串一直在常量池中
199+ 4 . final会对编译期做常量优化,相当于直接访问这个变量,不需要在运行时确定
200+
201+ ##### 3.5.2.1 使用场景
202+
203+ 对于类,如果处于安全和效率考虑可以采用final,如string
204+
205+ #### 3.5.3 abstract
206+
207+
208+
209+ #### 3.5.4 synchronized 与 volatile
128210
129- ### 3.4 default(什么都不写时)
211+ 在高并发与多线程中
0 commit comments