Java - 无法对非静态字段进行非静态引用

时间:2015-01-13 00:02:58

标签: java

您好我正在尝试构建一个简单的程序,将包含数字的字符串转换为整数。我收到System.out.println上的错误,不知道为什么,有人可以帮忙吗?

public class TypeConvert {

int strToInt;

public int convert (String s){

    strToInt = Integer.parseInt(s);
    return strToInt;    
}

public static void main(String[] args) {
    String strNumber=("100");

    TypeConvert convertToInt = new TypeConvert();
    convertToInt.convert(strNumber);

    System.out.println(strToInt);


  }

}

这已被标记为重复,因此我正在编辑。我确实已经阅读了所有相关帖子来解决我的问题,但由于我不明白如何解决我的问题,我创建了自己的帖子。

2 个答案:

答案 0 :(得分:2)

改变这一点,

System.out.println(strToInt);

System.out.println(convertToInt.strToInt);

因为strToIntTypeConvert个实例的字段(您已将其命名为convertToInt)。

或者,你可以写

System.out.println(convertToInt.convert(strNumber));

因为convert函数返回结果。

答案 1 :(得分:0)

您的convert方法应该是一种静态方法,因为她不需要任何"状态"信息。

public class TypeConvert {
    public static int convert (String s){
        int strToInt = Integer.parseInt(s);
        return strToInt;    
    }

    public static void main(String[] args) {
        String strNumber=("100");

        int strToInt = TypeConvert.convert(strNumber);

        System.out.println(strToInt);
    }
}

通常在需要使用状态时创建非静态字段和实例方法。例如,让我们打印一个人的姓名:

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public static void main(String[] args) {
        Person bob = new Person("Bob");
        Person john = new Person("John");

        System.out.println(bob.getName()); // Prints "Bob"
        System.out.println(john.getName()); // Prints "John"
    }
}

在这种情况下,您绝对需要"保存"实例属性中的name变量,因为每个Person将具有不同的名称。

在您给我们的示例中,对于给定的字符串,输出将始终相同,因此您可以使用静态方法。