java中程序的执行的原理如怎么创建空间,创建对象等
2014-05-28 21:33
218 查看
这里举一个简单的例子:
public class Test{
public static void main(String[] args){
String s;
s = "hello world";
Student s1 ;
s1 = new Student();//这里Student是引用类型
System.out.println(s);
}
}
就这个简单的程序我来说一下其工作的原理,希望能有助于跟我一样的菜鸟:
编译器通过主类找到编译入口编译成class文件,通过加载类到内存中(加载,验证,解释和运行),java虚拟机通过类关联以及static找到主方法,在执行过程中java虚拟机可以传参,此时加载String[]这个类,利用String[],为此参数的类型,此时默认为NULL,String为引用类型,所以此时加载String类定义了一个局部变量,所以在栈区开辟空间s,又“hello world”为常对象,而方法区有静态数据区和常数据区,此时则在场数据区开辟空间,按此,新建对象时new 在堆区按照实例变量的类型开辟空间,此时new调用构造方法Student(),以及产生this指针,将这个堆里面的对象地址给S1,而方法区存放的自然是方法,此时system类也会加载到内存,此时则有了5个类5个对象4个方法。
这个列表没画的完全,仅供参考和学习。
public class Test{
public static void main(String[] args){
String s;
s = "hello world";
Student s1 ;
s1 = new Student();//这里Student是引用类型
System.out.println(s);
}
}
就这个简单的程序我来说一下其工作的原理,希望能有助于跟我一样的菜鸟:
编译器通过主类找到编译入口编译成class文件,通过加载类到内存中(加载,验证,解释和运行),java虚拟机通过类关联以及static找到主方法,在执行过程中java虚拟机可以传参,此时加载String[]这个类,利用String[],为此参数的类型,此时默认为NULL,String为引用类型,所以此时加载String类定义了一个局部变量,所以在栈区开辟空间s,又“hello world”为常对象,而方法区有静态数据区和常数据区,此时则在场数据区开辟空间,按此,新建对象时new 在堆区按照实例变量的类型开辟空间,此时new调用构造方法Student(),以及产生this指针,将这个堆里面的对象地址给S1,而方法区存放的自然是方法,此时system类也会加载到内存,此时则有了5个类5个对象4个方法。
栈区 | 堆区 | 方法区 |
s s1 | System.out System.in System.error 还有Student这个类的对象 | 加载了test类 存放了hello world等 |
相关文章推荐
- Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。
- java创建对象内存分配空间及其原理一
- java 程序执行原理
- lotus中代理的底层是c++,对java代理中的创建的对象必须释放空间
- java基础教程2---->程序执行过程映射到内存怎么变化
- JAVA调用系统命令或可执行程序--返回一个Runtime运行时对象,然后启动另外一个进程来执行命令
- java加载类创建对象的过程以及静态代码段的执行时机
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- Java中创建对象的时候代码执行顺序
- Java中创建对象时代码执行顺序
- java 程序加载过程---2-创建类实例对象
- hadoop的mapreduce的join操作原理【里面用例子讲解的,但是没理解,怎么执行程序】
- 怎么优化JAVA程序的执行效率和性能?
- java程序中创建触发器、存储过程等对象
- Java中创建对象时,初始化成员变量的代码的执行顺序
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- JAVA对象创建执行顺序实验
- java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:
- java利用反射原理:根据某个对象的名称和方法去执行该方法。
- java 对象创建时执行顺序