Java 使用;试着抓住;创建一个新对象
基本上我有一个带构造函数的类,特别是一个状态构造函数。只有在构造函数中我有一个城市类型的区域时,我才能创建一个新的状态(状态有两个构造函数,都接受名称和区域) 代码如下所示:Java 使用;试着抓住;创建一个新对象,java,exception,Java,Exception,基本上我有一个带构造函数的类,特别是一个状态构造函数。只有在构造函数中我有一个城市类型的区域时,我才能创建一个新的状态(状态有两个构造函数,都接受名称和区域) 代码如下所示: public State(String Name, int Population, Region Capital) throws IllegalArgumentException { super(Name, Population); if(!(Capital.getRegionType() == Regio
public State(String Name, int Population, Region Capital) throws IllegalArgumentException {
super(Name, Population);
if(!(Capital.getRegionType() == RegionType.CITY)){
System.out.println("ERROR");
throw new java.lang.IllegalArgumentException();
}
this.Capital = Capital;
}
区域的类型是使用枚举类定义的。问题是当我在测试类(主类)中创建一个新函数时
这基本上是我的问题,最后两行给了我一个错误,说我没有初始化变量s2
我试着在不使用“try-and-catch”的情况下运行代码,以查看构造函数中的if语句是否可以工作,但没有
方法“add”是状态超类(Contry)中定义的方法,它只允许向其中添加状态
希望你能帮助我,因为我不知道如何解决这个问题
添加(请回答我的问题)
班级地区:
public class Region {
private String name;
private int population;
private RegionType regionType;
public Region(String name, int population, RegionType regionType){
this.name = name;
this.population = population;
this.regionType = regionType;
}
//get Region Type
public RegionType getRegionType(){
return regionType;
}
区域类型为的枚举:
public enum RegionType {
CITY,
VILLAGE,
TOWN,
}在第二个代码块中,
s2
仅在try
块中具有作用域。相反,在try
之外声明s2
Region3 = new Region("BedRock", 23423,RegionType.VILLAGE);
State s2 = null;
try{
s2 = new State("Khemed", Region3);
s2.addRegion(Region2);
s2.addRegion(Region1);
}catch(EmptyStackException e){ //You should log this or something
}
编辑:这就是我发布得太快的原因s2
语句应该在try
中
Region3 = new Region("BedRock", 23423,RegionType.VILLAGE);
State s2 = null;
try{
s2 = new State("Khemed", Region3);
s2.addRegion(Region2);
s2.addRegion(Region1);
}catch(EmptyStackException e){ //You should log this or something
}
变量
s2
仅在try/catch
块中定义,请尝试将这两行放在try/catch
块中
但是这里最好的方法是避免捕获异常IllegalArgumentException
Region3 = new Region("BedRock", 23423,RegionType.VILLAGE); //
try{
State s2 = new State("Khemed", Region3);
s2.addRegion(Region2);
s2.addRegion(Region1);
}catch(IllegalArgumentException e){
}
首先,您必须在try/catch块中放入两行。您的“State”构造函数有3个参数。但您正在使用另一个构造函数(2个参数):
在try块中与如下填充参数一起使用:
Region3 = new Region("BedRock", 23423,RegionType.VILLAGE); //
try{
State s2 = new State("Khemed", 123,Region3);
s2.addRegion(Region2);
s2.addRegion(Region1);
}catch(IllegalArgumentException e){
}
您应该遵循java标识符的命名规则,以便更容易阅读代码。那么,你抛出一个
IllegalArgumentException
,那么什么会捕获EmptyStackException
?所以我已经这样做了,最后两行现在工作正常,问题是程序没有捕获异常,只是让它在不应该的时候发生。你至少需要发布你的RegionType代码,也许你的区域类也有。两者都添加了,希望对你有所帮助。我已经完成了,并且解决了最后两行的问题,现在它们工作正常了。但是我似乎无法在“try-catch”块中捕获异常,构造函数在不应该的情况下工作良好。哪个try/catch块?类状态有2个构造函数,一个有2个参数,另一个有3个参数。。忘了告诉你会马上添加。你认为这就是它不起作用的原因吗?
Region3 = new Region("BedRock", 23423,RegionType.VILLAGE); //
try{
State s2 = new State("Khemed", 123,Region3);
s2.addRegion(Region2);
s2.addRegion(Region1);
}catch(IllegalArgumentException e){
}