分类：电脑/网络-程序设计-JAVA相关
问题：两个Java中不明白的问题，只有高手能回答1、我发现一个问题：在 
1、我发现一个问题：在所有的方法和类的后面加分号都不报错（但在匿名类后面加两个分号会报错）。本来我在这些地方从不加分号的，在学习匿名类时，一个偶然的机会，我发现了这个。请问方法和类的后面加不加分号有什么区别吗？2、接口中应该不能放任何的，不能有任何具体实现，这才是接口。但我发现，我居然能在接口中嵌套非static的类（注意不是嵌套类，嵌套类是static的，嵌套类至于接口的命名空间内并不违反规则），而且这个类居然能用。也就是说接口居然有了具体实现。我发现，实现接口的类可以直接使用“接口.接口内的类=new 这个类的构造器”的方法使用接口本身来1、我发现一个问题：在所有的方法和类的后面加分号都不报错（但在匿名类后面加两个分号会报错）。本来我在这些地方从不加分号的，在学习匿名类时，一个偶然的机会，我发现了这个。请问方法和类的后面加不加分号有什么区别吗？2、接口中应该不能放任何的，不能有任何具体实现，这才是接口。但我发现，我居然能在接口中嵌套非static的类（注意不是嵌套类，嵌套类是static的，嵌套类至于接口的命名空间内并不违反规则），而且这个类居然能用。也就是说接口居然有了具体实现。我发现，实现接口的类可以直接使用“接口.接口内的类=new 这个类的构造器”的方法使用接口本身来得到实现。这是不是不对啊？这还叫接口吗？下面的代码是我平时练习时验证Java中一些特性用的，里面有很多东西，其中就有我问题2的内容。我懒得择出来了。大家自己看看吧。附代码：public class Agafagaf implements jshsuyah,aushsgggs{final int AAA;private class Vyauayoaiau1{}public class Vyauayoaiau2{  private class Vyauayoaiau1{}  public class Vyauayoaiau3{}}Agafagaf(){  AAA=7;   intln(AAA);}Agafagaf(int aaa){  //! intln(AAA);  AAA=aaa;  //!AAA=7;   intln(AAA);}public static void main(String[] args){  Agafagaf aaa1=new Agafagaf(6);  Agafagaf aaa2=new Agafagaf();  Vyauayoaiau121 aaa3=new Vyauayoaiau121();  jshsuyah.Vyauayoaiau121 aaa5=new Vyauayoaiau121();  Kiajsjaqqq aaa12=new Kiajsjaqqq();  Kiajsjaqqq.Kiajsjaqqq11 aaa8= w Kiajsjaqqq11();  //aushsgggs aasasa=new aushsgggs();  aushsgggs.Vyauayoaiauud172182 ausha00=new Vyauayoaiauud172182();}}//!private class Vyauayoaiau{}interface jshsuyah{   int I=1;  public class Vyauayoaiau121{    static int j=1;    Vyauayoaiau121(){       intln("XXX自己写的练习程序121  "+I+"  "+j);      //!I++;      j++;      //!Vyauayoaiau121 aaa3=new Vyauayoaiau121();      //!final Vyauayoaiau121 aaa3=new Vyauayoaiau121();    }  }  class Lidudsh extends Vyauayoaiau121{      }  }class Kiajsjaqqq {  public class Kiajsjaqqq11{    Kiajsjaqqq11(){       intln("XXX自己写的练习程序 ");  }  }}interface aushsgggs {  public class Vyauayoaiauud172182{    Vyauayoaiauud172182(){       intln("XXX");    }  }}///:~
回答：问题1不太明白，看下我的猜测：代码1：public class Test{  static A a = new A(){    public int a(){      return 2;    }  };;    public static void main(String[] args){     intln(a.a());  }}class A{  public int a(){    return 1;  }}代码2：public class Test{  public static void main(String[] args){    A a = new A(){      public int a(){        return 2;      }    };;     intln(a.a());  }}class A{  public int a(){    return 1;  }}这样的两种匿名类都不会报错（两个分号），不过我实在不知道你描述的是什么样的代码，你不妨贴上来看看关于问题2，非static的嵌套类是内部类啊，其实说反了，应该说static的内部类才是嵌套类。再谈你说interface有内部类合不合理的问题，合不合理java编译器又不会去管的，它只管语法符不符合就好了，说白了，这个问题就好比的架构，编译器又不会在乎架构合不合理，它只管语法、能不能运行。况且，我觉得这样的设计拓展了可架构性呢，没准哪天哪个系统需要特殊架构的时候还真需要接口的内部类呢？对吧，所以说，合理不合理不是jdk管的，而是我们care的，你觉得不合理就不去使用咯~