当前位置:首页 > 第3章-面向对象(上)-补充案例
第3章-面向对象(上)-补充案例
当多个对象存储的数据相同时,可以使用静态变量的方式存储。例如,有一个Student类具有name、className属性,请根据该类创建出三个Student对象,并将这些对象的className值都设置为“三年级二班”。
4、 设计思路(实现原理)
1) 定义Student类,并在类中定义name和className属性。
2) 编写测试类Example08,在main()方法中创建三个学生对象,并分别为这些对象的name和
className属性赋值,然后输出这些对象的name和className值。 3) 对Student类进行修改,将className定义为静态变量。
4) 修改测试类,在main()方法中使用Student.className = “三年级二班”语句为静态变量
className进行赋值,然后输出这些对象的name和className值。
为了更好地理解Student类中静态变量className和Student实例对象的关系,下面通过一个图例进行演示,如图3-11所示:
Student{className三年级二班Student实例对象{names1names2names3
图3-11 静态变量与实例对象的关系
二、案例实现
1、定义Student类,代码如下所示:
class Student{ }
String name; String className;
2、定义Example08类,代码如下所示:
public class Example08 {
public static void main(String[] args) {
Student s3 = new Student(); s3.name = \王五\
s3.className = \三年级二班\Student s1 = new Student(); s1.name = \张三\
s1.className = \三年级二班\
Student s2 = new Student(); s2.name = \李四\
s2.className = \三年级二班\
13 / 25
第3章-面向对象(上)-补充案例
System.out.println(\我的名字是\来自\
}
}
System.out.println(\我的名字是\来自\System.out.println(\我的名字是\来自\
运行结果如图3-12所示。
图3-12 运行结果
3、对Student类进行修改,代码如下所示:
class Student { }
String name;
static String className;
4、对Example08类进行修改,代码如下所示:
public class Example08 { }
}
System.out.println(\我的名字是\来自\System.out.println(\我的名字是\来自\System.out.println(\我的名字是\来自\public static void main(String[] args) {
Student.className = \三年级二班\Student s1 = new Student(); s1.name = \张三\
Student s2 = new Student(); s2.name = \李四\
Student s3 = new Student(); s3.name = \王五\
运行结果如图3-13所示。
图3-13 运行结果
14 / 25
第3章-面向对象(上)-补充案例
三、案例总结
1、本案例中,三个Student对象的className属性值均为“三年级二班”,对于这样的相同数据,没有必要在每个对象中都开辟一块空间存储,完全可以在内存中只用一块空间存储,并被一个类的所有实例对象所共享。在Java中提供了一个static关键字,使用static关键字修饰的成员变量称为静态变量,静态变量能被该类所有实例对象共享。
2、静态变量可以使用“类名.静态方法名”的方式访问,也可以通过“对象引用变量.静态方法名”的方式访问,例如本例中的静态变量className,通过Student.className或者s2.className这两种方式访问都是可以的,不过更推荐使用前一种方式。
3、思考一下:定义一个Person类,在类中定义两个String类型的成员变量name和nationality(国籍),变量nationality使用static关键字修饰为静态变量,其值为“中国”。
定义Example09类,在类的main()方法中创建Person类的两个实例对象,并打印出这两个对象的姓名和国籍。 (1)定义Person类,代码如下所示:
class Person { }
String name;
static String nationality = \中国\
(2)定义Example09类,代码如下所示:
public class Example09{ }
public static void main(String[] args) { }
Person lily = new Person(); lily.name = \丽丽\
Person lucy = new Person(); lucy.name = \露西\
System.out.println(lily.name + \的国籍是\System.out.println(lucy.name + \的国籍是\
运行结果如图3-14所示。
图3-14 运行结果
案例3-9 静态方法中访问类的成员 一、案例描述
1、 考核知识点
15 / 25
第3章-面向对象(上)-补充案例
编号:
名称:静态方法
2、 练习目标
? 了解在静态方法中只能访问类的静态成员,而不能访问非静态成员。
3、 需求分析
在程序中经常会调用方法,但静态方法之间、静态方法和非静态方法之间,它们是否能够互相调用呢?请编写一个测试类,在类中定义若干个静态方法和非静态方法,通过方法之间的相互调用,演示静态方法和非静态方法的调用情况。
4、 设计思路(实现原理)
1)编写Example10类,在类中定义两个静态方法staticMethod1()、staticMethod2(),两个非静态方法nonStaticMethod1()、nonStaticMethod2()
2)在Example10类中,针对定义的四个方法进行互相调用,观察调用情况。
二、案例实现
1、定义Example10类,在类中定义上述的四个方法和一个main()方法,代码如下所示:
public class Example10{ }
static void staticMethod1() { }
static void staticMethod2() { }
void nonStaticMethod1() { }
void nonStaticMethod2() { }
public static void main(String[] args) { }
System.out.println(\非静态方法2\System.out.println(\非静态方法1\System.out.println(\静态方法2\System.out.println(\静态方法1\
2、对静态方法staticMethod1()进行修改,在方法中访问静态方法staticMethod2()。在main()方法中调用静态方法staticMethod1(),代码如下所示:
public class Example10{ static void staticMethod1() {
}
static void staticMethod2() { }
void nonStaticMethod1() {
System.out.println(\非静态方法1\System.out.println(\静态方法2\System.out.println(\静态方法1\staticMethod2();
16 / 25
共分享92篇相关文档