面向对象_02

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象_02相关的知识,希望对你有一定的参考价值。

单例模式概念:设计一个类时,保证在整个程序运行期间针对该类只存在一个实例对象。

设计模式:对问题行之有效的解决方式。【一种思想】
1, 单例设计模式
解决问题:就是可以保证一个类在内存中的对象唯一性。
比如:对于多个程序使用同一个配置信息对象时候,就需要保证该对象的唯一性。
如何保证对象的唯一性?
1,不允许其他程序用new创建该类对象
2,在该类创建一个本类实例
3,对外提供一个方法让他程序可以获取该对象。
步骤:
1,私有化该类构造函数
2,通过new在本类中创建一个本类对象
3,定义一个公有的方法,将创建的对象返回
实例代码:

 1 //单例设计模式
 2 package new_Object;
 3 class Single{
 4     //通过new在本类中创建一个本类对象
 5     private static Single INSTANCE=new Single();
 6     private  Single (){}//私有化构造方法
 7     public static Single getInstance(){ //提供返回该对象的静态方法
 8         return INSTANCE;
 9     }
10 }
11 public class Example_18 {
12     public static void main(String[] args) {
13         Single s1=Single.getInstance();
14         Single s2=Single.getInstance();
15         System.out.println(s1==s2);
16     }
17 }

技术分享图片

单例模式测试:

 1 //单例模式测试s
 2 package new_Object;
 3 class Test{
 4         private int num;
 5         //通过new在本类中创建一个本类对象
 6         private static Test INSTANCE=new Test();
 7         private Test(){};//私有化该类构造函数
 8         public static Test getInstance(){    //提供返回该对象的静态方法
 9             return INSTANCE;
10         }
11         //获取值
12         public int getNum(){
13             return num;
14         }
15         public void setNum(int num){
16             this.num=num;
17         }
18     }
19 public class SingleTest{
20     public static void main(String[] args) {
21 //        Test t1=new Test();
22 //        Test t2=new Test();
23         Test t1=Test.getInstance();
24         Test t2=Test.getInstance();
25         t1.setNum(15);
26         t2.setNum(20);
27         System.out.println(t1.getNum());
28         System.out.println(t2.getNum());
29     }
30 }
31 /**单例三步走:
32    1,通过new在本类中创建一个本类对象
33           private static 本类名 变量名=new 本类名();
34    2,私有化该类构造函数
35        private 本类名(){};
36    3,提供返回该对象的静态方法
37         public static 本类名 方法名(){    
38             return 变量名;
39         }
40       主函数调用:
41     类名 变量名= 类名.方法名
42  * 
43  */

技术分享图片

 

内部类:类的内部定义类,这个内部类所在的类称外部类。
分类:成员内部类、静态内部类、方法内部类
成员内部类中可以访问外部类的所有成员
内部类代码示例:

 1 package new_Object;
 2  class Outer_01{
 3          private int num=3;//定义成员变量
 4         //定义成员方法,方法中访问成员内部类
 5         public void test(){
 6             Inner inner=new Inner();
 7             inner.show();
 8         }
 9         //定义成员内部类
10 class Inner{
11         void show(){
12             //内部类访问外部变量
13             System.out.println("num="+num);
14         }
15     }
16 }
17 public class Inner_class {//内部类
18     public static void main(String[] args) {
19         Outer_01 outer=new Outer_01();//创建外部类对象
20         outer.test();//调用test方法
21     }
22 }

技术分享图片

外部类访问内部类:通过外部类对象创建内部类对象
  格式:外部类访问内部类,则外部类名.内部类名 变量名=new 外部类名().new 内部类名();
代码示例:

 1 package new_Object;
 2  class Outer_01{
 3          private int num=3;//定义成员变量
 4         //定义成员方法,方法中访问成员内部类
 5         public void test(){
 6             Inner inner=new Inner();
 7             inner.show();
 8         }
 9         //定义成员内部类
10 class Inner{
11         void show(){
12             //内部类访问外部变量
13             System.out.println("num="+num);
14         }
15     }
16 }
17 public class Inner_class {//内部类
18     public static void main(String[] args) {
19 
20     
21     //外部类访问内部类,则外部类名.内部类名 变量名=new 外部类名().new 内部类名();
22         Outer_01.Inner inner=new Outer_01().new Inner();
23         inner.show();
24     }
25 }

run:==>3
注:报错:内部类被私有,则外界不可访问内部 即class Inner改成private class Inner

静态内部类:使用static关键字来修饰一个成员内部类,可以不创建外部类名对象的情况下被实例化。
  格式:外部类名.内部类名 变量名=new 外部类名.内部类名();
代码示例:

 1 //静态内部类
 2 package new_Object;
 3 class Outer_02{
 4         private static int num=4;
 5         //定义静态内部类 Inner
 6         static class Inner{
 7             void show(){
 8                 System.out.println("num="+num);
 9             }
10         }
11     }
12 public class Static_class {
13     public static void main(String[] args) {
14     //格式:外部类名.内部类名 变量名-new 外部类名.内部类名();
15         Outer_02.Inner inner=new Outer_02.Inner();//创建内部类对象
16         inner.show();//调用内部类方法
17     }
18 }

run:==>4
注:  1,静态内部类中只能访问外部类的静态成员,private static int num=4;去掉static则报错
    2,报错:静态内部可定义静态成员,非静态类中不可定义静态成员

1 class Outer{
2         class Inner{
3             static int num=3;
4             void show(){
5             System.out.println("num="+num);
6         }
7     }
8 }

 
方法内部类:成员方法中定义的类,只能在当前方法中被调用。方法内部类也可以访问外部类的成员变量

 1 //方法内部类
 2 package new_Object;
 3 class Outer_03{
 4     private int num=5;//定义成员变量
 5     //定义test方法
 6     public void test(){
 7         //方法中定义内部类
 8         class Inner{
 9             void show(){
10                 System.out.println("num="+num);//访问外部成员变量
11             }
12         }
13         Inner in=new Inner();//创建内部对象
14         in.show();//调用内部方法
15     }
16 }
17 public class Fun_class {
18     public static void main(String[] args) {
19         Outer_03 outer=new Outer_03();//创建外部对象
20         outer.test();//调用test方法
21     }
22 }

run==>5

Java帮助文档:Java语言支持的第三种注释方式==>以/**开头, */结尾.
java提供javadoc命令,将帮助信息提取出来,自动生成html格式的帮助文档,实现程序的文档化。
@author:用于类的说明,表示程序的作者
@version:用于类的说明,表示程序开发的版本号
@param:用于对方法的说明,表示方法定的参数以及参数对应的说明
@return:用于对方法的说明,表示方法的返回值代表的意义
DOS:javadoc -d . -version -author -Person.java
  -d=>指定目录
  .=> 当前目录
  -version=>版本信息
  -author=>作者信息
执行javadoc后会出现一系列的文件,其中index.html文件就是整个帮助文档的首页,双击打开即可看到帮助信息。
一般javadoc出现在当前目录下生成的文档会比较杂乱,通过可以创建文件夹即可,去掉点 . 改成文件夹名help:
格式:javadoc -d 文件夹名 -version -author -类名.java
 ==>javadoc -d help -version -author -Person.java












































以上是关于面向对象_02的主要内容,如果未能解决你的问题,请参考以下文章

python之路之前没搞明白4面向对象(封装)

面向对象02 继承

032_面向对象_05_程序执行过程的内存分析_02

029_面向对象_02_面向对象的方式思考问题

Python面向对象编程02:深度认识类class

Python面向对象编程02:深度认识类class