关于内部类为静态类的时候,不能用.new 创建对象,代码如下

菜鸟之博 2014-08-15 02:48:05
public class CheckData {
private int i=900;
class a{
a(int i){
System.out.println("mmmm"+i);
}
public void aa(){
System.out.println("第一个内部类"+i);
nn();
}
public CheckData getCheckData(){
return CheckData.this;
}
}
public static class b{
private int j=911;
b(){
System.out.println("mm");
}
public void bb(){
System.out.println("第二个内部类"+j);
}
}

public a geta(){
return new a(1);
}
public static b getb(){
return new b();
}
public int nn(){
System.out.println("ooooooooooo");
return 0;
}

public static void main(String[] args) {
CheckData c=new CheckData();
CheckData.a mm=c.new a(1);
//CheckData.b m=c.new b();为什么不可以这样创建对象
mm.aa();
CheckData.a aa=c.geta();
aa.aa();
aa.getCheckData().nn();
//aa.nn();
CheckData.getb().bb();
c.getb().bb();
}

}
...全文
1338 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkuere 2014-08-20
  • 打赏
  • 举报
回复
静态成员 的意思是 比如Class Team下有Class Member,如果整个队伍一起移动的,也就是每个memer的city都一样的,那么就要用到静态 那么每个member的city都指向同一个,可以用static city member1.city="Nankin";之后,所有member的city就都是“Nankin”,其实是公用同一个地址 这就是静态成员变量 静态类也是同样理解的。在其他高手给出更好的解答之前,你可以看下我的解答。
walkuere 2014-08-20
  • 打赏
  • 举报
回复
"静态"的意思就是“只有一个”,只要你看懂这句,后面都是废话 一般直接调用类名.成员,动态则是对象名.成员 比如Integer.ParseInt 因为是静态 所以用类名 你静态类说明只有一个,是不需要对象的,因为我没为静态类创建过对象,所以不知道是不是静态类不能创建对象,一般是无意义的。 比如韦小宝有N个老婆 ,那么就是老婆名.成员属性,如果你的是静态的,那么就是老婆.成员属性 开玩笑的
xiaofeifeiloving 2014-08-17
  • 打赏
  • 举报
回复
引用 4 楼 u014466305 的回复:
[quote=引用 3 楼 shixitong 的回复:] [quote=引用 2 楼 u014466305 的回复:] [quote=引用 1 楼 shixitong 的回复:] CheckData.b m=c.new b();为什么不可以这样创建对象 改为 CheckData.b m=new CheckData.b();
我知道可以这样定义,我只是想问//CheckData.b m=c.new b();为什么不可以这样创建对象 因为CheckData.a mm=c.new a(1);可以这样定义,只是因为b为静态类就不可以这样定义了,这是为什么???[/quote] 我是这么理解的,静态是归属于类的,非static才是属于具体的对象,那么调用静态类的时候就不能用某个对象点了[/quote] 静态是归属于类的,非Static才是具体的对象???没有明白什么意思[/quote] 这好比如方法的调用的时候,静态方法用类直接调用,而非静态方法用类new出来的对象来调用。
菜鸟之博 2014-08-17
  • 打赏
  • 举报
回复
引用 3 楼 shixitong 的回复:
[quote=引用 2 楼 u014466305 的回复:] [quote=引用 1 楼 shixitong 的回复:] CheckData.b m=c.new b();为什么不可以这样创建对象 改为 CheckData.b m=new CheckData.b();
我知道可以这样定义,我只是想问//CheckData.b m=c.new b();为什么不可以这样创建对象 因为CheckData.a mm=c.new a(1);可以这样定义,只是因为b为静态类就不可以这样定义了,这是为什么???[/quote] 我是这么理解的,静态是归属于类的,非static才是属于具体的对象,那么调用静态类的时候就不能用某个对象点了[/quote] 静态是归属于类的,非Static才是具体的对象???没有明白什么意思
shixitong 2014-08-15
  • 打赏
  • 举报
回复
引用 2 楼 u014466305 的回复:
[quote=引用 1 楼 shixitong 的回复:] CheckData.b m=c.new b();为什么不可以这样创建对象 改为 CheckData.b m=new CheckData.b();
我知道可以这样定义,我只是想问//CheckData.b m=c.new b();为什么不可以这样创建对象 因为CheckData.a mm=c.new a(1);可以这样定义,只是因为b为静态类就不可以这样定义了,这是为什么???[/quote] 我是这么理解的,静态是归属于类的,非static才是属于具体的对象,那么调用静态类的时候就不能用某个对象点了
菜鸟之博 2014-08-15
  • 打赏
  • 举报
回复
引用 1 楼 shixitong 的回复:
CheckData.b m=c.new b();为什么不可以这样创建对象 改为 CheckData.b m=new CheckData.b();
我知道可以这样定义,我只是想问//CheckData.b m=c.new b();为什么不可以这样创建对象 因为CheckData.a mm=c.new a(1);可以这样定义,只是因为b为静态类就不可以这样定义了,这是为什么???
shixitong 2014-08-15
  • 打赏
  • 举报
回复
CheckData.b m=c.new b();为什么不可以这样创建对象 改为 CheckData.b m=new CheckData.b();

50,545

社区成员

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

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