3

示例代码:

public class MyClass {

    public static double globallyVisibleDbl = 42.69;
    public static final int globallyVisibleInt = 42;
    //blah blah rest of code

}

并且在一个类中都有 double 类型的变量和常量。

但是,当我尝试将这两个放在类之外时,例如在类之前和 import 语句之后——就像在 C 或 C++ 中允许的#define token [value]指令一样——我得到错误:

import com.something.*;

public static double globallyVisibleDbl = 42.69;
public static final int globallyVisibleInt = 42;

public class MyClass {
   //some code
}

为什么会这样?

4

7 回答 7

6

因为java中没有“全局范围”。所有变量都必须在方法或类中声明。当您在类声明之上声明变量时,java 不会仅仅因为它在同一个文件中而将其与类相关联。

于 2013-07-08T13:06:09.343 回答
3

Java 的语法很大程度上源自 C++。与结合了结构化、通用和面向对象编程的语法的 C++ 不同,Java 几乎完全是作为一种面向对象的语言而构建的。所有的代码都写在一个类中,所有的东西都是一个对象,除了原始数据类型(例如整数、浮点数、布尔值和字符),出于性能原因它们不是类。

@See Java_syntax

于 2013-07-08T13:25:48.070 回答
0

Java 需要类或接口中的每一段代码。您可以通过以下方式声明全局变量:

public class MyClass {
   public static double globallyVisibleDbl = 42.69;
   public static final int globallyVisibleInt = 42;
}

它们可以从同一个类加载器加载的任何地方引用。

于 2013-07-08T13:33:56.743 回答
0

Java 使用“范围”概念。您必须在这些范围内编写所有代码。Java 不理解超出范围的书面代码。

于 2013-07-08T13:43:34.347 回答
0

Java 是 OO 语言,不允许使用全局变量。 http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

于 2013-07-08T13:06:25.883 回答
0

在 Java 世界中,所有变量(属性)和方法(行为)都应该在类中。

于 2013-07-08T13:07:38.560 回答
0

如果我们允许这样做,那么这段代码在运行时会存在于哪里?

Java 的工作方式是每个对象都有一个Klass与之连接的对象,该对象包含其静态信息。如果我们允许全球信息,那么它会存在于哪里?我们可以创建某种全局范围的对象,但它会因为范围内的各种事物而变得非常混乱,并且 Java 运行时在进行动态链接时必须检查所有这些全局对象。

简短的回答:它违背了语言的设计。

于 2013-07-08T13:09:10.363 回答