为什么在这种情况下两个数组的作用不同?
#include <bits/stdc++.h>
using namespace std;
int main() {
char a[100] = {}; // all white spaces
int b[100] = {} ; // all 0
for(int i = 0; i < 100; i++)
cout << a[i] << "\n";
}
for(int i = 0; i < 100; i++)
cout << b[i] << "\n";
}
它确实被初始化为零。因为它是一个字符数组,所以0只是\0
字符。将该行从
cout << a[i] << "\n";
至
std::cout << '[' <<a[i] <<']' <<std::boolalpha<< (a[i] == '\0') << "\n";
帮助确认你所期望的是真的。
问题内容: 哪两个代码片段正确创建并初始化了一个int元素的静态数组?(选择两个。) 一个。 B. C。 D. 答案:A,B 在这里即使D看起来是真实的,谁能让我知道为什么D是错误的。 问题答案: 正确答案是1和2(或者用您的符号表示A和B),而且正确的解决方案是: 解决方案D不会自动初始化数组,因为运行时会加载该类。它只是定义了一个静态方法(init),您必须在使用数组字段之前调用该方法。
报价王 JLS #8.1.3: 内部类不能声明静态初始值设定项 (§8.7)...... 这表现为: 现在既然Java的内部(非静态)类像其他类一样由类加载器加载,为什么我们不能为它们提供静态初始化器呢? 这一限制背后的原因是什么?
我遇到了下面的Java代码,起初看起来不错,但从未编译过: 下面是IDE :变量USER_ID可能已分配的错误消息。 将值赋值给静态最终变量有问题吗?
问题内容: 我有2节课: Class A: Class B: I create a Main class which just creates new A: The output I get is: 如您所见,A的构造函数在其静态初始值设定项之前被调用。 我了解它与我创建的循环依赖关系有关,但我印象中静态初始化程序应始终在构造函数之前运行。 发生这种情况的原因是什么(技术上在Java实现中)? 是
null null (2)会产生有趣的效果。例如。静态init命令的失败突然不再是UB(本身)了。 (3)会很奇怪。
我想将一些对象实例绑定到使用Javassist创建的类。该对象是从某个源读取的,数据是预先未知的。 但当我检查API时,Javassist似乎创建了一个真正的字节码,它以“调用这个”或“实例化那个”或“使用这个常量”的形式存储初始化。 有没有办法让Javassist向运行时给定的现有实例添加一个初始化的静态字段?