静态变量,即static修饰的变量,可以理解为大家都拥有的变量,如:
我定义Person类对象p1和p2,给构造器Person声明Sting name和int age,然后我声明一个静态变量static int birthday.
接下来是在mian方法里调用对象的属性,
p1.name="liqiang";
p1.age=22;
//我给p1的birthday附一个值,然后在不给p2的birthday赋值的情况下打印p2.birthay,看会发生什么
p1.bithday=040101;
System.out.println(p2.birthday);
System.out.println(p1.birthday);
结果是:出现了两个040101。
这说明,用static修饰的bithday变量每个人有份,而且是一样的,全体对象中只要有一个引用了静态变量,那么全局都默认其他对象的此属性都是如此。(也意味着全局不能出现两个不同的静态变量)
顺便看一道改错:这块代码部分错误,请修改:
输出样例:
zhangsan 18
lisi 20
wangwu 22
public class Main {
public static void main(String[] args) {
Person[] p = new Person[3];
p[0].name = "zhangsan";
p[0].age = 18;
p[1].name = "lisi";
p[1].age = 20;
p[2].name = "wangwu";
p[2].age = 22;
for (int i = 0; i < p.length; i++) {
System.out.println(p[i]);
}
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
首先,Person跟构造器Person不是继承关系,用super()多此一举,删掉。
再者,对象数组没有初始化,应该初始化。
再再者,打印时直接打印p[i],而p[]里每个元素都是一个对象,而且两个方法一个是静态方法一个是非静态方法,需要单独调用对象方法来打印。
同时构造器Person里name和age已经附完值,不再需要setName和setAge方法,可以把两者删除。答案为:
class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
Person[] p = new Person[3];
p[0] = new Person("zhangsan", 18);
p[1] = new Person("lisi", 20);
p[2] = new Person("wangwu", 22);
for (int i = 0; i < p.length; i++) {
System.out.printf(p[i].getName() + " " + p[i].getAge());
System.out.println();
}
}}
文章讨论了Java中静态变量的概念,通过示例解释了静态变量如何在不同对象间共享,并指出在Person类和构造器中的使用误区。同时,提供了代码改错示例,强调了对象初始化、方法调用的正确方式以及静态与非静态方法的区别。
751

被折叠的 条评论
为什么被折叠?



