学习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
可见加载执行顺序是:静态代码块--->构造代码块--->构造函数
程序加载,就是将类文件中的一行行代码放到内存当中,只是放到,并不去执行。
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
可见加载执行顺序是:静态代码块--->构造代码块--->构造函数
相关文章推荐
- 学习使用用Eclipse编写java程序
- Java学习回顾-对象在内存中的加载过程
- 学习Java程序制作Jar、exe和安装包过程中的问题记录及理解
- java学习之路之基本语法-程序流程控制-switch语句练习题
- java基础增强之类加载器学习笔记
- 运行JAVA CMD程序 找不到或无法加载主类怎么解决
- 命令行执行Java程序加载指定目录中的Jar文件
- [ Java学习 ] 一些Java程序 001
- Android(java)学习笔记261:JNI之编写jni程序适配所有处理器型号
- Java_socket程序学习03-一个客户端对一个服务器-交互(服务器端)--01
- Java程序加载mybatis的大致流程
- Java学习提要——Class类基础与动态加载类
- java网络编程学习之用java编写客户/服务器程序
- java入门程序100例学习笔记(004个人所得税)
- java远程类加载与轻客户端(程序中的胖子或瘦子)
- java JDK8 学习笔记——第17章 反射与类加载器
- java程序中的延时加载异常及解决方案
- 操作系统学习 (二)用户程序的加载和运行
- Java学习笔记(一)——Java程序的运行机制
- 第一个java程序的学习