# 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的公共访问说明符。
答案 0 :(得分:0)
您的TableFullException
构造函数不公开,因此您无法从不属于同一个包的类创建该异常的实例。使构造函数公开,您的问题将得到解决。
答案 1 :(得分:0)
这是因为你有一个类私有构造函数。 您已将构造函数定义为包private,方法是不向构造函数提供任何访问修饰符示例:
public class PackagePrivateClassConstructor{
PackagePrivateClassConstructor(){}
}
您可以在同一个包中使用此构造函数,但在包外,它不允许您使用它。
这适用于所有课程表,椅子和椅子。 HumanBeing 强>
您需要将其更改为
public class MyClass{
public MyCLass(){}
}