我是一名Java程序员,对企业界不熟悉.最近我使用Groovy和Java 开发了一个应用程序.我编写的所有代码都使用了相当多的静态代码.高级技术部门要求我减少使用的静力学数量.我用Google搜索了同样的东西,我发现很多程序员都反对使用静态变量.
我发现静态变量使用起来更方便.而且我认为它们也是有效的(如果我错了,请纠正我),因为如果我必须对一个类中的函数进行10,000次调用,我很乐意将该方法设置为静态并使用简单的方法Class.methodCall()
而不是用10,000个类的实例来混乱内存,对吧?
此外,静态减少了代码其他部分的相互依赖性.他们可以充当完美的国家持有者.除此之外,我发现静态在一些语言中得到广泛实现,如Smalltalk和Scala.那么为什么程序员(尤其是Java世界)中普遍存在对静态的压迫呢?
PS:如果我对静力学的假设是错误的,请纠正我.
为什么不能覆盖静态方法?
如果可能,请举例说明.
何时初始化静态字段?如果我从不实例化一个类,但是我访问一个静态字段,是否所有静态块和私有静态方法用于实例化那个时刻调用的私有静态字段(按顺序)?
如果我调用静态方法怎么办?它是否也运行所有静态块?方法之前?
例如:
class A {
static int i=0;
static int j;
static void method() {
// static k=0; can't use static for local variables only final is permitted
// static int L;
}
}
Run Code Online (Sandbox Code Playgroud)
这些变量将存储在Java,堆中还是堆栈内存中?它们是如何存储的?
说你有课,
class Foo
{
public static bar;
}
Run Code Online (Sandbox Code Playgroud)
当你说:
new Foo();
Run Code Online (Sandbox Code Playgroud)
我可以想象,在内存中,为这个对象保留了一个空间.
......当你再说一次时:
new Foo();
Run Code Online (Sandbox Code Playgroud)
...现在你有另一个可用于该物体的空间.
但是,静态场的确切位置在哪里?
我真正想要学习的是:
对象的引用如何引用它们引用的对象的相同字段?
我最近读到,制作类单例使得无法模拟类的对象,这使得测试其客户端变得困难.我无法立即理解其根本原因.有人可以解释为什么不可能嘲笑单身人士课程?此外,还有更多的问题与制作班级单身人士有关吗?
我有一个应用程序,我有一个名为的类PlausibilityChecker
.这个类只有静态方法,比如checkZipcodeFormat
或checkMailFormat
.我在GUI类中使用它们来检查输入,然后再将它发送到较低层.
这是好习惯吗?我以为我只使用静态方法,所以我不必关心将实例传递给GUI类或者在每个gui类中都有一个不引用gui对象的实例字段.
我注意到这个Files
类Java NIO
只有静态方法所以我认为这不是那么可怕的错误.
getInstance()
Java中的目的是什么?
在我的研究过程中,我一直在阅读,这getInstance()
有助于实现Singleton设计模式(这意味着整个程序中只有一个实例符合我的理解).但我不能只使用静态?这不是静止的全部意义吗?
如果我只是有静态方法和字段,它与使用getInstance()
有何不同?是否存在静态的"范围"?例如,每个方法或类一个实例?
如果它们不同,在什么情况下我会选择getInstance()
使用静态?
如果问题不清楚,我很抱歉,我确信我遗漏了一些有关主题的内容,我只是无法弄清楚是什么.
感谢您提供任何建议.
java ×10
static ×5
oop ×3
singleton ×2
c# ×1
jvm ×1
nio ×1
overriding ×1
php ×1
unit-testing ×1