这是我的代码: class A { static A obj = new A(); static int num1; static int num2=0; private A() { num1++; num2++; } public static A getInstance() { return obj; } } public class Main{ public static void main(String[] arg) { A obj = A.getInstance(); System.out.println(obj.num1); System.out.println(obj.num2); } } 输出是1 0 ,但我不明白。 有人可以给我解释吗?
我有以下class级: public class Test { public static int a = 0; public int b = 1; } 是否有可能使用reflection来获取静态字段的列表? 我知道我可以用Test.class.getDeclaredFields()获取所有字段的数组。 但是似乎没有办法确定Field实例是否代表静态字段。
有可能在C ++中有一个static和virtual的成员函数? 显然,没有一个简单的方法来做到这一点( static virtual member();是一个编译错误),但至less有一种方法来实现相同的效果? IE: struct Object { struct TypeInformation; static virtual const TypeInformation &GetTypeInformation() const; }; struct SomeObject : public Object { static virtual const TypeInformation &GetTypeInformation() const; }; 在一个实例( object->GetTypeInformation() )和一个类( SomeObject::GetTypeInformation() )上使用SomeObject::GetTypeInformation()是有意义的,这对于比较和对模板来说是非常重要的。 我能想到的唯一方法就是每个类编写两个函数/一个函数和一个常量,或者使用macros。 任何其他解决scheme
如果一个variables声明为public static varName; ,那么我可以从任何地方访问它作为ClassName.varName 。 我也知道,静态成员是由一个类的所有实例共享,并不是在每个实例重新分配。 声明一个variables为private static varName; 与声明一个variablesprivate varName; ? 在这两种情况下,都不能以ClassName.varNameforms访问,也不能以任何其他类的forms访问ClassInstance.varName 。 将静态variables声明为其他特殊属性吗?
我正在写一个课程的一些代码的解释,并不小心使用的method和function的话交替使用。 我决定回去修改措辞,但是在我的理解中遇到了一个漏洞。 据我所知,一个子程序是一个function如果它不作用于一个类的实例(其作用仅限于其明确的input/输出),是一个method如果它在一个类的实例(它可能会对不纯的实例产生副作用)。 这里有一个很好的讨论这个话题。 请注意,通过接受的答案的定义,一个静态method实际上应该是一个函数,因为一个实例永远不会被隐式传递,并且它不能访问任何实例的成员。 有了这个心态,不应该静态methods实际上是function? 根据他们的定义,他们不会针对某个阶层的特定事例采取行动; 他们只因为关系而与class级“捆绑”。 我已经看到了一些看起来很好看的网站,它们把静态子程序称为“方法”( Oracle , Fredosaurus , ProgrammingSimplified ),所以他们都忽略了术语,或者我错过了一些东西(我的猜测是后者) 。 我想确保我使用正确的措辞。 任何人都可以清除这个?
我想知道如果你有一个不同步的静态方法,但不修改任何静态variables是线程安全的吗? 那么如果方法里面创build了局部variables呢? 例如,下面的代码是线程安全的吗? public static String[] makeStringArray( String a, String b ){ return new String[]{ a, b }; } 所以如果我有两个线程连续地,同时地调用这个方法,那么一个与狗(称为“大丹犬”和“公牛狗”)和另一个与猫(称为“波斯”和“暹罗语”),我会得到猫和狗在同一个数组? 或者,猫狗不会同时在同一个方法的调用中?
这个主题说的最多 – 静态方法不能在接口中声明的原因是什么? public interface ITest { public static String test(); } 上面的代码给了我下面的错误(在Eclipse中,至less):“接口方法ITest.test()的非法修饰符;只允许public和abstract”。
在C中静态函数有什么意义?
我想有一个私有的静态数据成员(包含所有字符az的向量)的类。 在java或C#中,我可以创build一个“静态构造函数”,它将在我创build类的任何实例之前运行,并设置类的静态数据成员。 它只运行一次(因为variables是只读的,只需要设置一次),因为它是类的函数,它可以访问其私有成员。 我可以在构造函数中添加代码,以检查向量是否已初始化,如果不是,则会初始化代码,但引入了许多必要的检查,看起来并不是问题的最佳解决scheme。 我想到,由于variables是只读的,所以它们可以是公共的静态常量,所以我可以在课堂以外设置它们,但是再一次,它看起来有点像一个丑陋的黑客。 如果我不想在实例构造函数中初始化它们,是否有可能在类中有私有静态数据成员?
比方说,我有一个类被devise来实例化。 我有几个私人的“帮手”方法在类中,不需要访问任何类成员,并完全操作自己的参数,返回结果。 public class Example { private Something member; public double compute() { double total = 0; total += computeOne(member); total += computeMore(member); return total; } private double computeOne(Something arg) { … } private double computeMore(Something arg) {… } } 是否有任何特定的原因指定computeOne和computeMore作为静态方法 – 或任何特定的原因不? 将它们保持为非静态是最容易的,尽pipe它们当然可以是静态的而不会造成任何问题。