关于java断言的一个问题:其他类中的断言在public类中无法实现?

airwolf1216 2013-05-27 01:37:21
问各位一个关于java断言的问题
这个程序(保存为CalorieCounter.java文件)


class A
{
boolean fun(int i)
{
if(i>0)
{
try
{
assert i<0:"i<0";
System.out.println("111111111111111111111");
}
catch (AssertionError nfe)
{
System.out.println("2222222222222 "+nfe.getMessage());
}

return true;
}
else
{
try
{
assert i>0:"i>0";
System.out.println("3333333333333333333333");
}
catch (AssertionError nfe)
{
System.out.println("4444444444444 "+nfe.getMessage());
}

return false;
}
}

}


public class CalorieCounter
{

public static void main(String[] arguments)
{
A ca=new A();

try
{
assert ca.fun(10) : "7th fun(10) <0";
System.out.println("55555555555555555555");
}
catch (AssertionError nfe)
{
System.out.println(" assert fun(10) <0 6666666666666666666 "+nfe.getMessage());
}

try
{
assert ca.fun(-10);
System.out.println("7777777777777777777777");
}
catch (AssertionError nfe)
{
System.out.println(" assert fun(-10) <0 8888888888888888888 "+nfe.getMessage());
}

}
}






运行的时候这样java -ea:A CalorieCounter
以此来触发A类中的断言
但是运行结果是
55555555555555555555
7777777777777777777777

为什么会导致A类中的fun函数无法调用???
请教各位
...全文
152 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
airwolf1216 2013-05-27
  • 打赏
  • 举报
回复
引用 6 楼 xiuxiu2by 的回复:
我也不知道文档是怎么说的 但是从测试列子来看的话 如果你不开启断言 那句断言是直接忽略的 你直接用调用函数 因为你开启了A类断言 所以断言是执行的 然后你没开启CalorieCounter断言 所有CalorieCounter类里的断言直接被忽略了 以至于A类的函数没执行 你可以试试java -ea:A -ea:CalorieCounter CalorieCounter
我好像明白点你那个意思了 谢了兄弟 甭说 分全给你了
抱抱枯叶 2013-05-27
  • 打赏
  • 举报
回复
引用 5 楼 airwolf1216 的回复:
上条留言我都是这样执行的 运行的时候这样java -ea:A CalorieCounter
我也不知道文档是怎么说的 但是从测试列子来看的话 如果你不开启断言 那句断言是直接忽略的 你直接用调用函数 因为你开启了A类断言 所以断言是执行的 然后你没开启CalorieCounter断言 所有CalorieCounter类里的断言直接被忽略了 以至于A类的函数没执行 你可以试试java -ea:A -ea:CalorieCounter CalorieCounter
airwolf1216 2013-05-27
  • 打赏
  • 举报
回复
上条留言我都是这样执行的 运行的时候这样java -ea:A CalorieCounter
airwolf1216 2013-05-27
  • 打赏
  • 举报
回复
引用 3 楼 xiuxiu2by 的回复:
对不起楼主了 这次我真弄错了 刚才写了个测试 当你在A开启断言而CalorieCounter类没有开启的时候 CalorieCounter类里的断言语句里的fun函数没执行 直接过了 要CalorieCounter类里的断言也开启 才会执行到A类的fun函数 应该是这个原因吧 其中test3类就是你的CalorieCounter类
java标准 或者 哪些文档中有这一说? 上面这个例子,如果在CalorieCounter的main中这么调用的话,A类的断言是能触发的 ca.fun(10); 但是你若这么写,就连fun都执行不了了 assert ca.fun(10);
抱抱枯叶 2013-05-27
  • 打赏
  • 举报
回复
对不起楼主了 这次我真弄错了 刚才写了个测试 当你在A开启断言而CalorieCounter类没有开启的时候 CalorieCounter类里的断言语句里的fun函数没执行 直接过了 要CalorieCounter类里的断言也开启 才会执行到A类的fun函数 应该是这个原因吧

其中test3类就是你的CalorieCounter类
抱抱枯叶 2013-05-27
  • 打赏
  • 举报
回复
不好意思下面的命令没看到 我用自己的试了下 A类中的断言是成功执行的
抱抱枯叶 2013-05-27
  • 打赏
  • 举报
回复
你没有开启断言吧 选择菜单:Run ---> Run Config....---> 选择 Arguments 选项卡 在 VM arguments 文本框中输入: -ea 注意 中间没有空格,如果输入 -da 表示禁止断言。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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