黑马程序员技术交流社区

标题: 多线程的一个题目 请教一下大家 [打印本页]

作者: 沙漠里的小鱼    时间: 2012-2-26 01:26
标题: 多线程的一个题目 请教一下大家
本帖最后由 沙漠里的小鱼 于 2012-2-26 01:28 编辑

class Hello extends Thread {  
   public void run() {     
    for (int i = 0; i < 7; i++) {     
        if (count > 0) {      
          System.out.println("count= " + count--);           
  }   
   }   
}

public static void main(String[] args) {     
    hello h1 = new hello();   
     hello h2 = new hello();        
hello h3 = new hello();      
   h1.start();   
     h2.start();        
h3.start();     
}   
   private int count = 5;
}
我要问的问题是为什么最后定义一个private int count = 5;    还有一个问题是为什么要把主函数Main 放在类Hello 中  可以把主函数拿到类Hello外吗 谢谢;
   
作者: 许圣建    时间: 2012-2-26 01:35
不知道我的回答是不是你要问的:
1,变量定义在一个类中什么位置不重要,关键是在哪个大括号里,很重要。
     变量定义在后面这可能是依据测试优先的原则,在定义一个类时,优先发掘清楚它有什么方法,属性是其次,
     这样有利于模块化设计,类与类之间的消息传递。
2,main函数放在哪里也不重要,因为即使你放在这个对象之中,你仍然要创建这个类的实例之后才能调用这个类的非静态方法,
     因为main是static的,而且我们也要避免main函数与所在类的过多耦合,降低耦合度,能使程序更加干净,易维护。
作者: tanlei200620    时间: 2012-2-26 01:41
class Hello extends Thread {
        public void run() {
                for (int i = 0; i < 7; i++) {
                        if (count > 0) {
                                System.out.println("count= " + count--+Thread.currentThread().getName());
                        }
                }
        }

        public static void main(String[] args) {
                Hello h1 = new Hello();
                Hello h2 = new Hello();
                Hello h3 = new Hello();
                h1.start();
                h2.start();
                h3.start();
        }
        private int count = 5;
}
把代码修改了下,便于你学习。

最后定义的 private int count = 5;   只是提供一个供线程操作的资源,它定义在最后,也算是一种习惯吧,
因为有很多人建议将类的成员方法定义在成员变量的前面,由于人们通常只关心方法,忽视成员变量。
主函数必须在一个类中才能运行,放在这个类Hello中,只是为了方便(但是它不属于类Hello),所以可以放在外面的,这个外面是在一个类中,又在那个类的成员方法之外。

作者: 沙漠里的小鱼    时间: 2012-2-26 05:32
tanlei200620 发表于 2012-2-26 01:41
class Hello extends Thread {
        public void run() {
                for (int i = 0; i < 7; i++) {

那把 private int count = 5;去掉可以吗 我就是不大明白为什么要定义这个 有什么作用呢  还有 那个main方法可以放在别的类中吗
作者: 泮和顺    时间: 2012-2-26 08:43
你楼上的说这么清楚了 不知道你还要问什么 呵呵
作者: 沙漠里的小鱼    时间: 2012-2-26 11:28
泮和顺 发表于 2012-2-26 08:43
你楼上的说这么清楚了 不知道你还要问什么 呵呵

   我不明白 private int count = 5;去掉可以吗 我就是不大明白为什么要定义这个 有什么作用呢  还有 那个main方法可以放在别的类中吗
作者: xieguanxiong    时间: 2012-3-3 12:49
如果最后不定义count,里面没有count这个变量,根本运行不了。可以把主函数main自定义一个类里面。
作者: 蒙武辉    时间: 2012-3-3 14:27
可以另外定义一个线程类的,主函数在一个类中。 private int count = 5;之所以定义这个变量,是要拿他来做 判断。if(count>0) ....
这样写你看得容易理解点:
class Hello extends Thread {
            private int count = 5;
        public void run() {
                for (int i = 0; i < 7; i++) {
                        if (count > 0) {
                                System.out.println("count= " + count--+Thread.currentThread().getName());
                        }
                }
        }

        public static void main(String[] args) {
                Hello h1 = new Hello();
                Hello h2 = new Hello();
                Hello h3 = new Hello();
                h1.start();
                h2.start();
                h3.start();
        }
      
}




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