尝试显式实例化枚举类型是编译时错误
(§15.9.1).Enum中的最终克隆方法确保永远不会克隆枚举常量,并且序列化机制的特殊处理可确保不会因反序列化而创建重复实例.禁止对枚举类型进行反射实例化.总之,这四件事确保除了枚举常量定义的实例之外不存在枚举类型的实例.
除了enum声明之外,有更多枚举类型实例的缺点是什么?
为什么这个String类的设计方式是这个类的实例是汇集的还是不可变的?
谢谢和问候,Vidyakar Sharma.
如果我坐在工作中,我可以轻松地编写一些Java代码 - 我只是使用我的公司域名作为包名称,我甚至没有想到.
如果我坐在家里,我没有域名,我的包名是什么用的?
JSL没有说 - 它建议使用Internet域名.但是,它确实提到了本地和休闲包装名称
本节指定用于生成此类唯一包名称的建议约定.鼓励Java平台的实现提供自动支持,以便将一组包从本地和临时包名转换为此处描述的唯一名称格式.
我以前没有遇到任何改变包名称的事情,我不太确定它在实践中会如何起作用.
所以,我的问题有两个:如果我没有域名,我应该使用什么包命名,如果我去"本地"或"随意"路由,转换机制是什么?
我在JLS 7中读到了以下句子.
在类方法的标题或正文中使用任何周围声明的类型参数的名称是编译时错误.
请解释一下它的含义.
在JLS8的§JLS-15.19中指定
如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离.就好像右手操作数受到按位逻辑AND运算符&(§15.22.1)和掩码值0x1f(0b11111)的影响.因此,实际使用的移位距离始终在0到31的范围内,包括0和31.
我不清楚这个陈述是粗体.非常感谢一个例子.
当JVM加载A类时,它是否加载A中使用的所有类?
而且我想知道导入声明是否对加载过程有某种影响?
JLS的链接将不胜感激.
我知道Strings可能会被实习,但它是一个在创建新的字符串对象时虔诚地执行的动作?
Jls section 3.10.5 string literals.
来自JLS:
每当在执行应用程序期间多次在同一对象上调用它时,hashCode方法必须始终返回相同的整数,前提是不修改对象的equals比较中使用的信息.从应用程序的一次执行到同一应用程序的另一次执行,该整数不需要保持一致.
这里的术语应用是什么意思 以及为什么hashcode()允许for对象在同一应用程序的不同执行之间变化?
我知道$可以在Java中用作方法名.还有什么?
class MyClass {
String $() {
return "I've never been expected anyone would invoke me";
}
}
Run Code Online (Sandbox Code Playgroud)
这实际上是一个实际问题.我正在寻找另一个$.
在类C中声明的实例方法m1将覆盖在类A中声明的另一个实例方法m2,如果以下所有条件都为真:
C是A的子类.
m1的签名是m2签名的子签名(§8.4.2).
或者:
m2在与C相同的包中是公共的,受保护的或声明的,具有默认访问权限
m1覆盖方法m3(m3与m1不同,m3与m2不同),使得m3覆盖m2.
这似乎与以下代码不矛盾:
public class Main {
public void f() { }
public static class A extends Main {
protected void f() { }
}
public static void main(String[] args) {
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有编译,即使被覆盖的方法版本f()具有protected访问修饰符,如我提供的规则的第二点所述.怎么了?