您的位置:首页 > 编程语言 > Java开发

学习java程序加载

2013-07-04 15:23 204 查看
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

可见加载执行顺序是:静态代码块--->构造代码块--->构造函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: