无法访问Java类异常 - 访问说明符限制

时间:2014-10-13 17:53:50

标签: java

# EvenDriver.java
package com.EventDrivenScenario.SystemElements;

import com.EventDrivenScenario.Exceptions.TableFullException;
import java.util.Random;

public class Table {
     static final int TABLE_SIZE = 6;
     static int tableCurrentSize;
     Table(){
     }
     public static void main(String args[]){
          Random eventTrigger = new Random();
          while(true){
               try {
                   if(eventTrigger.nextLong()%2 == 0){
                        new HumanBeing();
                   }
                   if (tableCurrentSize == TABLE_SIZE) {
                       throw new TableFullException();
                   }
               } catch(TableFullException e) {
                      System.out.println(e.getMessage());
                      break;
               }
         }
     }
}

class HumanBeing{
    HumanBeing(){
         new Chairs();
    }
}

class Chairs{
     Chairs(){
         Table.tableCurrentSize++;
     }
}
# TableFullException
package com.EventDrivenScenario.Exceptions;
public class TableFullException extends Exception{
    TableFullException(){

    }
    public String getMessage() {
         return ("Table Full - No More Visitors");
    }
}

在上面的代码中,当我尝试编译#EventDriver.java时,我收到编译时错误,表明TableFullException不是公共的,并且尽管声明它是公共的,但无法在包外访问。

但是如果我将两个文件中的package语句更改为## package com.EventDriver; ##它工作正常。我只是想了解为什么上面的代码抛出编译时错误,尽管提供了TableFullException的公共访问说明符。

2 个答案:

答案 0 :(得分:0)

您的TableFullException构造函数不公开,因此您无法从不属于同一个包的类创建该异常的实例。使构造函数公开,您的问题将得到解决。

答案 1 :(得分:0)

这是因为你有一个类私有构造函数。 您已将构造函数定义为包private,方法是不向构造函数提供任何访问修饰符示例:

public class PackagePrivateClassConstructor{
     PackagePrivateClassConstructor(){}
}

您可以在同一个包中使用此构造函数,但在包外,它不允许您使用它。

这适用于所有课程表,椅子和椅子。 HumanBeing

您需要将其更改为

public class MyClass{
     public MyCLass(){}
}