java定义长度为0的数组空数组案例
如下:
int[] array = new int[0];  // 定义⼀个长度为 0 的数组 / 空数组
Sring[] arr = new String[0]; // 定义⼀个长度为 0 的数组 / 空数组
长度为 0 的数组 / 空数组并不是 null
有时数组⾥可能只有⼀个空字符串 "",这时数组长度是 1。这种情况也要注意判断。
if ( arr.length == 1 && arr[ 0 ].equals( "" ) ) {
System.out.println( "输⼊的数组不能只包含⼀个空字符串" );
return;
}
补充:java定义⼀个空数组_⼀个 Java ⽅法,最多能定义多少参数?
在 JVM 中,⼀个 Java ⽅法,最多能定义多少参数呢?这是⼀个很⽆聊的问题,即使能定义⼀万个,⼗万个,谁⼜会真的去这么做呢。
但是作为⼀个 coder,最重要的不就是好奇⼼吗,没有好奇⼼,和⼀条咸鱼⼜有什么区别呢?本⽂作者就是这样⼀位充满好奇⼼的 coder。
我最近给我的 QuickTheories 分⽀添加了⼀个接⼝:
@FunctionalInterface
public interface QuadFunction {
E apply(A a, B b, C c, D d);
}
字符串长度不够后面补0公式让我好奇的是这个⽅法能有多少个类型参数。到⽬前为⽌,我敢说,Java 语⾔规范并没有谈及这个问题。
对于实现定义的限制可能是什么,我有两个猜测:
1、编译器会设置⼀个可预测的限制,如 255 或 65535。
2、编译器的紧急⾏为会由于实现细节(堆栈溢出或同样不可预测/不相关的东西)⽽设置意外的限制。
⽣成⽅法很简单。幸运的是,我们不必使⽤任何类型参数,只需以的形式发出它们:
def write_type_plain(count):
with open('Test.java', 'w') as f:
f.write("public class Test {\n")
f.write("public    for i in range(count):
if (i > 0):
f.write(", ")
f.write("A" + str(i + 1))
f.write("> void testMethod() {}")
f.write("}")
运⾏⼆进制搜索可以得到以下输出:
>>> error: UTF8 representation for string ">>> largest type: 2776
这个错误有点模糊,但事后看来是可以预见的。编译器⽣成的类⽂件包含许多字符串,包括类中每个⽅法的⽅法签名。这些字符串存储在常量池中,常量池中的条⽬最⼤为 65535 字节,这是由 JVM 规范规定的限制。
所以,我之前的猜测都不完全正确。类型参数的最⼤数⽬是⼀个突现特征(emergent property),⽽不是⼀个明确的决定。不过,并不是编译器本⾝的实现导致了错误。
相反,JVM 的类⽂件格式限制了可以在类⽂件中表⽰的类型参数的数量。这是真的,尽管 JVM对泛型⼀⽆所知。这也意味着类型参数的最⼤数⽬完全取决于如何编写⽅法。
我尝试了⼀种新的编码类型参数的⽅法(先前链接⽂件中的 write_Type_Compact),使⽤完整的合法 ASCII 字符(A-Z、a-z、$和_)。该实现有点过于复杂,因为可以使⽤字符 0~9,但不能是标识符的初始
字符,因为 Java 关键字不能作为类型参数出现。我只是⽤等长的 UTF-8 字符替换了短单词「if」和「do」。更紧凑的编码将参数数量从 2776 增加到 3123。
不⽅便的是,_A 是⼀种合法的 Java 标识符,但 _ 不是。谢天谢地,我的编码在不使⽤初始_情况下就⽣成了 3392 个 2 字节类型参数,因此我觉得没有必要进⾏簿记以发出初始字符_。
再来⼀个⼩技巧
解压类⽂件显⽰,65536 个字符的⼤部分不是我⽣成的类型参数,⽽是⼦字符串 Ljava/lang/object 的重复实例。因为没有提供关于类型参数的信息,所以类⽂件显⽰它们扩展了对象,并在⽅法签名中对其进⾏编码。我修改了⽣成器来解决这个问题。
循环的关键部分是:
s = type_var(i)
f.write(s)
if (s != 'A'):
f.write(" extends A")
在类型参数中,除了⼀个实例 java/Lang/Object 之外的所有实例都被替换为 A。在进⾏了这个更改之后,编译了⼀个具有9851 个类型参数的⽅法。
由于参数的数量增加了很多,所以我使⽤的代码肯定需要调整。使⽤⾮ ASCII Unicode 标识符可能是完全⾼效的必要条件,但简单地指出这是可以做到的我就很满意了。
这些都不重要
很难想象有⼈会达到这个极限。代码⽣成有时会达到语⾔或编译器的限制,但即使⽣成的代码似乎也不太可能使⽤成百上千的类型参数。
尽管如此,如果我是规则制定者,我会考虑明确禁⽌任何类或⽅法具有 255 个以上的类型参数。明确的限制似乎更好,即使它只影响百万分之⼀的程序。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。