Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';我不能在任何方法之外修改类成员变量吗?_Java_Member - Fatal编程技术网

Java 为什么可以';我不能在任何方法之外修改类成员变量吗?

Java 为什么可以';我不能在任何方法之外修改类成员变量吗?,java,member,Java,Member,我有一个带有一些变量的类。当我在主类中实例化该类的对象时。我只能访问和修改方法中的成员变量,任何方法;不在他们之外。为什么呢?我被卡住了,似乎在谷歌上找不到答案 class SomeVariables{ String s; int dontneed; } class MainClass{ SomeVariables vars= new SomeVariables(); vars.s = "why this doesnt work?. IDE says Uknow

我有一个带有一些变量的类。当我在主类中实例化该类的对象时。我只能访问和修改方法中的成员变量,任何方法;不在他们之外。为什么呢?我被卡住了,似乎在谷歌上找不到答案

class SomeVariables{
    String s;
    int dontneed;
}
class MainClass{
    SomeVariables vars= new SomeVariables();

    vars.s = "why this doesnt work?. IDE says Uknown class 'vars.s'";
    System.out.println(vars.s);        // Accesing it also doesnt work

    void ChangeValue(){
        vars.s = "why does this work?";
    }

    public static void main(String[]args){
    }
}

我还尝试了访问说明符,得到了相同的结果

这里是一个超级简化的答案,如果您想了解更多详细信息,只需添加一条注释;)


这是一个超级简化的答案,如果您想了解更多详细信息,只需添加一条注释;)


它不起作用,因为您在构造函数或Method之外定义的实例不是有效的Java语法

一个可能的解决办法是:

class SomeVariables {
    String s;
    int dontneed;
}

class MainClass {
    public static void main(String[]args){
        SomeVariables vars = new SomeVariables();

        vars.s = "why this doesnt work?. IDE says Uknown class 'vars.s'";
        System.out.println(vars.s);
    }
}

但您可能需要考虑对类变量的保护,例如使代码“> SomeVariables < /代码>的所有属性,并使用<代码> SETESTS 和<代码> GETStuts<代码>方法来获取和修改类本身中的值。例如:

class SomeVariables {
    private String s;
    private int dontneed;

    // Constructor method
    public SomeVariables() {
        // Initialize your attributes
    }

    public String getValue() {
        return s;
    }

    public void setValue(String value) {
        s = value;
    }
}

class MainClass {
    public static void main(String[]args){
        SomeVariables vars = new SomeVariables();

        vars.setValue("Some value");

        System.out.println(vars.getValue());
    }
}

它不起作用,因为您在构造函数或Method之外定义的实例不是有效的Java语法

一个可能的解决办法是:

class SomeVariables {
    String s;
    int dontneed;
}

class MainClass {
    public static void main(String[]args){
        SomeVariables vars = new SomeVariables();

        vars.s = "why this doesnt work?. IDE says Uknown class 'vars.s'";
        System.out.println(vars.s);
    }
}

但您可能需要考虑对类变量的保护,例如使代码“> SomeVariables < /代码>的所有属性,并使用<代码> SETESTS 和<代码> GETStuts<代码>方法来获取和修改类本身中的值。例如:

class SomeVariables {
    private String s;
    private int dontneed;

    // Constructor method
    public SomeVariables() {
        // Initialize your attributes
    }

    public String getValue() {
        return s;
    }

    public void setValue(String value) {
        s = value;
    }
}

class MainClass {
    public static void main(String[]args){
        SomeVariables vars = new SomeVariables();

        vars.setValue("Some value");

        System.out.println(vars.getValue());
    }
}

在java中,语句必须在代码块(方法、构造函数、静态或实例初始化块)中,而不是在类的主体中。我是新来的java@ernest_k既然这是一个答案,你为什么不把它作为一个答案发布呢?@KyleWilliamson,因为他投票支持“接近重复”。在java中,语句必须在代码块(方法、构造函数、静态或实例初始化块)中,而不是在类的主体中。我是新来的java@ernest_k既然这是一个答案,你为什么不把它作为一个答案发布呢?@KyleWilliamson,因为他投票支持“接近重复”。见梅塔。