我有这段代码,但它在这里给出错误: throw new MessageTooLongException();,它说“没有可以访问类型 MessageLenght 的封闭实例。必须使用 MessageLenght 类型的封闭实例来限定分配(例如 x.new A( ) 其中 x 是 MessageLenght 的实例)。”我正在使用 Eclipse。我不明白为什么它会出错。请帮助我。
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.*;
class MessageLenght extends MessageTooLongException
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
try
{
char ch;
do
{
System.out.println("Please enter the text: ");;
String hr = keyboard.nextLine();
int count = hr.length();
if(count>= 20)
{
throw new MessageTooLongException();
}
else
{
System.out.println("Text: " + count + "characrters which is acceptable length.");
}
System.out.println("Do you want to continue- Y/N");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
ch = s.charAt(0);
}
while((ch =='Y') || (ch =='y'));
}
catch(MessageTooLongException ex)
{
System.out.println(ex.getMessage());
}
catch(IOException ex)
{
System.out.println(ex.getMessage());
}
}
class MessageTooLongException extends Exception
{
public MessageTooLongException()
{
super("Message Too Long Exception");
}
public MessageTooLongException(String msg)
{
super(msg);
}
}
}
最佳答案
问题是:您的内部base异常MessageTooLongException未标记为静态!
这意味着:为了创建它的实例(或扩展的类的实例),您需要该外部的实例 em> MessageTooLongException 实际上也属于该类。换句话说:你的代码无法工作。您无法创建 MessageLenght 的实例...因为您已经需要该类的实例才能创建父类(super class)的实例。
因此,有两种解决方案:
- 您只需将该类声明移至类 MessageLenght 的外部(例如在其前面)
- 你使该内部类静态
参见here了解更多详情。
但是,当然,还有更多内容:异常类是传达某些内容的手段。所以异常通常应该进入它们自己的类。然后:按照惯例,异常类名称以“...Exception”结尾。 MessageLength 没有。所以这整个构造对于其他 Java 程序员来说简直令人惊讶。这是一件坏的事情。您不希望您的代码让其他人感到惊讶。
所以,真正的答案是:你想退后一步,自己弄清楚你真正打算做什么。因为按原样,您的代码根本没有多大意义。并且您想更多地学习 java 基础知识。
关于Java-错误-MessageTooLongExceptionn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40852543/