笔记整理(java基础三-------面向对象--封装)

来源:互联网 发布:武汉大学图书馆数据库 编辑:程序博客网 时间:2024/05/16 13:43

1.1面向对象特点: 
1.2面向对象的特征 
1.3类与对象 
1.4成员变量与局部变量对比 
1.5 匿名对象 
2.0 封装 
2.1 构造函数(Constructor) 
2.2 构造函数与一般函数的区别 
2.3 相关问题答疑 
2.4 This用法 
2.5 Static关键字 
2.6 静态代码块儿 
2.7 主函数main剖析
2.8 单例设计模式

哦了,接下来慢慢分析吧,将这些知识点串联起来。

1.1面向对象特点: 
      面向对象就是一种常见的思想,符合人们的思考习惯;
      面向对象的出现,将复杂的问题简单化;
      面向对象的出现,让曾经的过程中的执行者,变成了对象中的指挥者。
      有对象调用对象,没对象创建对象,并且后期维护对象之间的关系

1.2面向对象的特征 
    封装    继承   多态
    这三大特征在这里就不详细介绍了,但是如果面试的时候,不能只说这三个,需要将每一个的特征都说一下。
1.3类与对象 
    类:用java语言对现实生活中事物的描述,通常只关注两方面,一个是属性,一个是行为,只要明确该事物的属性和行为并定义在类中即可。
    对象就是类这种事物实实在在存在的个体。
    定义类其实就是定义类中的成员。
     成员:成员变量-----属性, 成员函数------行为。
  1.4成员变量与局部变量对比 
      1成员变量定义在类中,整个类都可以访问,而局部变量定义在函数,语句,局部代码块中,只在所属的区域有效;

2成员变量存在与堆内存的对象中,局部变量存在与栈内存的方法中;
3成员变量随着对象的创建而存在随着对象的消失而消失,局部变量随着所属区域的执行而存在,随着所属区域的结束而释放;

   4成员变量都有默认的初始化值,局部变量没有默认的初始化值。 
  1.5 匿名对象 
       没有名字的对象,其实就是定义对象的简写格式。当对象对方法仅进一次调用的时候,尽可以简化匿名的对象,匿名对象可以作为实际参数
进行传递。


  2.0 封装 
      将一类事物的特征和行为定义在一起,可以通过这个定义创建对象,使用对象进行编程 ,封装时需要将对象的属性和一些实现细节隐藏,仅对
外提供必须的访问方式。使用private修饰。


2.1 构造函数(Constructor) 
    函数名和类名相同。没有返回值类型。注意:没有返回值类型不等同于void,void也是一种返回值类型。不能使用return关键字返回任何值。
用于给对象初始化。
如果一个类没有定义构造函数,系统会有一个默认的空参数的构造函数,如果定义了一个 指定的构造函数,默认的就不存在了。
     构造函数图解说明:
            构造函数.JPG 

  2.2 构造函数与一般函数的区别 
      对象创建时,就会调用与之对应的构造函数,给对象进行初始化,只调用一次。而一般函数在对象需要此功能时才调用,可以多次调用。在
描述事物时,事物已具备一些内容,这些都定义在构造函数中,可以有多个构造函数,用于给不同对象的初始化,以重装的形式体现的。



  2.3 相关问题答疑 
      构造函数没有返回值,为什么不用void?
没有返回值类型不等同于void,void也是一种返回值类型。当你不知道这个函数要返回什么时,可以用void代替。

      构造函数已经初始化了对象?为什么还要set方法?
因为对象在初始化的时候只能初始化一次,如果后天要修改某些属性,但是类中的属性有私有了不能直接的访问,这个时候我们可以通过set方法
间接的访问。


Private的作用?
用private修饰只能在一个类中访问,这个是一个权限的问题,不然不能访问,只有通过此类的共有方法,间接的访问类中的属性和private的方
法。类如何被私有了,这个类不为人知,别人不可能用它(不知道怎么使用它),但是内部可以被private修饰,此时类是一个成员。


一般函数不能直接调用构造函数?
构造函数给对象初始化的,如何一般函数调用构造函数,必须先有对象才行。(但是构造函数可以调用构造函数,因为都是给对象初始化的。)

  2.4 This用法 
       当成员变量和局部变量重名,可以用关键字this来区分。This代表对象,代表当前的对象,既所在函数所属的那个对象的引用,谁调用所在的函数,this就代表那个对象。
this也可以用于在构造函数中调用其他的构造函数。只能定义在构造函数的第一行,因为初始化动作要先执行。如果将this()定义在后面,第一次初始化之后,有调用构造函数,将前面的结果覆盖了。
     一个类中函数之间的相互调用,其实省略了this。

         this图解说明:
              this.JPG 
     构造函数之间this的使用图解:
            构造函数间调用.JPG 


  2.5 Static关键字 
         static 是一个修饰符,用于修饰成员,static修饰的成员被所有的对象所共享,优于对象的存在,它是随着类的加载而存在。可以被类名.静态的成员调用。修饰的数据是共享数据,而对象中存储的事物特有数据。
    静态变量相当于类变量,成员变量就是实体的变量
    
        成员变量(C)与静态变量(S)的区别
              生命周期不同。 S随着类的加载而存在,类的消失而灭亡。就是虚拟机的结束,而C随着对象的加载而存在,对象的消失而消亡。
   S可以被类名访问,也可以被对象访问,但C只能被对象访问。
   S存在方法区中,对象的共有数据,而C存储在堆中,对象的特有数据。

注意事项;
  S只能访问S(非静态可以访问静态和非静态),因为静态随着类的加载而加载,优先于对象。不可以使用this和super,因为静态随着类的加载而加载。不需要对象。

        

       静态什么时候用?
              静态变量
      当分析对象中所具备的成员变量的值都是相同时,这时这个成员就可以被静态修饰,只要数据在对象中不同的,
                    就是对象的特有数据,对象不需要做修改,只需使用即可,不需要存储在对象中,定义成静态。
  静态函数
      函数是否用静态修饰,就参考一点,就是该功能是否有访问到对象中的特有数据,简单说就是, 从源代码看,该功能是否访问非静态的
                   成员变量,如果需要,该功能就是非静态的,不需要 就可以将该功能定义成静态,当然,也可以定义成非静态,但是非静态需要被对象
                   调用,而仅仅创建对象调用非静态的,但是没有访问特有数据的方法,该对象的创建是没有意义的。
    如果一个方法不用访问非静态成员,那么就可以定义为静态的,这样使用者就不需要创建对象,直接用类名调用。静态方法通常是作为                           工具方法或者一个可以产生对象的方法被声明,目的是为了让调用者更方便的使用,不必创建对象。

       静态内存图解:
              静态内存图解.JPG 
  2.6 静态代码块儿 
       随着类的加载而执行,而且执行一次,给类进行初始化。
不是所有的对象都是通过构造函数初始化的,静态代码快也可以初始化。如下:
static {num=10,num*=3,……}
static  int  num=10;只能做一次动作。
类的代码块 {……},给所以的对象初始化,而构造函数是给对应的对象初始化,类的代码块(通用性),构造函数(针对性)
如果我们有一段代码想在别人使用某个类的时候就运行, 而且只运行一次, 那么就可以写在静态代码块中.

  2.7 主函数main剖析
        格式是固定的
被Jvm锁识别和调用。
Public  :权限必须是最大的
Static :不需要对象的,直接用主函数所属类名调用即可。
Void:  主函数没有具体的返回值。
Main:函数名,不是关键字,只是一个Jvm识别的固定格式。
String [] args:这是主函数的参数列表,是一个数组的形式。


2.8 单例设计模式
      设计模式
       在编程过程中我们经常会遇到一些典型的问题或需要完成某种特定需求,而这些问题和需求前人也曾经遇到过,他们经过大量理论总结和
              实践验证之后优选出的代码结构、编程风格、以及解决问题的思考方式,这就是设计模式(Design pattern)。设计模式就像是经典的棋
              谱,不同的棋局,我们用不同的棋谱,免得我们自己再去思考和摸索。
   单态设计模式
  单态设计模式(Singleton pattern)就是要保证在整个程序中某个类只能存在一个对象,这个类不能再创建第二个对象。
            解决了问题:就是可以保证一个类在内存中的对象唯一性。必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。
    如何保证对象的唯一性呢?
            1,  不允许其他程序用new创建该类对象。
            2,  在该类中创建一个本类实例。
            3,  对外提供一个方法让其他程序可以获取该对象。

    步骤:
             1,  私有化该类的构造函数,不让对象初始化。
              2,  通过new在本类中创建一个本类的对象。
              3,  定义一个公有的方法,将创建的对象返回。

        两种表现形式:
           饿汉式 示例代码:
           class Demo
            {
                  privatestatic Demo a = new Demo();
                  privateDemo(){}
                  publicstatic Demo getInstance()
                  {
                      returna;
                   }
            }

      延迟加载,又称懒汉式。
         class Single //类加载进来,没有对象,只有调用了getInstance()方法时,才回创建对象。
          {
                privatestatic Single s = null;
                privateSingle(){}
                publicstati Single getInstance()
                {
                   if(s==null)
                            s= new Single();
                   returns;
                 }
          }
0 0