黑马程序员技术交流社区

标题: 线程的运行过程 [打印本页]

作者: 郭俊    时间: 2013-7-23 17:07
标题: 线程的运行过程
本帖最后由 郭俊 于 2013-7-24 09:31 编辑

  一复习发现问题很多额,学了后面,又忘记前面的,啊啊,谁能就这个程序讲一下线程的运行啊运行不是先加载栈区吗,然后堆区,怎么走的啊,越详细越好
  1. package it.ihorse;
  2. public class Sample{
  3.         private int a;
  4.         public int method(){
  5.                 int b=0;a++;b=a; //主线程执行a++,然后在内存中怎么一个流程啊
  6.                 return b;
  7.         }
  8.         public static void main(String[] args){
  9.                 Sample s=null;int a=0;s=new Sample();
  10.                 a=s.method();
  11.                 System.out.println(a);
  12.         }
  13. }
复制代码

作者: ☆今☆    时间: 2013-7-23 21:10
Sample s=null;
是先在栈中声明Sample的引用.
int a=0
在栈中又声明了一个int的变量a,初值是0
s=new Sample();
是在堆中创建一个Sample类的对象,并将地址赋给s;
a=s.method();
是method的方法进栈,
在method方法中,声明了一个int类型的变量b,初始是0.
a++将对象s中的a+1,a变为1;
b=a
将a的值赋值给了b(于是b=1),并返回了b的值
将b的值赋值给了main函数中的变量a,a=1
然后方法method()就弹栈了
然后输出a;a为1
接着main方法也弹栈了
作者: 月亮人生    时间: 2013-7-23 22:46
/*
类首先加载,若程序中有静态代码块,那么静态代码块也跟着类的加载而加载。
接着main 函数压栈

Sample s=null;  //在栈中定义Sample类型的变量s,赋初值为null
int a=0;  //在栈中定义int类型的变量a,赋初值为0
s=new Sample();// 在堆内存中开辟空间,里面有 私有的成员变量 a,初始化值为0;
                                //在将堆内存的地址赋值给变量s
a=s.method();//method方法压栈,定义int类型的变量b,并赋初始值0; a++;是将a的值自增1  
                        //b=a; 将更新后的a的值赋值给b
return b;//返回b的值。 并赋给main方法中的变量a。

method 方法执行完后,就会将method方法弹出栈。

最后就是输出a的值了。

然后main方法也出栈。





*/
作者: 周骑骏    时间: 2013-7-24 07:04
对象初始化
首先是加载类文件
然后通过new在堆内存开辟空间
然后对象中的属性默认初始化。
构造函数初始化
1.在构造函数中先到父类初始化
2.在构造函数中再进行显示初始化
3.在构造函数进行构造代码块初始化,
4.在构造函数中执行自定义的代码初始化
5.构造函数执行完,堆内存对象初始化完毕
接着就是执行主函数的内容。如果是new的话就会执行上面的new的流程,一般对象都在堆中,除了静态的会加载到类中的。如果是调入函数的话,就会按照栈的规律,加载进内存。运行完一个方法就弹出一个方法。
向下运行。
作者: 郭俊    时间: 2013-7-24 09:27
本问题已解决,谢谢各位童鞋




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2