2016-11-28 88 views
1

我有这个代码,但它在这里给出错误:throw new MessageTooLongException();它说:“没有可以访问类型MessageLenght的封闭实例必须使用一个封闭的MessageLenght实例限定分配(egxnew A(),其中x是MessageLenght的一个实例)。“我正在使用Eclipse。我无法弄清楚它为什么会出错。请帮帮我。Java-错误 - MessageTooLongExceptionn

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); 
     } 
    } 
} 
+0

@selimssevgi当然,这段代码没有多大意义。但是就像他的代码一样奇怪,他不会去做多重继承。 – GhostCat

+0

@aa ... Minor nitpick:您应该将名为MessageLenght的名称更改为MessageLength,以便使用该类的人员可以更轻松地使用它。 –

回答

1

的问题是:你的内在基地例外MessageTooLongException是标记为静态

这意味着:为了创建它的一个实例(或一类扩展的实例),你需要哪些MessageTooLongException实际上属于太那个类的一个实例。换句话说:你的代码无法工作。您不能创建MessageLenght的实例...因为您已经需要该类的实例来创建超类的实例。

所以,两种解决方案:

  1. 只需把该类声明课外MessageLenght的(例如,在它的前面)
  2. 您作出这样的内部类静态

查看here了解更多详情。

但是,当然,还有更多的东西:异常类是传达信息的手段。所以异常通常应该进入他们自己的类。然后:按照惯例,异常类名以“... Exception”结尾。 MessageLenght没有。所以这个整个构造只是给其他java程序员惊喜。这是一个不好的的事情。你不希望你的代码让其他人感到惊讶。

所以,这里真正的答案是:你想退后一步,为自己澄清你实际打算做什么。因为现在,你的代码根本没有什么意义。并且您想要学习更多的java 基本知识