在java中,默认情况下如何声明/初始化数组?
我想问,java中数组的默认访问说明符/修饰符是什么? 例如,如果我写在java中,默认情况下如何声明/初始化数组?,java,arrays,serialization,access-modifiers,Java,Arrays,Serialization,Access Modifiers,我想问,java中数组的默认访问说明符/修饰符是什么? 例如,如果我写 int arr[]; 默认情况下会是什么? 默认情况下是public abstract final还是public 我问这个问题是因为我无法理解汤姆·鲍尔的评论 我发现了为什么数组的默认SerialVersionUID不同。该计算包括类的修饰符,结果表明所有数组都是“public abstract final”,而不是“public”(一个新的“gotcha”Java面试问题:-)。在运行时改变这一点,现在所有数组都有相同
int arr[];
默认情况下会是什么?
默认情况下是public abstract final
还是public
我问这个问题是因为我无法理解汤姆·鲍尔的评论
我发现了为什么数组的默认SerialVersionUID不同。该计算包括类的修饰符,结果表明所有数组都是“public abstract final”,而不是“public”(一个新的“gotcha”Java面试问题:-)。在运行时改变这一点,现在所有数组都有相同的UID,甚至不同的对象类
这里是链接
有人能解释一下吗?您链接的帖子引用了(动态创建的合成)类对象的访问修饰符,该类对象表示数组:
int[].class
类的修饰符和字段的修饰符之间没有关系
可以这样想:类
java.lang.String
是public
,但是您可以自由创建一个private
字符串类型的字段
int arr[];
您正在声明一个变量。此变量正好具有您要声明的访问修饰符。如果不在类变量上指定任何修饰符,默认情况下它将是包私有的。请注意,变量永远不能是抽象的
您不理解引用的文本的原因是,您混淆了变量类型的类修饰符和变量的修饰符
撇开数组不谈,如果您声明一个变量,比如Foo bar
,那么类Foo
具有独立于变量bar
的修饰符的修饰符
现在,这同样适用于数组类型。在Java中,数组是对象,因此具有类类型。在运行时,您可以像在任何其他对象上一样在数组上调用getClass()
,您将得到一个表示合成类的Class
对象。还可以通过类文字访问数组类:
Class<?> clazz=int[].class; // int[]
int mod=clazz.getModifiers();
if(Modifier.isPublic(mod)) System.out.print("public ");
if(Modifier.isAbstract(mod)) System.out.print("abstract ");
if(Modifier.isFinal(mod)) System.out.print("final ");
System.out.print(clazz);
System.out.print(" implements");
for(Class<?> cl:clazz.getInterfaces())
System.out.print(" "+cl.getName());
System.out.println();
显示表示数组类型int[]
的类具有特殊名称[I
和修饰符abstract
和final
,这是普通类无法实现的组合
请注意,如果数组类是基本值数组或其元素类型也是公共的,那么它就是公共的。如前所述,这不会阻止您声明这种类型的非公共变量。与其他变量相同。数组没有特殊行为。它不是公共的,n或者
public abstract final
。它是包私有的。它不是public
,因为没有修饰符表示“包私有的”。它不是最终的,因为你没有声明它是最终的。它不是抽象的,因为你没有声明一个类。嗨,伙计们。很抱歉没有完整的信息。这个问题不是重复的。它现在是完整的。请你解释一下,而不是投票否决这个帖子!非常感谢霍尔格的解释。一个很好的解释!!!!!确切地说什么我在找的是……)
public abstract final class [I implements java.lang.Cloneable java.io.Serializable