1.类的加载
什么时候加载类?
编译期,从自动加载java.lang.*到你import的东西
再就是在代码中找出 自定义类名 加载
加载类的过程? ——只是相当于把这些东西的代码引进一个类
静态变量 ——-> 方法区静态区域
非静态方法 ——-> 方法区非静态区域
静态方法 ——–> 方法区静态区域(需要创建对象调用)
普通初始化块 ——>方法区非静态区域
静态初始化块 ——->方法区静态区域
2.类的初始化
什么时候开始类的初始化?
但凡 “初始化” 都是运行期间开始的
类的初始化干了什么?
静态的东西允许使用了:
立即使用静态初始化块一次
3.对象的初始化
什么时候开始?
调用构造器初始化,运行期间才能干这事
干了什么?
默认初始化 –>显示初始化 –> 初始化块初始化 –>构造器初始化
1.输出顺序
class Fu{
Fu(){
System.out.println("new Fu");// 2
}
public class Inner{
public Inner(){
System.out.println("Fu.Inner()");//1 4
}
public void f(){
System.out.println("Fu.f()");
}
}
Inner in=new Inner();
public void getInner(Inner in){
this.in=in;
}
}
public class Zi extends Fu{
Zi(){
System.out.println("new Zi");//3
getInner(new Inner());
}
public class Inner extends Fu.Inner{
public Inner(){
System.out.println("Zi.Inner()");//5
}
public void f(){
System.out.println("Zi.f()");
}
}
public static void main(String[] args) {
Fu f=new Zi();
}
}
2.创建Zi()
Fu静态初始化块 Zi静态初始化块 Fu普通初始化块 Fu构造器 Zi普通初始化块 Zi构造器
如果类A中A型变量a什么时候初始化?
public class Demo {
static Demo d = new Demo();
int a=3;
Demo() {
System.out.println("这个d已经被初始化了!");
this.printDemo();
System.out.println(a);
}
public void printDemo(){
System.out.println("这个方法在初始化类时候调用成功了!");
}
static{
// Demo t4 = new Demo();
}
public static void main(String[] args) {
}
}
d=new Demo()是在初始化完类后进行的,因为其本身是初始化对象,所以所有方法均可以调用
牛刀小试
public class Main21 {
static{
System.out.println("1");
}
{
System.out.println("2");
}
int a=110;
static int b=112;
static Main21 ma=new Main21();
Main21(){
System.out.println("3");System.out.println("a="+a+",b="+b);
}
static void f(){
System.out.println("4");
}
public static void main(String[] args) {
f();
}
}
结果
1
2
3
a=110,b=112
4