Java 为什么我创建的自定义异常会导致非静态变量错误?

Java 为什么我创建的自定义异常会导致非静态变量错误?,java,exception,non-static,custom-exceptions,Java,Exception,Non Static,Custom Exceptions,有人能解释一下这是怎么回事吗?为什么代码中出现“非静态变量this不能从静态上下文引用”?我已尝试将parseBinary更改为非静态。我已尝试将BinaryFormatException类更改为静态。。。(不允许)。我对这个错误的理解非常薄弱。我知道我通常可以交换一些静态和公开的词语,让它正常工作。没有这样的运气。这是一个家庭作业问题。。。但这项工作并不是围绕着错误展开的。它与创建自定义异常类有关,该类在二进制字符串格式错误时抛出。因此,虽然我的问题将帮助我回答这个问题,但它不会给我答案 pu

有人能解释一下这是怎么回事吗?为什么代码中出现“非静态变量this不能从静态上下文引用”?我已尝试将parseBinary更改为非静态。我已尝试将BinaryFormatException类更改为静态。。。(不允许)。我对这个错误的理解非常薄弱。我知道我通常可以交换一些静态和公开的词语,让它正常工作。没有这样的运气。这是一个家庭作业问题。。。但这项工作并不是围绕着错误展开的。它与创建自定义异常类有关,该类在二进制字符串格式错误时抛出。因此,虽然我的问题将帮助我回答这个问题,但它不会给我答案

public class binaryToDecimal {

    public static void main(String[] args) {
        try {
            System.out.println(parseBinary("10001"));
            System.out.println(parseBinary("101111111"));
        } catch (BinaryFormatException ex) {
            ex.getMessage();
        }
    }

    public static int parseBinary(String binaryString)
            throws BinaryFormatException {
        int value = 0;

        for (int i = 0; i < binaryString.length(); i++) {
            char ch = binaryString.charAt(i);

            if (ch != '0' && ch != '1') {
                throw new BinaryFormatException(String message);
                value = 0;
            } else
                value = value * 2 + binaryString.charAt(i) - '0';
        }

        return value;
    }

    class BinaryFormatException extends Exception {
        public BinaryFormatException(String message) {
            super(message);
        }
    }
}
public类binaryToDecimal{
公共静态void main(字符串[]args){
试一试{
System.out.println(parseBinary(“10001”);
System.out.println(parseBinary(“101111111”);
}捕获(BinaryFormatException-ex){
例如getMessage();
}
}
公共静态int-parseBinary(字符串二进制字符串)
抛出BinaryFormatException{
int值=0;
对于(int i=0;i
看起来您已经将
BinaryFormatException
定义为公共类的内部类
binaryToDecimal
。这意味着您需要一个
binaryToDecimal
的实例才能拥有一个
BinaryFormatException
的实例。但是,您处于
parseBinary
方法的
static
上下文中。没有
binaryToDecimal
的实例

你有两个选择:

  • 声明
    BinaryFormatException
    class
    static
  • BinaryFormatException
    类代码移到
    binaryToDecimal
    类之外

  • 看起来您已经将
    BinaryFormatException
    定义为公共类的内部类
    binaryToDecimal
    。这意味着您需要一个
    binaryToDecimal
    的实例才能拥有一个
    BinaryFormatException
    的实例。但是,您处于
    parseBinary
    方法的
    static
    上下文中。没有
    binaryToDecimal
    的实例

    你有两个选择:

  • 声明
    BinaryFormatException
    class
    static
  • BinaryFormatException
    类代码移到
    binaryToDecimal
    类之外

  • 因为BinaryFormatException是BinaryToDecimal的内部类,所以它需要一个外部实例来创建一个。然而,parseBinary是一个静态方法,它在没有类实例的情况下运行


    将单词“static”放在“class BinaryFormat Exception”之前以解决此问题。

    因为BinaryFormatException是BinaryToDecimal的内部类,所以需要外部实例来创建。然而,parseBinary是一个静态方法,它在没有类实例的情况下运行


    请在“class BinaryFormat Exception”之前添加“static”一词以解决此问题。

    感谢您的回复。这是我几分钟前终于想出的答案,似乎很有效

        public class binaryToDecimal extends parseBinary{
    
           public static void main( String[] args ){
               try {
                   System.out.println(parseBinary( "10001"  ));
                   System.out.println(parseBinary( "141111111" ));
               } catch (BinaryFormatException ex) {
                   ex.printStackTrace();
               }
              }
        }
    
    class parseBinary{
        String binaryString = "";
       public static int parseBinary(String binaryString ) throws BinaryFormatException
          {
          int value = 0;
    
          for (int i = 0; i < binaryString.length(); i++)
             {
             char ch = binaryString.charAt(i);
    
             if (ch != '0' && ch != '1'){
                //value = value * 2 + binaryString.charAt(i) - '0';
             throw new BinaryFormatException("Invalid format at: " + ch + " in binaryString parameter.");
             }else{         
                value = value * 2 + binaryString.charAt(i) - '0';
             }
    
          }
                return value;
    
       }
    }
    class BinaryFormatException extends Exception{
        public BinaryFormatException(String message){
            super(message);
        }
    }
    
    公共类binaryToDecimal扩展了parseBinary{
    公共静态void main(字符串[]args){
    试一试{
    System.out.println(parseBinary(“10001”);
    System.out.println(parseBinary(“141111111”);
    }捕获(BinaryFormatException-ex){
    例如printStackTrace();
    }
    }
    }
    类解析二进制{
    字符串binaryString=“”;
    公共静态int-parseBinary(String binaryString)引发BinaryFormatException
    {
    int值=0;
    对于(int i=0;i
    感谢您的回复。这是我几分钟前终于想出的答案,似乎很有效

        public class binaryToDecimal extends parseBinary{
    
           public static void main( String[] args ){
               try {
                   System.out.println(parseBinary( "10001"  ));
                   System.out.println(parseBinary( "141111111" ));
               } catch (BinaryFormatException ex) {
                   ex.printStackTrace();
               }
              }
        }
    
    class parseBinary{
        String binaryString = "";
       public static int parseBinary(String binaryString ) throws BinaryFormatException
          {
          int value = 0;
    
          for (int i = 0; i < binaryString.length(); i++)
             {
             char ch = binaryString.charAt(i);
    
             if (ch != '0' && ch != '1'){
                //value = value * 2 + binaryString.charAt(i) - '0';
             throw new BinaryFormatException("Invalid format at: " + ch + " in binaryString parameter.");
             }else{         
                value = value * 2 + binaryString.charAt(i) - '0';
             }
    
          }
                return value;
    
       }
    }
    class BinaryFormatException extends Exception{
        public BinaryFormatException(String message){
            super(message);
        }
    }
    
    公共类binaryToDecimal扩展了parseBinary{
    公共静态void main(字符串[]args){
    试一试{
    System.out.println(parseBinary(“10001”);
    System.out.println(parseBinary(“141111111”);
    }捕获(BinaryFormatException-ex){
    例如printStackTrace();
    }
    }
    }
    类解析二进制{
    字符串binaryString=“”;
    公共静态int-parseBinary(String binaryString)引发BinaryFormatException
    {
    int值=0;
    对于(int i=0;i