黑马程序员技术交流社区

标题: 主函数中可以使用this吗?为什么? [打印本页]

作者: 雨晴    时间: 2013-9-23 14:55
标题: 主函数中可以使用this吗?为什么?
本帖最后由 杨增坤 于 2013-9-24 08:27 编辑

今天在看多线程时,老师在run方法中用this调用getName()来获取线程名称,
于是我也在主函数中用this.getName()来获取主线程的名称,但报错,后来才发现原来.....

不过我还是看看大家是否很快能发现问题,因为我差不多3分钟才明白是怎么回事!!!

作者: jìng╮煜    时间: 2013-9-23 15:01
不带你这样玩的,资源共享嘛.有问题就说出来.```````````````解决了也说一下交流
作者: doitforyou    时间: 2013-9-23 15:09
哈,我凭感觉说,应该是匿名内部类的原因,不知道对不对。
主函数中肯定要明确对象的,不能直接用this。
所以可能使用了匿名内部类,重写方法,使用this调用其他方法。
作者: 陌上尘    时间: 2013-9-23 16:39
this.getName()中的getName()方法是Thread类中的方法,而非Main类中的方法,所以会出错。
自己胡说的,不知道对不对,请大师指点啊~{:soso_e121:}
作者: 杨增坤    时间: 2013-9-23 16:55
主函数是程序的入口,也是一个静态的函数,只要是类一加载,那么就会调用此方法,此时还没有对象,所以使用this的话,就会出错误,
也可以从另一方面考虑,抛出this的原因,从方法方面考虑。如果你使用的是this.getName(),也许是在一个测试类中使用的,此时该对象中没有getName()方法,所以也会报错。

作者: 梁贺    时间: 2013-9-23 18:17
主函数中可以使用this么? 答案绝对是不可以。
因为静态优先于对象存在,它是类加载的时候而加载的。随着类的消失而消失。
而this是哪个对象在调用的时候this为哪个对象。 此时对象还没创建,所以不能使用this关键字。

你老师的那个this是指当前线程类,它的getName()方法是可以的。

      
作者: yting_xmei1129    时间: 2013-9-23 18:51
这个肯定不可以啊!主函数只是提供了一个程序的入口而已,就相当于一个房门,你都没进房门,怎么能知道房门里面有什么呢是不是。所以主函数也是这个道理,主函数跟你的类并没有什么联系,并不能用 this ,主函数随便写在哪里都可以,比如下面的代码--->


public class MainDemo1 {
        public static void main(String[] args) {
                System.out.println("123");
                System.out.println(new MainT().getMain());
        }
}
class mainTest {
        public static void main(String[] args) {
                System.out.println("456");
                System.out.println(new MainT().getMain());
        }
}

class MainT {
        private int main = 20;

        public int getMain() {
                return main;
        }

        public void setMain(int main) {
                this.main = main;
        }
}


这个运行的时候要你选择主函数,也证明了主函数可以随便放在哪里了

希望可以帮到楼主、、、

The you smile until forever 、、、、、、、、、、、、、、、、、、、、、

作者: 乔兵    时间: 2013-9-23 19:34
如果问题已经解决,请重新编辑帖子,修改帖子的主题分类为“已解决”{:soso_e181:}




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