为什么省略if后的大括号{}会报错

csnd2012 2015-06-21 09:26:00
abstract class Animal {
public abstract void eat();
public void method(Animal a) {
if (a instanceof Dog)
Dog d = (Dog) a;
}
}

class Dog extends Animal {
public void eat() {
System.out.println("狗啃骨头...");
}

public void kanJia() {
System.out.println("狗看家...");
}
}

class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼...");
}

public void catchMouse() {
System.out.println("猫捉老鼠...");
}
}

class DuoTai {
public static void main(String[] args) {
Animal a = new Dog();
a.method(a);
}
}


public void method(Animal a) {
if (a instanceof Dog)
Dog d = (Dog) a;
}
这里如果补上大括号就不报错,但实在不知问题出在哪?求解
...全文
891 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫气天堂 2015-06-23
  • 打赏
  • 举报
回复
if 的大括号是一个作用域,判断之后会执行里面的语句,没有大括号就是相当于普通代码,会顺序执行,当然,也可能会报错,毕竟少了东西。
csnd2012 2015-06-23
  • 打赏
  • 举报
回复
引用 5 楼 qwqwqw408 的回复:
那是一个方法,你觉得不用大括号 [quote=引用 1 楼 u014628665 的回复:] 那是一个方法,当然要加大括号了
++,楼主自己知道自己在问什么吗????这么基础简单的语法问题啊,方法体难道不需要用大括号括起来?[/quote] 一般if后面执行语句只有一条时可以省略不写,你没试过?
qwqwqw408 2015-06-22
  • 打赏
  • 举报
回复
那是一个方法,你觉得不用大括号
引用 1 楼 u014628665 的回复:
那是一个方法,当然要加大括号了
++,楼主自己知道自己在问什么吗????这么基础简单的语法问题啊,方法体难道不需要用大括号括起来?
finemi 2015-06-21
  • 打赏
  • 举报
回复
引用 3 楼 csnd2012 的回复:
java官方文档没有说明的东西多了去了,你要我一时举例出来还真想不起。 并且这个结论也不是靠猜测出来的。这个东西太深究也是没有意义的,说不准java 9、10、11人家高兴,编译器将没有{}的if、while等语句理解为if{第一条语句}的方式也是完全有可能的,这就好比你非得深究C#中的getter、setter为什么不带方法体一样没有意义。学语言不能太死,哪些东西该深究哪些不该是要灵活变动的
csnd2012 2015-06-21
  • 打赏
  • 举报
回复
引用 2 楼 finemi 的回复:
简单的说就是:变量的申明涉及到作用域,而没有{}大括号的地方java编译器不认为有作用域的定义,两相冲突。 另一个角度讲就是声明变量及赋值java中当作了两条语句,比如if(...) new Dog();则不会有错误 http://bbs.csdn.net/topics/260030215
但是这个没有官方文档解释,只是他人的猜测理解得出的结论而已,
finemi 2015-06-21
  • 打赏
  • 举报
回复
简单的说就是:变量的申明涉及到作用域,而没有{}大括号的地方java编译器不认为有作用域的定义,两相冲突。 另一个角度讲就是声明变量及赋值java中当作了两条语句,比如if(...) new Dog();则不会有错误 http://bbs.csdn.net/topics/260030215
茉莉清茶12314 2015-06-21
  • 打赏
  • 举报
回复
那是一个方法,当然要加大括号了

50,623

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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