Tag: static members

获取静态初始化块以在不加载类的情况下在java中运行

我有几个课程,如下所示 public class TrueFalseQuestion implements Question{ static{ QuestionFactory.registerType(“TrueFalse”, “Question”); } public TrueFalseQuestion(){} } … public class QuestionFactory { static final HashMap map = new HashMap(); public static void registerType(String questionName, String ques ) { map.put(questionName, ques); } } public class FactoryTester { public static void main(String[] args) { System.out.println(QuestionFactory.map.size()); // This prints 0. I want […]

静态块与静态方法 – 初始化静态字段

出于好奇,我测量了静态块和静态方法初始化器之间的性能。 首先,我在两个独立的java类中实现了上述方法,如下所示: 第一: class Dummy { static java.util.List lista = new java.util.ArrayList(); static { for(int i=0; i < 1000000; ++i) { lista.add(new Integer(i)); } } } public class First { public static void main(String[] args) { long st = System.currentTimeMillis(); Dummy d = new Dummy(); long end = System.currentTimeMillis() – st; System.out.println(end); } } 第二: […]

为什么在java的内部类中限制静态字段(不是final)

可能重复: 为什么Java禁止内部类中的静态字段? 我正在通过规范,并得到内部类中的静态成员不可能是最终编译时间常量。 class HasStatic { static int j = 100; } class myInnerClassTest { class Inner extends HasStatic { static final int x = 3; // OK: compile-time constant static int y = 4; // Compile-time error: an inner class } static class NestedButNotInner{ static int z = 5; // OK: not an inner […]

为什么我可以访问封闭类引用的私有成员

我已经看到很多关于访问封闭类的私人成员的问题。 但是,我的问题恰恰相反。 如果我(作为示例),以下代码: public class A { private String outerString = “silly string”; static class B { private final A someA = new A(); public void foo() { String b = someA.outerString ; } } } 我想知道为什么这个编译? 我希望通过我从类A(通过someA.outerString)访问’outerString’实例变量的方式来预测错误。 我知道内部类可以通过隐式的“this”引用直接访问封闭的类成员。 但是在这里,B类是静态的,所以’this’引用不适用。

需要静态变量及其在jvm上的开销

根据静态成员的概念,当第一次调用它的类时,它们被创建/加载到内存中。 它们在该类的所有实例中都很常见。 意味着它们不会被重新创建或重新初始化等。此外,它们只能通过类名访问。 不需要为该类创建对象来访问它们。 现在我的问题是; 在应用程序运行之前,静态成员是否一直在内存中? 即使该类的所有实例都已被GC(垃圾收集器)收集。 对于一个大型项目,8-10个团队正在一起工作,他们不关心其他团队的编码。 他们可以根据需要创建静态成员。 如果所有成员都缓存在内存中,它是否会在JVM上创建开销? 默认情况下,接口的所有成员都是STATIC,并且在许多情况下接口的使用都很好。 但如果我记住上述问题,我还应该使用接口吗?

为什么非静态内部类不能拥有静态成员(字段和方法)?

可能重复: 为什么我们在内部类中没有静态方法? 我知道创建一个非静态内部类对象需要一个外部类对象,而创建的非静态内部类对象自动拥有一个对外部类对象的隐藏引用。 但为什么非静态内部类不能有静态成员呢? Java设计者只需要禁止在内部类的静态方法内访问非静态外部类字段,它会更有意义,非? 如果在内部类中使用静态成员没有意义,为什么内部类可以通过inheritance具有静态成员的类来inheritance静态成员? 我也读了这篇文章 。 如上所述: 内部类可以inheritance非编译时常量的静态成员,即使它们可能不会声明它们。 不是内部类的嵌套类可以根据Java编程语言的通常规则自由地声明静态成员。 这是一个惯例吗? 这是我的代码: public class OuterClass { private int outerClassField; public void doSomethingOuterClass() { outerClassField = 1; } public static void doSomethingStaticOuterClass() { // outerClassField = 2; // Error: Because static method cannot access an specific object’s field } public class InnerClass extends ClassWithStaticField { […]

方法本地类中的Java final静态声明

在方法中声明本地内部类时,为什么包含最终的静态字符串或整数是合法的,但包含其他对象是不合法的? 例如: class Outer { void aMethod() { class Inner { final static String name = “compiles”; final static int ctr = 10; // compiles final static Integer intThree = Integer.valueOf(3); // does not compile! final static obj objConst = new Object(); // does not compile! } Inner inner = new Inner(); } } 当我编译它时,我得到以下内容: […]

静态类变量存储在内存中的哪个位置?

这是如何将静态数组存储在Java内存中的后续问题? 。 因此,C / C ++中的全局变量存储在内存的静态数据段中。 但是Java / C ++中的静态类变量呢? 它不能是静态数据段,因为您不知道在程序的整个过程中将引用什么/多少类(因为reflection)。 它绝对不是堆栈,因为这没有任何意义。 将它存储在堆上也是一种不确定的方式。

Java:覆盖父类的静态变量?

我有以下类,我正在使用它作为我项目中所有模型的基础: public abstract class BaseModel { static String table; static String idField = “id”; public static boolean exists(long id) throws Exception { Db db = Util.getDb(); Query q = db.query(); q.select( idField ).whereLong(idField, id).limit(1).get(table); return q.hasResults(); } //snip.. } 我正试图通过以下方式扩展它: public class User extends BaseModel { static String table = “user”; //snip } 但是,如果我尝试执行以下操作: if […]

静态方法内存分配

我们有两个分类堆和堆栈。 创建对象时,对象的内存存储在堆中。 如果类具有静态方法,可以使用类名调用该怎么办。 如果没有创建对象,那么它将如何分配内存,如果它在哪里分配内存?