当前位置:首页 > 第3章-面向对象(上)-补充案例
第3章-面向对象(上)-补充案例
法。 2)在类中创建一个该类的实例对象,并且定义一个静态变量INSTANCE(变量名随意)引用此实例对象。 3)为了防止外界使用Singleton.INSTANCE的方式直接访问该实例对象,将INSTANCE变量使用private关键字修饰为私有,同时提供一个用于返回实例对象的静态方法。
二、案例实现
1、定义Singleton类,在类中定义一个私有,无参的构造方法,代码如下:
public class Singleton { }
private Singleton() {}
2、创建Singleton的一个实例对象,定义一个私有的静态变量INSTANCE引用这个对象,代码如下所示:
public class Singleton { }
private Singleton() {}
private static Singleton INSTANCE = new Singleton();
3、定义一个静态方法getInstance()将实例对象返回,代码如下:
public class Singleton { }
private Singleton() { }
private static Singleton INSTANCE = new Singleton(); public static Singleton getInstance() { }
return INSTANCE;
4、定义Example12类,在类的main()方法中调用两次getInstance()方法,获得两个Singleton的实例对象,使用“==”比较这两个对象是否相等,代码如下所示:
public class Example12 { }
public static void main(String[] args) { }
Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1 == s2);
运行结果如图3-19所示。
图3-19 运行结果
从运行结果可以看到,两个对象使用“==”比较的结果为 true,说明两次获得的是同一个Singleton的实例对象。
21 / 25
第3章-面向对象(上)-补充案例
三、案例总结
1、为了更加深刻的理解单例设计模式,下面对单例设计模式的特点进行归纳: ? 类中定义一个无参的构造方法,并且声明为私有
? 在类的内部创建该类的一个实例对象,使用私有的静态变量引用该实例对象 ? 定义静态方法返回该实例对象
2、本案例中这种代码格式的单例设计模式被形象的称为饿汉式单例设计模式,这是因为在程序中,无论是否需要该类的实例对象,在类加载时都会创建一个实例对象。
案例3-12 静态内部类成员的定义和访问 一、案例描述
1、 考核知识点
编号:
名称:静态内部类
2、 练习目标
? 理解在静态内部类中可以定义静态成员和非静态成员 ? 掌握访问静态内部类中静态成员和非静态成员的方式
3、 需求分析
静态内部类中可以定义静态成员和非静态成员,这两者的访问方式有所不同。为了让初学者掌握静态内部类中成员的访问方式,本案例将设计一个静态内部类,并编写测试类演示如何访问静态内部类中的静态成员和非静态成员。
4、 设计思路(实现原理)
1)定义外部类Outer,在Outer类中定义一个静态内部类Inner。
2)在Inner中定义两个String类型变量,一个静态变量staticField,其值为“静态内部类的静态变量”,一个非静态变量nonStaticField,其值为“静态内部类的非静态变量”。定义两个方法,一个静态方法staticMethod()打印“静态内部类的静态方法”,一个非静态方法nonStaticMethod()打印“静态内部类的非静态方法”。
3)编写Example13类,在类的main()方法中调用Inner类中的变量和方法。
二、案例实现
1、定义外部类Outer和静态内部类Inner,代码如下所示:
class Outer {
static class Inner {
static String staticField = \静态内部类的静态变量\String nonStaticField = \静态内部类的非静态变量\
static void staticMethd() {
System.out.println(\静态内部类的静态方法\
22 / 25
第3章-面向对象(上)-补充案例
}
}
}
void nonStaticMethod() { }
System.out.println(\静态内部类的非静态方法\
2、定义Example13类,在类的main()方法中,通过“外部类.内部类.静态成员”的方式访问静态变量staticField和静态方法staticMethod(),代码如下所示:
public class Example13{ }
public static void main(String[] args) { }
System.out.println(Outer.Inner.staticField); Outer.Inner.staticMethd();
运行结果如图3-20所示。
图3-20 运行结果
3、对类Example13进行修改,在main()方法中创建静态内部类Inner的实例对象,使用Outer.Inner类型的变量inner引用,通过变量inner访问非静态变量nonStaticField和非静态方法nonStaticMethod(),代码如下所示:
public class Example13 { }
public static void main(String[] args) { }
Outer.Inner inner = new Outer.Inner(); System.out.println(inner.nonStaticField); inner.nonStaticMethod();
运行结果如图3-21所示。
图3-21 运行结果
三、案例总结
静态内部类中可以定义静态成员和非静态成员,如果要访问非静态成员,必须通过静态内部类的对象或者对象的引用变量。如果要访问静态成员,则可以直接通过“外部类.静态内部类.静态成员”的方式,不需要创建静态内部类的实例对象。
23 / 25
第3章-面向对象(上)-补充案例
案例3-13 方法内部类访问局部变量 一、案例描述
1、 考核知识点
编号:
名称:方法内部类
2、 练习目标
? 掌握方法内部类中访问的局部变量需要使用final关键字修饰
3、 需求分析
在方法内部类中可以访问外部类的成员变量,同样,在方法内部类中也可以访问其所在方法中定义的局部变量,但是局部变量必须使用final关键字来修饰。为了方便初学者学习方法内部类,本案例将编写一个方法内部类,演示如何在方法内部类中访问局部变量。
4、 设计思路(实现原理)
1)编写Example14类,在类中定义一个test()方法,test()方法中定义一个int类型的局部变量num,其值为5。
2)在test()方法中定义一个方法内部类Inner,在Inner类中定义一个show()方法,方法中访问局部变量num。在test()方法中创建内部类Inner的实例对象,调用其show()方法。
3)在Example14的main()方法中,创建Example14的实例对象,使用变量e引用该对象,通过变量e调用test()方法。
二、案例实现
1、定义Example14类,代码如下所示:
public class Example14{ }
void test() { }
public static void main(String[] args) { }
Example14 e = new Example14(); e.test(); int num = 5; class Inner { }
Inner inner = new Inner(); inner.show();
void show() { };
System.out.println(\局部变量num的值为\
运行结果如图3-22所示:
24 / 25
共分享92篇相关文档