静态 类、方法和 main()
Static Classes, Methods and main()
所以,我是一个 java 菜鸟,我刚刚遇到了一些让我感到困惑的事情。言归正传,我做了一个FooClass,做了一个实例:
public class Main
{
public static void main(String[] args)
{
Foo foo = new Foo("Foo");
}
}
class Foo
{
public Foo(String A)
{
System.out.println(A);
}
}
我注意到 Foo Class 不必是静态的。为什么?而
如果我这样做
public class Main
{
public static void main(String[] args)
{
Foo foo = new Foo("Foo");
}
static class Foo
{
public Foo(String A)
{
System.out.println(A);
}
}
}
那么它必须是静态的。为什么不同?静态意味着它是实例独立的,因此在静态方法中使用的所有东西也必须是实例独立的(?)使用 Foo 我在静态方法中创建实例,因此 Foo 不需要是静态的。但是里面有 class 有什么区别呢?我以为我已经了解了静电的概念。但显然我缺乏很多概念。
在第二个代码片段中,Foo
嵌套在 Main
中。嵌套的 classes 可以是内部的 classes 也可以是静态的。如果它们是内部 classes(非静态),则内部 class 的每个实例都必须与封闭 class.
的一个实例相关联
因此,如果您从第二个代码段的 Foo
class 中删除 static
关键字,则必须使用 :
对其进行实例化
Foo foo = new Main().new Foo("Foo");
当嵌套的 class 是静态的时,它不需要封闭 class 的实例,您可以用
实例化它
Foo foo = new Foo("Foo");
另一方面,在您的第一个片段中,Foo
没有嵌套在 Main
中,因此您不需要 Main
的实例来实例化它。而且它不能是静态的,因为顶级 classes 不能是静态的。
I thought i'd got the concept of static down. but apparently i lack a lot of concepts.
应用于嵌套的 classes 时,static
关键字的含义与应用于方法和变量时的含义不同。您应该阅读有关嵌套 classes.
的内容
Java 是一种面向对象的编程语言。
如果您需要来自 class 的非静态声明、字段、方法等,您需要从此 class.
创建一个实例
但是要访问静态字段,您不需要创建实例的方法。
现在看看你的例子;
1.Main 和 Foo 是不同的 classes 所以你可以在任何地方从 Foo 创建一个实例。
public class Main {
public static void main(String[] args) {
Foo foo = new Foo("Foo");
}
}
class Foo {
public Foo(String A) {
System.out.println(A);
}
}
2.Foo 是内部 class 并且如果未创建 Main 的实例,则 Foo class 永远无法访问。所以如果你创建一个 Main 实例,你也可以创建 Foo 。但是没有创建 Main 实例,只有访问 Foo 是将 Foo class 定义为 static
public class Main {
public static void main(String[] args) {
Foo foo = new Foo("Foo");
}
static class Foo {
public Foo(String A) {
System.out.println(A);
}
}
}
JLS-8.1.3. Inner Classes and Enclosing Instances 涵盖了(部分)
An inner class is a nested class that is not explicitly or implicitly declared static
.
An inner class may be a non-static
member class (§8.5), a local class (§14.3), or an anonymous class (§15.9.5). A member class of an interface is implicitly static
(§9.5) so is never considered to be an inner class.
静态 class 因此不是内部 class,内部 class 需要封闭 [=22] 的 实例 =];喜欢
public class Main {
public static void main(String[] args)
{
Foo foo = new Main().new Foo("Foo");
}
class Foo
{
public Foo(String A)
{
System.out.println(A);
}
}
}
在上面的示例中,您在同一个文件中有两个独立的 class。 main
可以引用 Foo
因为它只是另一个 class.
在底部示例中,您有一个静态嵌套 class。它也可以独立实例化。如果你去掉 Foo
上的 static
关键字,你会有一个内部 class,绑定到 Main
的特定实例,但是当你是 运行 静态 main
方法没有 Main
的特定实例可供参考。
此参考可能有帮助:https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
在java中,我们不能使顶级class静态化。只有嵌套的 classes 可以是静态的。
因此,对于第一种情况,您将无法将 Foo class 设为静态。
对于第二种情况,非静态嵌套 classes(内部 classes)可以访问封闭 class 的其他成员,即使它们被声明为私有。静态嵌套 classes 无法访问封闭 class 的其他成员。
所以,我是一个 java 菜鸟,我刚刚遇到了一些让我感到困惑的事情。言归正传,我做了一个FooClass,做了一个实例:
public class Main
{
public static void main(String[] args)
{
Foo foo = new Foo("Foo");
}
}
class Foo
{
public Foo(String A)
{
System.out.println(A);
}
}
我注意到 Foo Class 不必是静态的。为什么?而
如果我这样做
public class Main
{
public static void main(String[] args)
{
Foo foo = new Foo("Foo");
}
static class Foo
{
public Foo(String A)
{
System.out.println(A);
}
}
}
那么它必须是静态的。为什么不同?静态意味着它是实例独立的,因此在静态方法中使用的所有东西也必须是实例独立的(?)使用 Foo 我在静态方法中创建实例,因此 Foo 不需要是静态的。但是里面有 class 有什么区别呢?我以为我已经了解了静电的概念。但显然我缺乏很多概念。
在第二个代码片段中,Foo
嵌套在 Main
中。嵌套的 classes 可以是内部的 classes 也可以是静态的。如果它们是内部 classes(非静态),则内部 class 的每个实例都必须与封闭 class.
因此,如果您从第二个代码段的 Foo
class 中删除 static
关键字,则必须使用 :
Foo foo = new Main().new Foo("Foo");
当嵌套的 class 是静态的时,它不需要封闭 class 的实例,您可以用
实例化它Foo foo = new Foo("Foo");
另一方面,在您的第一个片段中,Foo
没有嵌套在 Main
中,因此您不需要 Main
的实例来实例化它。而且它不能是静态的,因为顶级 classes 不能是静态的。
I thought i'd got the concept of static down. but apparently i lack a lot of concepts.
应用于嵌套的 classes 时,static
关键字的含义与应用于方法和变量时的含义不同。您应该阅读有关嵌套 classes.
Java 是一种面向对象的编程语言。
如果您需要来自 class 的非静态声明、字段、方法等,您需要从此 class.
创建一个实例但是要访问静态字段,您不需要创建实例的方法。
现在看看你的例子;
1.Main 和 Foo 是不同的 classes 所以你可以在任何地方从 Foo 创建一个实例。
public class Main {
public static void main(String[] args) {
Foo foo = new Foo("Foo");
}
}
class Foo {
public Foo(String A) {
System.out.println(A);
}
}
2.Foo 是内部 class 并且如果未创建 Main 的实例,则 Foo class 永远无法访问。所以如果你创建一个 Main 实例,你也可以创建 Foo 。但是没有创建 Main 实例,只有访问 Foo 是将 Foo class 定义为 static
public class Main {
public static void main(String[] args) {
Foo foo = new Foo("Foo");
}
static class Foo {
public Foo(String A) {
System.out.println(A);
}
}
}
JLS-8.1.3. Inner Classes and Enclosing Instances 涵盖了(部分)
An inner class is a nested class that is not explicitly or implicitly declared
static
.An inner class may be a non-
static
member class (§8.5), a local class (§14.3), or an anonymous class (§15.9.5). A member class of an interface is implicitlystatic
(§9.5) so is never considered to be an inner class.
静态 class 因此不是内部 class,内部 class 需要封闭 [=22] 的 实例 =];喜欢
public class Main {
public static void main(String[] args)
{
Foo foo = new Main().new Foo("Foo");
}
class Foo
{
public Foo(String A)
{
System.out.println(A);
}
}
}
在上面的示例中,您在同一个文件中有两个独立的 class。 main
可以引用 Foo
因为它只是另一个 class.
在底部示例中,您有一个静态嵌套 class。它也可以独立实例化。如果你去掉 Foo
上的 static
关键字,你会有一个内部 class,绑定到 Main
的特定实例,但是当你是 运行 静态 main
方法没有 Main
的特定实例可供参考。
此参考可能有帮助:https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
在java中,我们不能使顶级class静态化。只有嵌套的 classes 可以是静态的。 因此,对于第一种情况,您将无法将 Foo class 设为静态。 对于第二种情况,非静态嵌套 classes(内部 classes)可以访问封闭 class 的其他成员,即使它们被声明为私有。静态嵌套 classes 无法访问封闭 class 的其他成员。