Java-错误-MessageTooLongExceptionn

标签 java

我有这段代码,但它在这里给出错误: 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)的实例。

因此,有两种解决方案:

  1. 您只需将该类声明移至类 MessageLenght 的外部(例如在其前面)
  2. 你使该内部类静态

参见here了解更多详情。

但是,当然,还有更多内容:异常类是传达某些内容的手段。所以异常通常应该进入它们自己的类。然后:按照惯例,异常类名称以“...Exception”结尾。 MessageLength 没有。所以这整个构造对于其他 Java 程序员来说简直令人惊讶。这是一件的事情。您不希望您的代码让其他人感到惊讶。

所以,真正的答案是:你想退后一步,自己弄清楚你真正打算做什么。因为按原样,您的代码根本没有多大意义。并且您想更多地学习 java 基础知识

关于Java-错误-MessageTooLongExceptionn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40852543/

相关文章:

java - 制定在某一天开始的 Activity

java - 在 Java 中将外部 XML 解析为 JSON?

java - 如何从 Listview 接收值并将其保存到 sharedpreferences

Java POI - 使用相同参数创建Excel文件会生成不同的文件

java - 谁能告诉我运行 Spring 框架基本示例时出现的异常?

Java:d​​rawImage 动画 gif 卡住在第一帧

java - 缩放纹理和调整纹理大小之间的差异

Java Class.forName() 与 Thread.currentThread().getContextClassLoader().loadClass()

java - 是否可以在同一个项目中同时使用 JPA(用于普通 CRUD)和 JDBC(用于批量更新和调用存储过程)

java - spring-data mongo 中不区分大小写的精确匹配