Java 为什么我创建的自定义异常会导致非静态变量错误?
有人能解释一下这是怎么回事吗?为什么代码中出现“非静态变量this不能从静态上下文引用”?我已尝试将parseBinary更改为非静态。我已尝试将BinaryFormatException类更改为静态。。。(不允许)。我对这个错误的理解非常薄弱。我知道我通常可以交换一些静态和公开的词语,让它正常工作。没有这样的运气。这是一个家庭作业问题。。。但这项工作并不是围绕着错误展开的。它与创建自定义异常类有关,该类在二进制字符串格式错误时抛出。因此,虽然我的问题将帮助我回答这个问题,但它不会给我答案Java 为什么我创建的自定义异常会导致非静态变量错误?,java,exception,non-static,custom-exceptions,Java,Exception,Non Static,Custom Exceptions,有人能解释一下这是怎么回事吗?为什么代码中出现“非静态变量this不能从静态上下文引用”?我已尝试将parseBinary更改为非静态。我已尝试将BinaryFormatException类更改为静态。。。(不允许)。我对这个错误的理解非常薄弱。我知道我通常可以交换一些静态和公开的词语,让它正常工作。没有这样的运气。这是一个家庭作业问题。。。但这项工作并不是围绕着错误展开的。它与创建自定义异常类有关,该类在二进制字符串格式错误时抛出。因此,虽然我的问题将帮助我回答这个问题,但它不会给我答案 pu
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
classstatic
BinaryFormatException
类代码移到binaryToDecimal
类之外看起来您已经将
BinaryFormatException
定义为公共类的内部类binaryToDecimal
。这意味着您需要一个binaryToDecimal
的实例才能拥有一个BinaryFormatException
的实例。但是,您处于parseBinary
方法的static
上下文中。没有binaryToDecimal
的实例
你有两个选择:
BinaryFormatException
classstatic
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