> 文档中心 > JAVA基础 面上对象(3)

JAVA基础 面上对象(3)


文章目录

        前言

        十一、单例设计模式

        十二、静态部类成员的定义和访问

        十三、方法内部类访问局部变量

        总结


前言

这是JAVA基础面向对象的第三部分。第一二部分是JAVA基础面向对象(1)和JAVA基础面向对象(1)(2)。建议大家先看JAVA基础面向对象(1)(2),有助于更好的理解这次的知识内容哦。这也是面向对象上的最后一部分内容。


十一、单例设计模式

        案例描述

                练习目标

                        1. 了解什么是单例设计模式

                        2.掌握单例设计模式的特点

                需求分析

                        在程序开发中,经常需要保证类的实例对象只有一个,这时,可以将类设计为单例设计模式。为了让初学者熟悉单例设计模式,本案例将编写一个实现了单例设计模式的类。

                设计思路(实现原理)    

        1.定义一个类Singleton,为了保证该类只能创建一个实例对象,在类中定义一个私有的构造方法。

        2.在类中创建一个该类的实例对象,并且定义一个静态变量INSTANCE(变量名随意)引用此实例对象。

                     3.为了防止外界使用Singleton.INSTANCE的方式直接访问该实例对象,将INSTANCE变量使用private关键字修饰为私有,同时提供一个用于返回实例对象的静态方法。

                案例实现

                        Example12代码

package Mianxiangduixiangshang;public class Example12 {public static void main(String[] args) {Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();System.out.println(s1 == s2);}}

                      singleton代码

package Mianxiangduixiangshang;public class Singleton {private Singleton() {}private static Singleton INSTANCE = new Singleton();public static Singleton getInstance() {return INSTANCE;}}

        运行结果

                ​​​​​​​        

        案例总结

           1.为了更加深刻的理解单例设计模式,下面对单例设计模式的特点进行归纳:

                1.类中定义一个无参的构造方法,并且声明为私有

                2.在类的内部创建该类的一个实例对象,使用私有的静态变量引用该实例对象

                3. 定义静态方法返回该实例对象

        2.本案例中这种代码格式的单例设计模式被形象的称为饿汉式单例设计模式,这是因为在程序中,无论是否需要该类的实例对象,在类加载时都会创建一个实例对象。

 十二、静态内部类成员的定义和访问

  案例描述

                练习目标

                        1. 理解在静态内部类中可以定义静态成员和非静态成员

                        2.掌握访问静态内部类中静态成员和非静态成员的方式

                需求分析

                        静态内部类中可以定义静态成员和非静态成员,这两者的访问方式有所不同。为了让初学者掌握静态内部类中成员的访问方式,本案例将设计一个静态内部类,并编写测试类演示如何访问静态内部类中的静态成员和非静态成员。

                设计思路(实现原理)    

        1.定义外部类Outer,在Outer类中定义一个静态内部类Inner。

        2.在Inner中定义两个String类型变量,一个静态变量staticField,其值为“静态内部类的静态变量”,一个非静态变量nonStaticField,其值为“静态内部类的非静态变量”。定义两个方法,一个静态方法staticMethod()打印“静态内部类的静态方法”,一个非静态方法nonStaticMethod()打印“静态内部类的非静态方法”。

                3.编写Example13类,在类的main()方法中调用Inner类中的变量和方法。

                案例实现

                        定义外部类Outer和静态内部类Inner代码

package Mianxiangduixiangshang;public class Outer {static class Inner {static String staticField = "静态内部类的静态变量";String nonStaticField = "静态内部类的非静态变量";static void staticMethd() {System.out.println("静态内部类的静态方法");}void nonStaticMethod() {System.out.println("静态内部类的非静态方法");}}}

                Example13类代码

package Mianxiangduixiangshang;public class Example13 {public static void main(String[] args) {Outer.Inner inner = new Outer.Inner();System.out.println(inner.nonStaticField);inner.nonStaticMethod();}}

                运行结果

        ​​​​​​​        ​​​​​​​        

       案例总结

静态内部类中可以定义静态成员和非静态成员,如果要访问非静态成员,必须通过静态内部类的对象或者对象的引用变量。如果要访问静态成员,则可以直接通过“外部类.静态内部类.静态成员”的方式,不需要创建静态内部类的实例对象。

 十三、方法内部类访问局部变量

        案例描述

                练习目标

                        1. 掌握方法内部类中访问的局部变量需要使用final关键字修饰

                需求分析

                        在方法内部类中可以访问外部类的成员变量,同样,在方法内部类中也可以访问其所在方法中定义的局部变量,但是局部变量必须使用final关键字来修饰。为了方便初学者学习方法内部类,本案例将编写一个方法内部类,演示如何在方法内部类中访问局部变量。

                设计思路(实现原理)          

                        1.编写Example14类,在类中定义一个test()方法,test()方法中定义一个int类型的局部变量num,其值为5。

                        2.在test()方法中定义一个方法内部类Inner,在Inner类中定义一个show()方法,方法中访问局部变量num。在test()方法中创建内部类Inner的实例对象,调用其show()方法。

                        3.在Example14的main()方法中,创建Example14的实例对象,使用变量e引用该对象,通过变量e调用test()方法。

                案例实现

                        Example14类代码

package Mianxiangduixiangshang;public class Example14 {void test() {final int num = 5;class Inner {void show() {System.out.println("局部变量num的值为" + num);};}Inner inner = new Inner();inner.show();}public static void main(String[] args) {Example14 e = new Example14();e.test();}}

                运行结果

        ​​​​​​​        ​​​​​​​        

                

案例总结

                        方法内部中访问的局部变量必须使用final关键字修饰,否则程序在编译时会发生错误。

 

总结

               JAVA基础 面向对象(3)也整理完成。明天继续JAVA基础 面向对象(4) 面向对象下知识点内容。这部分属于是基础中的难点,建议点赞收藏哦。我也有些东西没记住,还要多多重复看笔记加深自己的印象。今天就总结到这里,希望能够对你有所帮助。