Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用;试着抓住;创建一个新对象_Java_Exception - Fatal编程技术网

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){
 }