为什么在Java中不能将类声明为静态?
当前回答
您可以通过声明一个没有实例的enum类型来创建一个实用程序类(它不能创建实例)。也就是说,你明确地声明没有实例。
public enum MyUtilities {;
public static void myMethod();
}
其他回答
我们在java中编写的所有代码都包含在一个类中。每当我们运行一个类时,JVM都会实例化一个对象。JVM可以创建许多对象,根据定义,静态意味着对所有对象都有相同的复制集。
所以,如果Java允许顶级类是静态的,无论何时你运行一个程序,它都会创建一个对象,并保持在相同的内存位置上重写。
如果你只是在每次运行时替换对象,那么创建它有什么意义呢?
这就是Java摆脱顶级类静态的原因。
可能有更具体的原因,但这对我来说更合乎逻辑。
默认情况下,顶级类是静态的。默认情况下,内部类是非静态的。您可以通过显式地将内部类标记为静态来更改它们的默认值。顶级类由于是顶级类,所以不能具有非静态语义,因为没有父类可以引用。因此,无法更改顶级类的默认值。
如果使用静态类的好处是不实例化对象并使用方法,那么只需将类声明为公共,并将此方法声明为静态。
具有私有构造函数的类是静态的。
像这样声明你的类:
public class eOAuth {
private eOAuth(){}
public final static int ECodeOauthInvalidGrant = 0x1;
public final static int ECodeOauthUnknown = 0x10;
public static GetSomeStuff(){}
}
你可以在不初始化的情况下使用:
if (value == eOAuth.ECodeOauthInvalidGrant)
eOAuth.GetSomeStuff();
...
您可以通过声明一个没有实例的enum类型来创建一个实用程序类(它不能创建实例)。也就是说,你明确地声明没有实例。
public enum MyUtilities {;
public static void myMethod();
}
推荐文章
- 在流中使用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