奇怪的便宜错误,望大虾指点

coolyulei_ 2005-08-17 07:53:35
这个程序其它都是正确的,就只有一点,必须把main方法中的

myt3和inner变量声明为final的,否则就会产生

local variable myt3 is accessed from within inner;needs to declared final

编译错误,程序很简单,忘大家耐心!!

public class Thread3
{
class Inner
{
private void m4t1 ( )
{
int i = 5;

while ( i -- > 0 )
{
System.out.println ( Thread.currentThread ( ).getName ( ) + " : Inner.m4t1 ( ) = " + i );

try
{
Thread.sleep ( 500 );
}

catch ( InterruptedException ie )
{ }
}
}

private void m4t2 ( )
{
int i = 5;

while ( i-- > 0 )
{
System.out.println ( Thread.currentThread ( ).getName ( ) + " : Inner.m4t2 ( ) = " + i );

try
{
Thread.sleep ( 500 );
}

catch ( InterruptedException ie )
{ }
}
}
}

private void m4t1 ( Inner inner )
{
synchronized ( inner ) // 使用对象锁
{
inner.m4t1 ( );
}
}

private void m4t2 ( Inner inner )
{
inner.m4t2 ( );
}

private Inner createInner ( )
{
return new Inner ( );
}

public static void main ( String [ ] args )
{
// local variable myt3 is accessed from within inner;needs to declared final
Thread3 myt3 = new Thread3 ( );
// local variable inner is accessed from within inner;needs to declared final
Inner inner = myt3.new Inner();
Thread t1 = new Thread ( new Runnable ( )
{
public void run ( )
{
myt3.m4t1 ( inner );
}
} , "t1" );
Thread t2 = new Thread ( new Runnable ( )
{
public void run ( )
{
myt3.m4t2 ( inner );
}
} , "t2" );
t1.start();
t2.start();
}
}
...全文
156 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
congliu 2005-08-17
  • 打赏
  • 举报
回复
如果需要在匿名内部类中访问对象,则此对象必须是final对象。
此是java的语法
kingfish 2005-08-17
  • 打赏
  • 举报
回复
"便宜错误"?,错误还有贵贱之分?

final Thread3 myt3 = new Thread3();
final Inner inner = myt3.new Inner();

匿名内部类只能访问外部final对象

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧