您的位置:首页 > Web前端

Java基础2面向对象:透析类的加载与初始化 对象的初始化 zongjihengfei

2016-09-17 16:19 204 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象 class
相关文章推荐