Java 类的实例可以修改静态/类变量吗?

Java 类的实例可以修改静态/类变量吗?,java,Java,我印了100和22。我错误地认为类的实例不能访问/修改类/静态变量。是的,它们可以。从: 声明中带有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量是的,它们可以。从: 声明中带有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置任何对

我印了100和22。我错误地认为类的实例不能访问/修改类/静态变量。

是的,它们可以。从:

声明中带有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量

是的,它们可以。从:

声明中带有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量

是的,它们可以。从:

声明中带有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量

是的,它们可以。从:


声明中带有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量

当然,类实例可以访问和修改静态字段(如果该范围可以访问)

不能发生的是静态语句/方法体修改它不“知道”的实例,例如使用
this
的静态方法

示例

class Person {
  public static int age = 10;
}

public class Application {
  public static void main(String[] args) {

    Person p = new Person();
    p.age = 100;
    System.out.println(Person.age);

    Person.age = 22;
    System.out.println(p.age);
  }
}

当然,一个类的实例可以访问和修改一个静态字段,如果该字段对该范围是可访问的

不能发生的是静态语句/方法体修改它不“知道”的实例,例如使用
this
的静态方法

示例

class Person {
  public static int age = 10;
}

public class Application {
  public static void main(String[] args) {

    Person p = new Person();
    p.age = 100;
    System.out.println(Person.age);

    Person.age = 22;
    System.out.println(p.age);
  }
}

当然,一个类的实例可以访问和修改一个静态字段,如果该字段对该范围是可访问的

不能发生的是静态语句/方法体修改它不“知道”的实例,例如使用
this
的静态方法

示例

class Person {
  public static int age = 10;
}

public class Application {
  public static void main(String[] args) {

    Person p = new Person();
    p.age = 100;
    System.out.println(Person.age);

    Person.age = 22;
    System.out.println(p.age);
  }
}

当然,一个类的实例可以访问和修改一个静态字段,如果该字段对该范围是可访问的

不能发生的是静态语句/方法体修改它不“知道”的实例,例如使用
this
的静态方法

示例

class Person {
  public static int age = 10;
}

public class Application {
  public static void main(String[] args) {

    Person p = new Person();
    p.age = 100;
    System.out.println(Person.age);

    Person.age = 22;
    System.out.println(p.age);
  }
}

我认为你所困惑的部分是静态的含义。Person类中的年龄变量将在Person的所有实例中共享,并且可以通过以下方式在没有实例的情况下访问:

public class Main {
    private static int meh = 0;
    int blah = 0;
    public static void main(String[] args) {
        // ugly but compiles fine
        // equivalent to Main.meh = 1
        meh = 1;
        // Will NOT compile - main method is static, 
        // references instance field "blah" out of scope
        // Equivalent to this.blah = 1
        blah = 1;
    }
}
在任何情况下更改它:

Person.age = 100;
为每个人更改它,与呼叫相同

Person p = new Person();   
p.age = 100;

以非静态的方式更改它,这意味着通过一些实例只会使代码产生误导,让人们第一眼就认为他们正在更改实例变量。您将得到一个编译器警告。

我认为您所困惑的部分是静态的含义。Person类中的年龄变量将在Person的所有实例中共享,并且可以通过以下方式在没有实例的情况下访问:

public class Main {
    private static int meh = 0;
    int blah = 0;
    public static void main(String[] args) {
        // ugly but compiles fine
        // equivalent to Main.meh = 1
        meh = 1;
        // Will NOT compile - main method is static, 
        // references instance field "blah" out of scope
        // Equivalent to this.blah = 1
        blah = 1;
    }
}
在任何情况下更改它:

Person.age = 100;
为每个人更改它,与呼叫相同

Person p = new Person();   
p.age = 100;

以非静态的方式更改它,这意味着通过一些实例只会使代码产生误导,让人们第一眼就认为他们正在更改实例变量。您将得到一个编译器警告。

我认为您所困惑的部分是静态的含义。Person类中的年龄变量将在Person的所有实例中共享,并且可以通过以下方式在没有实例的情况下访问:

public class Main {
    private static int meh = 0;
    int blah = 0;
    public static void main(String[] args) {
        // ugly but compiles fine
        // equivalent to Main.meh = 1
        meh = 1;
        // Will NOT compile - main method is static, 
        // references instance field "blah" out of scope
        // Equivalent to this.blah = 1
        blah = 1;
    }
}
在任何情况下更改它:

Person.age = 100;
为每个人更改它,与呼叫相同

Person p = new Person();   
p.age = 100;

以非静态的方式更改它,这意味着通过一些实例只会使代码产生误导,让人们第一眼就认为他们正在更改实例变量。您将得到一个编译器警告。

我认为您所困惑的部分是静态的含义。Person类中的年龄变量将在Person的所有实例中共享,并且可以通过以下方式在没有实例的情况下访问:

public class Main {
    private static int meh = 0;
    int blah = 0;
    public static void main(String[] args) {
        // ugly but compiles fine
        // equivalent to Main.meh = 1
        meh = 1;
        // Will NOT compile - main method is static, 
        // references instance field "blah" out of scope
        // Equivalent to this.blah = 1
        blah = 1;
    }
}
在任何情况下更改它:

Person.age = 100;
为每个人更改它,与呼叫相同

Person p = new Person();   
p.age = 100;

以非静态的方式更改它,这意味着通过一些实例只会使代码产生误导,让人们第一眼就认为他们正在更改实例变量。您将收到一条编译器警告。

您所说的“实例变量修改静态变量”是什么意思?一个变量如何修改另一个变量?另外,想想看——这是另一个没有意义的方向(即静态方法不可能访问实例变量)。为什么要禁止另一个方向?你是对的,我已经将其修改为类的实例。我不知道你发布的代码是为了演示什么。你所说的“实例变量修改静态变量”是什么意思?一个变量如何修改另一个变量?还有,想想看,这是另一个方向