0

有人可以解释一下这里发生了什么吗?为什么“不能从静态上下文引用非静态变量”。出现在这段代码中?我尝试将 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);
        }
    }
}
4

3 回答 3

4

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

你有两个选择:

  1. 声明BinaryFormatExceptionstatic
  2. BinaryFormatException课程代码移到课程之外binaryToDecimal
于 2013-09-07T00:10:49.320 回答
2

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

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

于 2013-09-07T00:13:08.647 回答
0

谢谢你的回复。这是我几分钟前终于想出的答案,似乎可以正常工作。

    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);
    }
}
于 2013-09-07T20:38:51.167 回答