Java中ArrayList调用add()报错及字符串数组赋值异常问题
Java类初始化代码错误的解决方法
第一个问题:ArrayList调用add方法报错
Java语法规定,类的根级别作用域里只能定义成员变量、方法、构造器、初始化块这类结构,不能直接写执行语句(比如paths.add(...)这种操作)。你把add方法调用直接放在类体里,这不符合语法规范,所以编译器报"cannot resolve symbol add"。
三种修正方式:
方式1:在构造器中初始化
import java.util.*; public class Player { ArrayList<String> paths = new ArrayList<String>(); // 构造器中完成元素添加 public Player() { paths.add("src/images/pacman.png"); paths.add("src/images/pacmanUp.png"); } // 其他构造器和方法 }
方式2:用实例初始化块
import java.util.*; public class Player { ArrayList<String> paths = new ArrayList<String>(); // 实例初始化块,创建对象时自动执行 { paths.add("src/images/pacman.png"); paths.add("src/images/pacmanUp.png"); } // 其他构造器和方法 }
方式3:直接用集合初始化语法(最简洁)
import java.util.*; public class Player { // 初始化集合时直接添加元素 ArrayList<String> paths = new ArrayList<String>() {{ add("src/images/pacman.png"); add("src/images/pacmanUp.png"); }}; // 其他构造器和方法 }
第二个问题:数组赋值报错
同样的原因:paths[0] = "HEY";是执行语句,不能直接放在类体里,必须放到方法、构造器或者初始化块中,否则编译器会误判语法结构,报"paths is not a defined class"。
两种修正方式:
方式1:在构造器中赋值
public class Player { String[] paths = new String[4]; public Player() { paths[0] = "HEY"; } // 其他方法 }
方式2:直接用数组初始化语法
public class Player { // 声明数组时直接赋值 String[] paths = {"HEY", null, null, null}; // 其他构造器和方法 }
内容的提问来源于stack exchange,提问作者Perseus
相关产品推荐
相关产品推荐

