您的位置:首页 > 职场人生

黑马程序员——学习日志5面向对象(static关键字,单例设计模式,抽象类,接口)

2014-06-18 12:51 495 查看
------- android培训java培训、期待与您交流! ---------- 

1、static关键字

      用于修饰成员(成员变量和成员函数),被这个关键字修饰的成员都和类加载有关。JVM运行时不会将所有类加载到内存,因为无法确定程序中要使用哪些。类在第一次使用时加载,只加载一次。

      特点:随着累的加载而加载,优先于对象存在,被所有对象共享,可以直接被类名调用。

      注意:静态方法只能访问静态成员,静态方法不可以写this,super关键字,主函数是静态的。

2、主函数的定义:

public :代表着该函数的访问权限是最大的。static 代表着主函数随着类的加载就已经存在了。void 主函数没有具体的返回值。main 不是关键字,但是是一个特舒的单词,可以被jvm识别。(String[] args):函数的参数,参数类型是一个数组,该数组中的元素是字符串,字符串的类型是数组,主函数的格式是固定的:jvm识别。jvm在调用主函数时,传入的是new String[0]。

3、什么时候使用静态

从两方面下手,以为静态修饰的内容有成员变量和函数。什么时候定义静态变量呢?当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。什么时候定义静态函数?当功能内部没有访问到非静态数据(对象的特有数据)那么该功能可以定义成静态的。静态的应用:每个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。经方法都静态后,可以方便使用,但是该类还是可以被其他程序建立对象的,为了更为严谨,强制让该类不能建立对象。可以通过将构造函数私有化完成。

4、帮助文档的制作

@author<作者姓名>

@version<版本信息>

@param<参数名称><参数说明>

@return<返回值说明>

注:凡是public修饰的功能都用文档注释来描述,因为都可以被文档注释工具所提取。只有public和protect修饰的类才可被提取生成文档。类中默认的构造函数的权限和所属类一致。且默认构造函数的权限是随着类的变化而变化的。

5、静态代码块

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

6、对象的初始化过程

person p=new person("zhangsan ",20)该句作了什么事情:1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。2.执行该类中的static代码块,如果有的话,给Person.class类进行初始化。3.在对内存中开辟空间,分配内存地址。4.在哦堆内存中建立对象的特有属性,并进行默认初始化。5.对属性进行显示初始化。6.对对象进行构造代码块初始化。7.对对象进行对应的构造函数初始化。8.将内存得知赋给栈内存中的 p 变量。

7、设计模式

      在编程过程中我们经常会遇到一些典型的问题或需要完成某种特定需求,而这些问题和需求前人也曾经遇到过,他们经过大量理论总结和实践验证之后优选出的代码结构、编程风格、以及解决问题的思考方式,这就是设计模式(Design pattern)。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免得我们自己再去思考和摸索。

      设计模式是解决某一类问题最行之有效的方法。java中有23种设计模式。

8、单例设计模式

      单例设计模式就是要保证在整个程序中某个类只能存在一个对象,这个类不能在创建第二个对象。

9、单例设计模式的写法

      私有化构造函数,阻止创建新对象。

由于需要返回一个对象,那么我们就需要在类内部自己创建一个对象,并使用成员变量记住它。

由于该类不能创建对象,所以这个成员变量不能是普通的成员变量,需要静态,这样在类加载之后就可以创建一个唯一的对象了。

我们不希望其他类修改这个成员变量,所以将其私有。

提供一个公有的方法用来获取唯一的一个对象。

这个方法由于需要在不创建对象的情况下使用,所以需要静态。

用法:对于事物该怎么描述,还怎么描述。当需要将该事物的对象保证在内存中唯一时,就将以上的步骤加上即可。

10、两种写法

      饿汉式:对象先加载。一般开发用这个

class Single {

    private Single(){}

    private
static
Single s =
new
Single();

    public
static
Single getInstance(){

       return s;

    }

 

}

懒汉式:对象的延时加载。

class Single{

    private
static
Single s = null;

    private Single(){}

    public
static
Single getInstance(){

       if(s==null){

           synchronized(Single.class){

              if(s==null)

                  s= new Single();

           }

       }

          

       return s;

    }

}

11、继承

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。子类可以直接访问父类中的非私有的属性和行为。通过 extends 关键字让类与类之间产生继承关系。继承提高了代码的复用性,让类与类之间长生了关系,提供了多态的前提。

java只支持单继承,不支持多继承。但可以多重继承。因为多继承容易出现问题。两个父类中有相同的方法。子类到底要执行哪一个是不确定的。所以java不支持多继承,但将这种机制换了另一个种安全的方式来体现,多实现。多次继承出现的继承体系中,通常看父类中的功能,了解该体系的基本功能,建立子类对象即可使用该体系功能。

super用法和this类似,this是谁调用该方法就引用谁,super是调用该方法的对象的父类对象。

12、函数覆盖

子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复父类中的私有方法不可以被覆盖。在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。

覆盖注意事项:覆盖时,子类方法权限一定要大于等于父类方法权限。静态只能覆盖静态
4000


覆盖的应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

13、子类的实例化过程

子类中所有的构造函数默认都会访问父类中空参数的构造函数因为每一个构造函数的第一行都有一条默认的语句super();子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的。当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数。

在子类中第一行用this关键字去调其他的构造方法,这时系统将不再自动调父类的。但其他构造函数中会调用父类构造函数。在构造方法中this和super关键字只能出现一次,而且必须是第一个语句。以后在设计类的时候,最好定义一个无参的构造方法,不然子类实例化的时候就容易出错。

14、final关键字

final可以修饰类,方法,变量。final修饰的类不可以被继承。final修饰的方法不可以被覆盖。final修饰的变量是一个常量。只能被赋值一次。内部类只能访问被final修饰的局部变量。

15、抽象类

使用abstract关键字修饰的类就是抽象类,抽象类不能new对象,原因在于抽象类含有抽象方法,不能被调用。没有方法体的方法为抽象方法,使用abstract关键字修饰。有抽象方法的类必须声明为抽象类,抽象类不一定含有抽象方法。

16、模板设计模式

在解决一些问题或者设计一个软件的时候,需要先定义一个模板,就相当于一种事先定义好的协议。以后要做这系列的事情都按照这个模板来做。这样就实现统一化管理。

    在定义功能时,功能的一部分是确定的,但有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。

17、接口

初期理解: 可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。

接口中定义的方法默认是公有的抽象的,被public abstract修饰;接口中定义的变量默认为全局常量,使用public static final修饰

用法:我们可以定义一个类来实现接口,使用implements关键字;实现一个接口需要实现接口中所有的方法,抽象类除外;通常使用匿名内部类来实现一个接口;接口可以继承接口,使用extends关键字。 接口不能继承抽象类,因为抽象类中可能有不抽象的方法;一个类可以实现多个接口,为了实现多态

接口与抽象类区别:抽象类中可以有不抽象的方法,接口中全是抽象的方法;抽象类用extends继承,接口用implements实现;抽象类中的变量和方法没有默认修饰符,接口中的变量默认为public static final的,接口中的方法默认为public abstract;一个类只能继承一个抽象类,一个类可以实现多个接口

如果能用接口,就不用抽象类,因为别人实现接口可以不占用继承的位置。

如果定义一个抽象的父类,其中所有方法都是抽象的,那么就定义为接口。

如果定义一个抽象的父类的时候,需要有不抽象的方法,那么只能定义为抽象类。

 

 

 

 

------- android培训java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  黑马程序员
相关文章推荐