Java 类的实例可以修改静态/类变量吗?
我印了100和22。我错误地认为类的实例不能访问/修改类/静态变量。是的,它们可以。从: 声明中带有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量是的,它们可以。从: 声明中带有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量是的,它们可以。从: 声明中带有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例都共享一个类变量,该变量位于内存中的一个固定位置任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量是的,它们可以。从:Java 类的实例可以修改静态/类变量吗?,java,Java,我印了100和22。我错误地认为类的实例不能访问/修改类/静态变量。是的,它们可以。从: 声明中带有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;
以非静态的方式更改它,这意味着通过一些实例只会使代码产生误导,让人们第一眼就认为他们正在更改实例变量。您将收到一条编译器警告。您所说的“实例变量修改静态变量”是什么意思?一个变量如何修改另一个变量?另外,想想看——这是另一个没有意义的方向(即静态方法不可能访问实例变量)。为什么要禁止另一个方向?你是对的,我已经将其修改为类的实例。我不知道你发布的代码是为了演示什么。你所说的“实例变量修改静态变量”是什么意思?一个变量如何修改另一个变量?还有,想想看,这是另一个方向