A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雨晴 初级黑马   /  2013-9-23 14:55  /  1362 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-24 08:27 编辑

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

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

7 个回复

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

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
主函数中可以使用this么? 答案绝对是不可以。
因为静态优先于对象存在,它是类加载的时候而加载的。随着类的消失而消失。
而this是哪个对象在调用的时候this为哪个对象。 此时对象还没创建,所以不能使用this关键字。

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

      

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
这个肯定不可以啊!主函数只是提供了一个程序的入口而已,就相当于一个房门,你都没进房门,怎么能知道房门里面有什么呢是不是。所以主函数也是这个道理,主函数跟你的类并没有什么联系,并不能用 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 、、、、、、、、、、、、、、、、、、、、、

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
乔兵 高级黑马 2013-9-23 19:34:42
8#
如果问题已经解决,请重新编辑帖子,修改帖子的主题分类为“已解决”{:soso_e181:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马