java无法创建内部类_为什么java不允许创建内部类的实例?

参见英文答案 >

Java inner class and static nested class                                    25个

我有一个主类“m”和2个内部类叫做sub1,sub2,其中sub2是静态类:

public class m

{

String n="n";

static String s="s";

public class sub1

{

public void fn(){System.out.println(n);}

//static public void fs(){System.out.println(s);}

}

static class sub2

{

//public void fn(){System.out.println(n);}

static public void fs(){System.out.println(s);}

}

public void f()

{

sub1 s1=new sub1();//OK, no error

sub2 s2=new sub2();//OK

}

public static void main(String[] args)

{

m obj=new m();

sub1 s1=new sub1();//Error

s1.fn();

//s1.fs();

sub2 s2=new sub2();//OK

//s2.fn();

s2.fs();

}

}

我使用Openjdk在linux下编译它,它报告错误

$java -version

openjdk version "1.8.0_91"

OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)

OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)

$javac m.java

m.java:24: Error: Cannot reference non-static variable this in a static context.

sub1 s1=new sub1();//Error

^

1 Errors

这对我来说很奇怪:

1.在m.f()成员函数中,我们可以“sub1 s1 = new sub1();”,但在main中,我们不能

2. staic class sub2可以有实例,而非静态sub1不能吗?

这是Java的设计吗?为什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值