学习java程序加载

来源:互联网 发布:淘宝淘金币首页 编辑:程序博客网 时间:2024/05/01 11:59

1.程序加载的含义

程序加载,就是将类文件中的一行行代码放到内存当中,只是放到,并不去执行。

2.什么时候会加载

(1)new一个对象时

(2)使用类中的静态成员

3.加载顺序与在内存中存放位置

举例子来说下。在main函数中有下面语句:Person p=new Person("zhangsan",20);

(1)在栈内存中,开辟main函数空间,建立main函数的变量p

(2)加载Person.class文件到内存,注意不会加载类中的非静态成员变量。

(3)如果Person类中有静态代码块,先执行静态代码块

(4)在堆内存中开辟空间,分配内存地址

(5)在堆内存中建立对象的特有属性,进行默认初始化

(6)对Person类进行显示初始化

(7)执行Person类中的构造代码块

(8)执行Person类中的构造函数

(9)完成所有初始化,将内存地址赋值给栈中的变量p


还有语句:p.setName("lisi")

(1)在栈内存中开辟setName方法的空间,里面有对象的引用this、临时变量name

(2)将p的值赋值给this,this就指向了堆中p的一些东东

(3)将“lisi”赋值给临时变量name

(4)将临时变量的值赋给this.name


代码实例:

person类:

public class Person {
    private String name;
    private int age = 0;
    private static String country = "CN";
    
    Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    static{
        System.out.println("Person静态代码块被执行");
    }
    {
        System.out.println(name+"^^^"+age);
    }
    public void setName(String name){
        this.name = name;
    }
    public void speak(){
        System.out.println(this.name+"+++++"+this.age);
    }
    public static void showCountry(){
        System.out.println("country="+country);
    }
}


main方法调用:

public class StaticCodeDemo {
    static {
        System.out.println("StaticDemo静态代码块1");
    }
    public static void main(String[] args){
        Person p=new Person("张三",100);
        p.setName("李四");
        p.speak();
        Person.showCountry();
    }
    

    static {                                        //静态代码块
        System.out.println("StaticDemo 静态代码块2");
    }
}


运行结果:

StaticDemo静态代码块1
StaticDemo 静态代码块2
Person静态代码块被执行
null^^^0
李四+++++100
country=CN

可见加载执行顺序是:静态代码块--->构造代码块--->构造函数


原创粉丝点击