需要解释一下这个Java语法吗
有人能解释一下下面的内容吗需要解释一下这个Java语法吗,java,arrays,syntax,Java,Arrays,Syntax,有人能解释一下下面的内容吗 private HashSet nodes[]; nodes = new HashSet[21]; 我有点困惑。。。区别于 private HashSet nodes = new HashSet; 尤其是在方括号语法方面。这是一个哈希集数组吗?因为通常我都习惯于看电影 int[] myarray = new int[21]; 或者类似的东西。是的,它是一个哈希集数组 HashSet nodes[]; 与 HashSet[] nodes; 只有在每次使用逗号
private HashSet nodes[];
nodes = new HashSet[21];
我有点困惑。。。区别于
private HashSet nodes = new HashSet;
尤其是在方括号语法方面。这是一个哈希集数组吗?因为通常我都习惯于看电影
int[] myarray = new int[21];
或者类似的东西。是的,它是一个
哈希集数组
HashSet nodes[];
与
HashSet[] nodes;
只有在每次使用逗号声明一组变量时,方括号位置的差异才变得重要:
HashSet[] alpha, bravo, charlie; // Three arrays of hashsets
HashSet delta[], echo, foxtrot; // One array (delta) and two hashsets (echo and foxtrot)
它们只是替代品——不幸的是,两者都是有效的
见鬼,即使这样也是有效的:
int[] bad [] = null;
那相当于
int[][] bad = null;
显然,不要这样做:)
发件人:
[]可能作为类型的一部分出现在声明的开头,或者作为特定变量的声明器的一部分出现,或者两者都出现
及
我们不建议在数组变量声明中使用“混合表示法”,因为括号同时出现在类型和声明器中
基本上,使用将所有类型信息保存在一个位置的表单-您习惯使用的表单。这是压倒性的惯用形式
不是有效的Java。与JavaScript不同,Java中的new
操作符总是需要一个括号内的参数列表
不同于
前者构造一个HashSet
集,该集最初有足够的空间容纳21个集合项,而后者是一个21
null值数组,可以用集合的引用填充
声明一个成员变量,该变量可以引用其元素类型为HashSet
的任何数组
为21HashSet
引用创建一个具有空格的数组,并将其分配给该成员变量
请记住,在Java中,与C不同,HashSet[21]
不是一种类型,因此您不能仅通过
int[21] myints;
在某些情况下,您必须通过
新[尺寸]
- 缩写语法
new{element0,element1,element2,…}
,
- 或者通过
java.lang.reflect.Array.newInstance
进行反射
在Java中,声明
private HashSet nodes[];
等同于声明
private HashSet[] nodes;
它可以读作“一个HashSet数组”或“一个HashSet数组。”所以它相当于说私有HashSet[]节点?是的。在Java中,括号可以放在任何一个地方。@varatis,Java引入了Type[]
语法,这样你就可以把整个类型放在一个地方,但也允许C风格的语法使C/C++程序员更容易学习Java。在Java中,你可以像Type foo[]
那样声明数组,但这很难,更常见的情况是数组声明为Type[]foo
。当您有很长的变量列表时,没有什么不好的地方。@trutheality:您的意思是什么?我认为这两种形式都没有好处,这使得像“坏”的声明这样令人困惑的声明是有效的。我并不是说数组本身是不幸的——我是说有两种不同的声明方式是不幸的代码>符号。我只是想指出,能够编写一个声明的形式是int number1,number2,array1[],array2[],matrix[]代码>非常方便。当然,便利是微不足道的,但它确实存在。特别是如果你认为允许这两种形式的唯一负面结果是,有人可以写出混乱的代码,那就不太有坏处了——总会有人找到一种写混淆代码的方法。就我个人而言,我几乎总是在每个声明中都有一个变量——这样评论比较容易。我认为编写混乱代码的能力是一个很大的缺点。当然,编写令人困惑的代码总是有可能的,但是语言应该尽可能避免这种情况。我想你不介意能够写其他线程代码>其中之一?请记住,当我在这样的列表中声明三个以上的变量时,我会在逗号处缩进和换行,这样您仍然可以轻松地进行注释。我试图使代码既可读又简洁——有一种代码过于冗长<代码>其他线程。睡眠(1000)代码>我不喜欢。无法想出调用someObject.staticMethod()的情况
在现场很有用,但我认为有一个很好的理由允许它。我确实认为,在许多情况下,使用类似于严格静态的修饰符的东西将是一个非常好的主意。
private HashSet nodes[];
nodes = new HashSet[21];
int[21] myints;
private HashSet nodes[];
private HashSet[] nodes;