Java的基本数据类型
| boolean | char | byte | short | int | long | float | double |
|---|---|---|---|---|---|---|---|
| 1比特 | 2字节 | 1字节 | 2字节 | 4字节 | 8字节 | 4字节 | 8字节 |
String、Stringbuffer、StringBuilder的区别?
String:用于存放字符的char数组被final修饰符修饰,只允许一次赋值,每改变一次重新生成一个对象。
验证
String a = "aaa";
String b = a;
//a、b相同
System.out.println(a == b);
a = "bbb";
//a引用了另一个对象,因此a、b不相同
System.out.println(a == b);
StringBuilder s1 = new StringBuilder("qqq");
StringBuilder s2 = s1;
System.out.println(s1 == s2);
s1.replace(0,s1.length(),"www");
System.out.println(s1 == s2);
结果
true
false
true
true
StringBuilder:线程安全的可变字符序列 StringBuffer:非线程安全的可变字符序列
类的实例化顺序
- 父类的静态成员
- 父类的静态代码块
- 子类的静态成员
- 子类的静态代码块
- 父类的普通成员
- 父类的普通代码块
- 子类的普通成员
- 子类的普通代码块
相同级别的元素按照在代码中出现的顺序执行。
验证代码
static class FatherDemo {
private static int numF1;
private int numF2;
{
System.out.println("父类的成员变量 : " + numF2);
System.out.println("父类的非静态代码块");
}
static {
System.out.println("父类的静态字段 : " + numF1);
System.out.println("父类的静态代码块");
}
public FatherDemo() {
System.out.println("父类的构造器");
}
}
static class SonDemo extends FatherDemo {
private static int numS1;
private int numS2;
{
System.out.println("子类的成员变量 : " + numS2);
System.out.println("子类的非静态代码块");
}
static {
System.out.println("子类的静态字段 : " + numS1);
System.out.println("子类的静态代码块");
}
public SonDemo() {
System.out.println("子类的构造器");
}
}
static public class Box {
public static void main(String[] args) {
FatherDemo ab = new SonDemo();
System.out.println();
ab = new SonDemo();
}
}
结果
父类的静态字段 : 0
父类的静态代码块
子类的静态字段 : 0
子类的静态代码块
父类的成员变量 : 0
父类的非静态代码块
父类的构造器
子类的成员变量 : 0
子类的非静态代码块
子类的构造器
父类的成员变量 : 0
父类的非静态代码块
父类的构造器
子类的成员变量 : 0
子类的非静态代码块
子类的构造器
备注:现在只知道类加载的基本顺序,还不理解类加载的基本原理
抽象类与接口的区别
- 接口可以有多个实现而抽象类只能单继承
- 抽象类定义的变量只能是公共静态常量
- 接口类只能定义方法的声明
- 接口实现必须实现接口定义的所有方法,而抽象类可以进行选择
Final的用途
- 修饰类时,类为最终类,不可被继承
- 修饰方法时,方法不可被重写
- 修饰引用变量,引用变量的值可以改变,但是引用自身不可改变,如果修饰的是基本数据类型,则将变量的值不可改变
- 修饰常量,在编译阶段将常量写入调用类的常量池中
访问修饰符
- public 任意访问
- default 本类和同一个包内
- protected 本类和子类
- private 本类
浅拷贝和深拷贝的区别
- 浅拷贝只拷贝对象本身,本身包含的引用变量指向的对象不拷贝
- 深拷贝拷贝本身以及所有引用指向的所有对象
序列化
什么是序列化
把数据结构或者对象转换成二进制串