黑马程序员--面向对象2(Java)

来源:互联网 发布:java软件设计模式 编辑:程序博客网 时间:2024/05/17 04:26

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

五、this关键字

1.特点:
            this代表其所在函数所属对象的引用。简单说,哪个对象调用了this所在的函数,this就代表哪个对象。

2.this应用:
                  1)、当在函数内需要用到调用该函数的对象时,就用this。(用于区别同名变量的情况,局部变量和成员变量)。
                  2)、this还可以用于构造函数间的调用。调用格式:this(实际参数);

3.注意:
            用this调用构造函数,必须定义在构造函数的第一行。因为构造函数是用于初始化的,所以初始化动作一定要先执行。否则编译失败。


六、static关键字

1.应用:
           1)、用于修饰成员(成员变量和成员函数)。
           2)、当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。格式:类名.静态成员。

2.特点:
           1)、随着类的加载而加载。
           2)、优先于对象存在。
           3)、被所有对象所共享。
           4)、可以直接被类名调用。

3.实例变量(成员变量)和类变量(静态成员变量)的区别:
                                                                                                       1)、存放位置。类变量随着类的加载而存在于方法区中;实例变量随着对象的建立而存在于堆内存中。
2)、生命周期。类变量生命周期最长,随着类的消失而消失;实例变量生命周期随着对象的消失而消失。

4.静态使用注意事项:
                                   1)、静态方法只能访问静态成员。
                                   2)、静态方法中不可以定义this,super关键字。因为静态优先于对象存在。所以静态方法中不可以出现this。

5.静态有利有弊:
                            利处:对对象共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。可以直接被类名调用。
                            弊端:生命周期过长。访问出现局限性。(静态虽好,只能访问静态)。

6.什么时候使用静态(从两方面下手: 因为静态修饰的内容有成员变量和函数):
                                  1)、什么时候定义静态变量呢?
                                         当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。
                                  2)、什么时候定义静态函数呢?
                                         当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。

7.静态代码块:
              1)、格式:
                       static
                       {
                            静态代码块中的执行语句;
                       }
              2)、特点:随着类加载而执行,只执行一次。并且优先于主函数。用于给类进行初始化。


8.静态代码块、构造代码块、构造函数同时存在时的执行顺序:
                                                                                                             静态代码块,构造代码块,构造函数。

9.生成Java帮助文档:
                        1)、命令格式:javadoc –d 文件夹名 –auther –version *.java
                        2)、格式:
                        /**
                        *类描述
                        *@author 作者名
                        *@version 版本号
                        */
                        /**
                        *方法描述
                        *@param  参数描述
                        *@return  返回值描述
                        */
七、对象的初始化过程:定义一个新对象都做了哪些事情?

                    1、把类名.class文件加载到内存中。
                     2、执行该类中的static代码块,如果有得话,给该类进行初始化。
                     3、在堆内存中开辟空间,分配内存地址。
                     4、在堆内存中建立对象的特有属性。并进行默认初始化。
                     5、对属性进行显示初始化。
                     6、对对象进行构造代码块初始化。
                     7、对对象进行对应构造函数初始化。
                     8、将内存地址赋给栈内存中的对象名变量。


八、单例设计模式

1.设计模式:解决问题最行之有效的思想。java中有23种设计模式。

2.单例设计模式:
                   1)、定义:解决一个类在内存中只存在一个对象。
                   2)、如何保证对象唯一性呢?
                    思想:
                        1,不让其他程序创建该类对象。
                        2,在本类中创建一个本类对象。
                        3,对外提供方法,让其他程序获取这个对象。


                    步骤:
                        1,因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类对象。
                        2,就在类中创建一个本类的对象。
                        3,定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。


                    代码体现:
                            1,私有化构造函数。
                            2,创建私有并静态的本类对象。
                            3,定义公有并静态的方法,返回该对象。


                    饿汉式:(先初始化对象)
                           class Single{
                            private Single(){} //私有化构造函数。
                                    private static Single s = new Single(); //创建私有并静态的本类对象。
                            public static Single getInstance(){ //定义公有并静态的方法,返回该对象。
                          return s;
                                      }
                              }
                    懒汉式:延迟加载方式。(对象是方法被调用时才初始化)
                           class Single2{
                            private Single2(){}
                                    private static Single2 s = null;
                            public static Single2 getInstance(){
                          if(s==null)
                      s = new Single2();
                          return s;
                              }
                              }
                    注意:建立单例,建议使用饿汉式。


 

 

0 0
原创粉丝点击