gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:22:30 26 4
gpt4 key购买 nike

<分区>

我有一个主类“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();
}
}

我在linux下用Openjdk编译,报错

$ 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. static class sub2可以有instance,而non-static sub1不能?

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com