1、类的初始化顺序
知识参考:http://www.cnblogs.com/jackyrong/archive/2008/08/12/1266161.html
类的加载循序为:(静态变量、静态初始化块) > (变量、初始化块) > 构造器
注意:无论是静态还是非静态,变量和块的初始化顺序都受到编码定义顺序的影响,即先定义就先初始化
当出现继承时,父类的会优先于子类的初始化,但并非所有内容都优先初始化,顺序如下:
父类(静态变量、静态初始化块) > 子类(静态变量、静态初始化块) > 父类(变量、初始化块) > 父类构造器 > 子类(变量、初始化块) > 子类构造器
2、常量变量的初始化
a、变量仅被final修饰
a.i、变量定义时就进行初始化
a.ii、构造函数中进行初始化
b、变量同时被final和static修饰
a.i、变量定义时就进行初始化
a.ii、静态块中进行初始化
3、enum 的属性定义为final和非final
标准做法是enum中的变量都要被final修饰,但不使用final修饰也不会报错,但此时enum中的数据是不安全的,也就不符合enum的要求规范
public enum Type {
A(01);
private final int value;
private Type(int value) {
this.value = value;
}
public String getValue() {
return this.value;
}
}
4、enum 属性化、函数化
enum 是一种单例模式,通过命名空间的形式来优化传统的int类型常量,同时丰富和完善了使用方式。
较常量方式他最大的突出点是可属性化、可函数化(支持抽象函数)。
public enum AbstractEnum {
A("0") {void apply(){
System.out.println(AbstractEnum.A.value);
}};
private final String value;
private AbstractEnum (String value) {
this.value = value;
}
abstract void apply();
}
5、EnumSet
EnumSet 可代替位域的使用,使用EnumSet更加简洁和性能优势(EnumSet中使用的批处理均利用位域进行处理),但截止JDK1.6版本为止,还无法创建不可变的EnumSet。
6、EnumMap
EnumMap 可以代替序数索引的使用,即当Map的Key或数组序数有指定要求时,可使用EnumMap来处理
7、值引用和地址引用区别
7.1、值引用即数值的拷贝,不同的变量名持有相同变量值。简单粗暴的理解:所有存放于栈空间内的值,它的传递均为值引用
public static int value = 1;
public static void change(int v) {
v = 2;
}
public static void main(String[] args) {
change(value);
// 此种情况下输入结果为:1
System.out.println(value);
}
7.2、地址引用即地址的拷贝,不同的变量名持有相同的堆空间地址。简单粗暴的理解:所有存放在堆空间内的值,它的传递均为地址引用。
public class Test {
private void test(A a) {
a.age = 24;
}
public static void main(String[] args) {
Test t = new Test();
A a = new A();
t.test(a);
// 此种情况下输入结果为:24
System.out.println(a.age);
}
}
class A{
public int age = 0;
}
7.3、地址引用和值引用的差异?
JAVA中的基础类型(除String外)的值都存放在栈空间内,而对象类型则存放在堆中,由于这种存放的差异导致了所谓的值引用和地址引用。
变量名所占用的空间是栈空间,那么它对应存放在栈空间中的值来说,引用的即本身数值,没有地址指向的概念;而存放在堆空间中的值来说,它是将堆空间中的内存索引地址赋值给变量名。
这样我们就不难理解值引用和地址引用的差异了,在对象类型的传递过程中实际就是值传递,只是这个值比较特殊,是内存空间的索引,而非物理值。
知识参考博客:https://www.cnblogs.com/hanganglin/p/4341854.html
栈

堆

8、接口模拟可扩展枚举类型
通过枚举类型类实现接口的模式,来达到枚举的可扩展性
public enum MyColor implements Print
使用场景
1、通过判断枚举值来做不同逻辑处理时,可简化判断逻辑:switch(myColor) -> myColor.toString();
2、……
123

被折叠的 条评论
为什么被折叠?



