如何在Java中定义全局变量?
当前回答
在构建面向对象编程时,要理解变量的作用域与封装这些变量的类对象紧密地独占。
创建“全局变量”的问题在于,它不是Java的行业标准。它不是行业标准,因为它允许多个类异步操作数据,如果您正在运行一个多线程应用程序,从线程安全的角度来看,这将变得更加复杂和危险。使用全局变量无效还有其他各种原因,但如果您想避免这种情况,我建议您采用面向方面编程。
面向方面编程解决了这个问题,它让父类通过所谓的“建议”来负责作用域,它在代码中添加了额外的行为,而不需要实际修改它。它为横切关注点或全局变量的使用提供解决方案。
Spring是一个利用AOP的Java框架,虽然它传统上用于web应用程序,但核心应用程序可以在整个Java框架(包括8.0)中普遍使用。这可能是你想要进一步探索的方向。
其他回答
要定义全局变量,可以使用静态关键字
public class Example {
public static int a;
public static int b;
}
现在你可以在任何地方访问a和b 通过调用
Example.a;
Example.b;
要定义全局变量,可以使用静态关键字
public final class Tools {
public static int a;
public static int b;
}
现在您可以通过调用从任何地方访问a和b
Tools.a;
Tools.b;
你说得对……特别是在J2ME中… 可以通过将NullPointerException放入MidLet构造函数中来避免 (程序初始化)这行代码:
new Tools();
这确保了Tools将在任何指令之前分配 它使用了它。
就是这样!
正如你可能从答案中猜到的那样,Java中没有全局变量,你唯一能做的就是创建一个具有静态成员的类:
public class Global {
public static int a;
}
你可以在Global中使用它。在其他地方。然而,如果你使用Java 1.5或更高版本,你可以使用导入静态魔法,使它看起来更像一个真正的全局变量:
import static test.Global.*;
public class UseGlobal {
public void foo() {
int i = a;
}
}
瞧!
现在这还远远不是最佳实践,所以你可以在广告中看到:不要在家里这样做
除了常量,没有什么是全局的。
public class MyMainClass {
public final static boolean DEBUGMODE=true;
}
把它放在你的主类中。在其他。java文件中,通过以下方式使用它:
if(MyMainClass.DEBUGMODE) System.out.println("Some debugging info");
确保当你把你的代码从剪辑室移出并发布时,你删除或注释掉了这个功能。
如果你有一个常用的方法,比如随机发生器,我建议你创建一个“工具箱”包!所有编码员都应该有一个,然后当你想在.java中使用它时,只需导入它!
在Java中没有全局变量
然而,我们所拥有的是一个静态关键字,这就是我们所需要的。 在Java中,类之外不存在任何东西。static关键字表示一个类变量,与实例变量相反,它只有一个副本,并且它超越了创建的该类的所有实例,这意味着它的值可以在任何时候在所有实例之间更改和访问。
如果您需要一个可以超出作用域访问的全局变量,那么这就是您需要的变量,但它的作用域只存在于类所在的位置,仅此而已。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap