线程

来源:互联网 发布:矩阵机箱 编辑:程序博客网 时间:2024/06/10 21:16

  我写这编文章的时候完全被搞乱了,而这时正好学到线程。 

 其实感觉不是什么线程啊,流啊的感念,让我感到蛋疼,而是它们为什么会这样写让我感觉很囧。

 

  举个多线程的例子:

public class test{

public static void main(String[] args){

Thread td = new Thread();

td.start();

System.out.println("启动第二个线程");

for(i=1;i<20;i++)

{System.out.println(Thread.current.getName()+":world");}

}}

-----------------------------------------------------

public class Thread extends Thread{

public void run(){

for(i=1;i<20;i++)

{System.out.println(Thread.current.getName()+":Hello");}

}

}

老师说mian函数本身就相当于一个线程,是一个主线程。那么这样应该是个多线程例子,让我不解的是为什么要在主函数mian的括号中写“String【】 args”,还要声明为static呢? 老师说的简单,我百度了一下,下面是讲解

/*
static关键字,告知编译器main函数是一个静态函数。也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就已经存在了。如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示main()方法不存在。因为包含main()的类并没有实例化(即没有这个类的对象),所以其main()方法也不会存。而使用static修饰符则表示该方法是静态的,不需要实例化即可使用

*/

这句话我的理解是mian本身就是一个类,但是我们在mian函数中并没有对该类进行实例化,既没有这个类的对象,main方法不存在,而声明为static后就可以这样写。
被static修饰后的成员,在编译时由内存分配一块内存空间,直到程序停止运行才会释放,那么就是说该类的所有对象都会共享这块内存空间,看一下下面这个例子:
class TStatic{
static int i; //把i声明为static
public TStatic(){
i = 4;
}
public TStatic(int j){
i = j;
}
public static void main(String args[]){
TStatic t = new TStatic(5); //声明对象引用,并实例化
TStatic tt = new TStatic(); //同上
System.out.println(t.i);
System.out.println(tt.i);
System.out.println(t.i);
}
}
这段代码里面TStatic类有一个static的int变量I,有两个构造函数,第一个用于初始化I为4,第二个用于初始化i为传进函数的值,在main中所传的值是5,程序首先声明对象的引用t,然后调用带参数的构造函数实例化对象,此时对象t的成员变量I的值为5,接着声明对象tt,调用无参数的构造函数,那么就把对象tt的成员变量i的值初始化为4了,注意了,在这里i是static,那就是说该类的所有对象都共享该内存,那也就是说在实例化对象tt的时候改变了i的值,那么实际上对象t的i值也变了,因为实际上他们引用的是同一个成员变量。最后打印的结果是三个4。

 

那么我明白了为什么主函数要声明为static了,可main的参数为什么是String【】 args呢?有人说是参数args的主要作用是为程序使用者在命令行状态下与程序交互提供了一种手段。————————这个问题还是不懂啊!!!

原创粉丝点击