我是一名Java程序员,对企业界不熟悉.最近我使用Groovy和Java 开发了一个应用程序.我编写的所有代码都使用了相当多的静态代码.高级技术部门要求我减少使用的静力学数量.我用Google搜索了同样的东西,我发现很多程序员都反对使用静态变量.
我发现静态变量使用起来更方便.而且我认为它们也是有效的(如果我错了,请纠正我),因为如果我必须对一个类中的函数进行10,000次调用,我很乐意将该方法设置为静态并使用简单的方法Class.methodCall()而不是用10,000个类的实例来混乱内存,对吧?
此外,静态减少了代码其他部分的相互依赖性.他们可以充当完美的国家持有者.除此之外,我发现静态在一些语言中得到广泛实现,如Smalltalk和Scala.那么为什么程序员(尤其是Java世界)中普遍存在对静态的压迫呢?
PS:如果我对静力学的假设是错误的,请纠正我.
我正在进入C#,我遇到了这个问题:
namespace MyDataLayer
{
namespace Section1
{
public class MyClass
{
public class MyItem
{
public static string Property1{ get; set; }
}
public static MyItem GetItem()
{
MyItem theItem = new MyItem();
theItem.Property1 = "MyValue";
return theItem;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在UserControl上有这个代码:
using MyDataLayer.Section1;
public class MyClass
{
protected void MyMethod
{
MyClass.MyItem oItem = new MyClass.MyItem();
oItem = MyClass.GetItem();
someLiteral.Text = oItem.Property1;
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,除非我去访问Property1.智能感知只给我" ,和"作为选项.当我将鼠标移到上面时,Visual Studio给出了这样的解释:EqualsGetHashCodeGetTypeToStringoItem.Property1
MemberMyDataLayer.Section1.MyClass.MyItem.Property1.getcannot be …
我被告知了几个定义,在维基百科上看,但作为Java的初学者,我仍然不确定它的含义.有流利的Java和白痴吗?
我们volatile在其中一个项目中使用它来维护不同线程访问的变量的相同副本.我的问题是,它是否是正常的使用volatile有static.编译器没有给出任何错误,但我不明白使用两者的原因.
静态变量和实例变量之间有什么区别.以下句子是我无法得到的:
在某些情况下,类的所有对象只应共享特定变量的一个副本 - 这里使用静态变量.
静态变量表示类范围信息.类的所有对象共享相同的数据.
我认为实例变量是使用类宽,而静态变量只在自己的方法中有范围?
关于静态的东西:
类似的问题:
我很困惑:
这个问题的标题实际上是以前的考试问题,我正在寻找澄清/答案.
请注意,我正在学习Java并且正在熟悉它的语法.
我知道以前可能会问过这个问题,如果有的话,有人可以告诉我,如果可能的话,我可以在哪里提出这个问题吗?如果是这种情况,也请接受我的道歉.为了表明我一直在研究这个领域,我自己的理解是实例变量属于某个类(模板)的对象/实例,并且可以在需要时在该实例/对象中进行更改(变异).
类变量是一个只有一个副本且可以访问但不能被修改(变异?)的变量,但是所有类都可以根据需要使用它?
我在这里走在正确的轨道上吗?
另外,'静态'到底是做什么的?如果一个类的实例位于类的主实例中,那么它是静态的吗?
非常感谢.
为什么Object static以Singleton模式制作?
它的实际用途是什么?
如果我们不使对象静态会发生什么?
public class SingleObject {
//create an object of SingleObject
private static SingleObject instance = new SingleObject();
//make the constructor private so that this class cannot be
//instantiated
private SingleObject(){}
//Get the only object available
public static SingleObject getInstance(){
return instance;
}
public void showMessage(){
System.out.println("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在寻找明确的答案,我认为我有点得到它,但同时我不太明白该关键字的概念,静态.
这是我做的场景:
package oops;
public class Math {
boolean notNumber = false;
static boolean notString = false;
public static void main(String[] args) {
int num1 = 1;
static int num2 = 1; //doesn't work
Math math = new Math();
math.notNumber = true;
notNumber = true; //doesn't work
notString = true;
}
public void whatever() {
notNumber = true;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不能在静态方法(或任何方法)中将变量声明为静态?"范围"是什么意思?我知道静态变量与类的特定实例无关,它更像是一个"全局"变量.但是为什么不能在方法(num2)中创建静态变量,但可以使用静态变量(notString)?
当你制作静态变量时,你是否必须在课堂上制作它们?方法不可能?
由于我将notNumber声明为非静态,我知道我必须创建一个对象来访问该变量.但是为什么它在没有任何对象创建的情况下工作,而不是在静态方法main()中?
在C++中,我可以在多个文件中使用1个类,当我使用一个文件中的函数修改值时,它将全局更改该值.
在Java中,每个文件都必须拥有自己的类; 当我使用一个文件中的方法更改值时,它不会全局更改此值.
例如,在C++中,文件可能如下所示:
someClass.h
class someClass{
private:
int x;
public:
//Constructor
someClass(){
x = 5;
}
void changeVariable(); //Declaring function for later
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中
int main(){
someClass cClass;
cClass.changeVariable(); //Call function
cout << x; //outputs 6
}
Run Code Online (Sandbox Code Playgroud)
fileA.cpp
void someClass::changeVariable(){
x = 6; //x is changed to 6 globally.
}
Run Code Online (Sandbox Code Playgroud)
在Java中:
someClass.java
public class someClass {
int x;
//Constructor
public someClass() {
x = 5;
}
Run Code Online (Sandbox Code Playgroud)
main.java
public class main {
public static void main() {
someClass cClass = …Run Code Online (Sandbox Code Playgroud)