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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨玉揆 黑马帝   /  2011-12-2 16:20  /  7698 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨玉揆 于 2011-12-3 20:26 编辑

今天跟着老师的思路敲这样的一段代码
  1. class Resouce
  2. {
  3.         private String name;
  4.         private int id = 1;
  5.         private boolean flag = false;
  6.         public synchronized void set(String name)
  7.         {
  8.                 while(flag)
  9.                         try{this.wait();}catch(Exception e){};
  10.                 this.name = name+"--"+id++;
  11.                 System.out.println(Thread.currentThread().getName()+"...生产者..."+name);
  12.                 flag = true;
  13.                 this.notifyAll();
  14.         }
  15.         public synchronized void out()
  16.         {
  17.                 while(!flag)
  18.                         try{this.wait();}catch(Exception e){}
  19.                 System.out.println(Thread.currentThread().getName()+"...消费者......."+name);
  20.                 flag = false;
  21.                 this.notifyAll();
  22.         }
  23. }
  24. class Pro implements Runnable
  25. {
  26.         private Resouce res;
  27.         public Pro(Resouce res)
  28.         {
  29.                 this.res = res;
  30.         }
  31.         public void run()
  32.         {
  33.                 while(true)
  34.                         res.set("+商品+");
  35.         }
  36. }
  37. class Con implements Runnable
  38. {
  39.         private Resouce res;
  40.         public Con(Resouce res)
  41.         {
  42.                 this.res = res;
  43.         }
  44.         public void run()
  45.         {
  46.                 while(true)
  47.                         res.out();
  48.         }

  49. }
  50. class ProConDemo
  51. {
  52.         public static void main(String[] args)
  53.         {
  54.                 Resouce r = new Resouce();
  55.                 Pro p = new Pro(r);
  56.                 Con c = new Con(r);
  57.                 Thread t1 = new Thread(p);
  58.                 Thread t2 = new Thread(p);
  59.                 Thread t3 = new Thread(c);
  60.                 Thread t4 = new Thread(c);
  61.                 t1.start();
  62.                 t2.start();
  63.                 t3.start();
  64.                 t4.start();
  65.                
  66.         }
  67. }
复制代码
编译时电脑主板报了三声的警报声,出现了这样的错误提示: ,看了很久也不知道是什么问题,但是最后在改Con这个类,将他改成Con1,就没事了,好奇怪,高手指点。。


该贴已经同步到 杨玉揆的微博

评分

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

查看全部评分

7 个回复

倒序浏览
con是Windows下的一个保留字,文件夹、文件名都不能以此命名,且不分大小写。你可以在window里创建一个con名的文件夹或者是con.java/Con.java,系统会提示指定的设备名无效。SUN中有规定con是java的保留字。所以不能用这个名字。

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘海涛 于 2011-12-2 18:49 编辑

原因是操作系统对保留字符 con


在window下不能够创建con的文件夹以及前缀con的任何文件,且不区分大小写。
你在编译的时候,在硬盘上要生成class文件 为Con.class Window是不允许的。
所以会报错。
Con1编译生成Con1.class window是可以被创建的。
经过我测试sun好像没有保留该字符,
编译如果类名是保留字符会报:需要 <标识符> 错误;

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
许邦存 来自手机 黑马帝 2011-12-2 19:19:49
板凳
学习了,不懂
回复 使用道具 举报
本帖最后由 wangdeyun 于 2011-12-2 20:10 编辑
  1. public class Demo {

  2.         public static void main(String[] args) {
  3.                 int Con=1;
  4.                 System.out.println(Con);
  5.         }

  6. }
复制代码
这段代码说明了楼上两位说的是错的,更何况Java中的关键字即保留字在Eclipse中编写时会变颜色.
但这个类名在Java中是无效的

未命名.jpg (24.92 KB, 下载次数: 121)

未命名.jpg

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 刘海涛 于 2011-12-2 20:02 编辑
wangdeyun 发表于 2011-12-2 19:53
这段代码说明了楼上两位说的是错的,更何况Java中的关键字即保留字在Eclipse中编写时会变颜色. ...







看图就知道了
编译和运行 MyEclipse 9.1 JDK 1.6
回复 使用道具 举报
李栋 金牌黑马 2011-12-2 21:29:18
7#
哇,那个错误提示好美啊
回复 使用道具 举报
侯伟浩 黑马帝 2011-12-3 19:59:34
8#
学习了,多谢。楼上那位你怎么还是1分啊,很多天之前看你就是一分。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马