Java 爪哇:为什么是comp。在声明期间使用{}not初始化数组时出错
如果尝试在声明语句以外的语句上使用大括号初始化数组,为什么会出现编译错误Java 爪哇:为什么是comp。在声明期间使用{}not初始化数组时出错,java,arrays,initialization,Java,Arrays,Initialization,如果尝试在声明语句以外的语句上使用大括号初始化数组,为什么会出现编译错误 class Demo { public static void main(String[] args) { String[] myName; myName = {"AA", "BB", "CC"}; for(String s: myName) { System.out.print(s + " "); } } }
class Demo {
public static void main(String[] args) {
String[] myName;
myName = {"AA", "BB", "CC"};
for(String s: myName) {
System.out.print(s + " ");
}
}
}
仅在声明语句中使用大括号进行初始化有什么意义
demo.java:4: error: illegal start of expression
myName = {"AA", "BB", "CC"};
^
demo.java:4: error: not a statement
myName = {"AA", "BB", "CC"};
^
demo.java:4: error: ';' expected
myName = {"AA", "BB", "CC"};
^
demo.java:5: error: illegal start of type
for(String s: myName) {
^
demo.java:5: error: ')' expected
for(String s: myName) {
^
demo.java:5: error: <identifier> expected
for(String s: myName) {
^
demo.java:10: error: class, interface, or enum expected
}
^
7 errors
demo.java:4:错误:表达式的开始非法
myName={“AA”、“BB”、“CC”};
^
java:4:错误:不是语句
myName={“AA”、“BB”、“CC”};
^
java:4:错误:';'预期
myName={“AA”、“BB”、“CC”};
^
java:5:错误:类型的非法开始
for(字符串s:myName){
^
java:5:错误:“)”应为
for(字符串s:myName){
^
java:5:错误:应为
for(字符串s:myName){
^
java:10:错误:需要类、接口或枚举
}
^
7个错误
从语法上正确编写您要编写的内容的方法是:
myName = new String[]{"AA", "BB", "CC"};
我怀疑Java不允许省略新字符串[]
的原因是,在许多上下文中,编译器无法从元素的类型中找出所需的数组类型。假设允许您编写:
{1, 2, 3}
那是int[]
,Integer[]
,Number[]
还是对象[]
唯一允许省略
新字符串[]
的地方是初始值设定项,编译器已经知道数组类型。编写尝试编写的内容的语法正确方法是:
myName = new String[]{"AA", "BB", "CC"};
我怀疑Java不允许省略新字符串[]
的原因是,在许多上下文中,编译器无法从元素的类型中找出所需的数组类型。假设允许您编写:
{1, 2, 3}
那是int[]
,Integer[]
,Number[]
还是对象[]
唯一允许省略新字符串[]
的地方是初始值设定项,编译器已经知道数组类型
如果尝试在声明语句以外的语句上使用大括号初始化数组,为什么会出现编译错误
class Demo {
public static void main(String[] args) {
String[] myName;
myName = {"AA", "BB", "CC"};
for(String s: myName) {
System.out.print(s + " ");
}
}
}
因为在Java中这样做基本上是无效的。编译器只是强制执行Java语言规范的规则。您需要指定数组类型:
myName = new String[] { ... };
从:
可以在声明(§8.3、§9.3、§14.4)中指定数组初始值设定项,或将其作为数组创建表达式(§15.10)的一部分,以创建数组并提供一些初始值
有关声明的各个章节包括以下内容:
VariableInitializer:
Expression
ArrayInitializer
而数组创建表达式()是:
后来:
仅在声明语句中使用大括号进行初始化有什么意义
demo.java:4: error: illegal start of expression
myName = {"AA", "BB", "CC"};
^
demo.java:4: error: not a statement
myName = {"AA", "BB", "CC"};
^
demo.java:4: error: ';' expected
myName = {"AA", "BB", "CC"};
^
demo.java:5: error: illegal start of type
for(String s: myName) {
^
demo.java:5: error: ')' expected
for(String s: myName) {
^
demo.java:5: error: <identifier> expected
for(String s: myName) {
^
demo.java:10: error: class, interface, or enum expected
}
^
7 errors
我怀疑它在其他方面简化了语言规范。我同意您应该能够做到这一点-您可能希望编译器能够从变量类型推断数组类型,就像在声明时那样。但请记住,对于大多数语言,右边的表达式类型赋值运算符的nd端不受赋值目标的影响。对于正常语句中的每个表达式类型,在语言术语上,它通常更整洁,可以很好地定义,而不引用同一语句中的其他表达式
用数组创建表达式修复代码是相当容易的,所以我只能接受它
如果尝试在声明语句以外的语句上使用大括号初始化数组,为什么会出现编译错误
class Demo {
public static void main(String[] args) {
String[] myName;
myName = {"AA", "BB", "CC"};
for(String s: myName) {
System.out.print(s + " ");
}
}
}
因为在Java中这样做基本上是无效的。编译器只是强制执行Java语言规范的规则。您需要指定数组类型:
myName = new String[] { ... };
从:
可以在声明(§8.3、§9.3、§14.4)中指定数组初始值设定项,或将其作为数组创建表达式(§15.10)的一部分,以创建数组并提供一些初始值
有关声明的各个章节包括以下内容:
VariableInitializer:
Expression
ArrayInitializer
而数组创建表达式()是:
后来:
仅在声明语句中使用大括号进行初始化有什么意义
demo.java:4: error: illegal start of expression
myName = {"AA", "BB", "CC"};
^
demo.java:4: error: not a statement
myName = {"AA", "BB", "CC"};
^
demo.java:4: error: ';' expected
myName = {"AA", "BB", "CC"};
^
demo.java:5: error: illegal start of type
for(String s: myName) {
^
demo.java:5: error: ')' expected
for(String s: myName) {
^
demo.java:5: error: <identifier> expected
for(String s: myName) {
^
demo.java:10: error: class, interface, or enum expected
}
^
7 errors
我怀疑它在其他方面简化了语言规范。我同意您应该能够做到这一点-您可能希望编译器能够从变量类型推断数组类型,就像在声明时那样。但请记住,对于大多数语言,右边的表达式类型赋值运算符的nd端不受赋值目标的影响。对于正常语句中的每个表达式类型,在语言术语上,它通常更整洁,可以很好地定义,而不引用同一语句中的其他表达式
用数组创建表达式修复代码相当容易,所以我只能接受它。好问题,我甚至不知道,没有新字符串[]你可以做好问题,我甚至不知道,没有新字符串[]你可以做很好的解释。很好。很好的解释。很好的解释。很好。