7

作者: 岩姐姐 | 来源:发表于2016-07-09 19:34 被阅读0次

    数组工具类-文档注释

    建立一个用于操作数组的工具类,其中包含着常见的对数组操作的函数如:最值,排序等

    @author 张三

    @version v1.0

    private ArrayTool 该类中的方法都是静态的,所以该类是不需要的创建对象.

    为了保证不让其他成创建该类对象,也可以将构造函数私有化.

    获取整型数组的最大值:

    @param arr 接收一个元素为int类型的数据

    @return 该数组的最大的元素值

    对数组进行选择排序

    @param arr 接收一个元素为int类型的数据

    获取指定的元素在指定数组中的索引

    @param arr 接收一个元素为int类型的数据

    @param key 要找的元素

    @return 返回该元素第一次出现的位置,如果不存在返回-1

    将int数组转换成字符串. 格式是: [e1, e2,...]

    @param arr 接收一个元素为int类型的数据

    单例设计模式

    设计模式:对问题行之有效的解决方式.其实它是一种思想

    1,单例设计模式

    解决的问题:就是可以保证一个类在内存中的对象唯一性

    必须对于多个程序使用同一个配置信息对象,就需要保证该对象的唯一性

    如何保证对象的唯一性呢?

    1,不允许其他程序用new创建该类对象

    2,在该类中创建一个本类实例

    3,对外提供一个方法让其他程序可以获取该对象

    步骤

    1,私有化该类构造函数

    2,通过new在本类中创建一个本类对象

    3,定义一个公有的方法,将创建的对象返回

    饿汉式

    类一加载,对象就已经存在了

    懒汉式:

    类加载进来,没有对象,只有调用了getInstance方法时才会创建对象.

    延迟加载形式

    子父类中的构造函数的特点

    在子类构造对象时,发现,访问子类构造函数时,父类也运行了.为什么呢?

    原因是在子类的构造函数中第一行有一个默认的隐式语句.  super()

    super()调用的就是父类中的空参数的构造函数

    子类的实例化过程:子类中所有的构造函数默认都会访问父类

    为什么子类实例化的时候要访问父类中的构造函数呢?

    那是因为子类继承了父类,获取到了父类中的内容(属性),所以使用父类内容

    之前,要先看父类是如何对自己的内容进行初始化的

    所以子类在构造对象时,必须访问父类中的构造函数

    为什么完成这个必须的动作,就在子类的构造函数中加入了super()语句

    如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super

    明确要调用父类中哪个构造函数

    注意:super语句必须要定义在子类构造函数的第一行.因为父类的初始化动作要先完成

    通过super初始化父类内容时,子类的成员变量并未显示初始化.等super()父类初始化完毕后

    才进行子类的成员变量显示初始化

    一个对象实例化过程:

    person p = new Person()

    1,JVM会读取指定的路径下的Person.class文件,并加载进内存,

    并会先加载Person的父类(如果有直接的父类的情况下)

    2,在堆内存中的开辟空间,分配地址

    3,并在对象空间中,对对象中的属性进行默认初始化

    4.调用对应的构造函数进行初始化

    5,在构造函数中,第一行会先到调用父类中 构造函数进行初始化

    6,父类初始化完毕后,在对子类的属性进行显示新湖石化

    7,在进行子类结构构造函数的特点初始化

    8,初始化完毕后,将地址值赋值给引用变量

    继承弊端:打破了封装性.

    final关键字:

    1,final是一个修饰符,可以修饰类,方法,变量

    2,final修饰的类不可以被继承

    3,final修饰的方法不可以被覆盖

    4,final修饰的变量是一个常量,只能赋值一次

    为什么要用final修饰变量.其实在程序如果一个数据是固定的,那么直接使用这个数据就可以了,

    但是这样阅读性差,所以给该数据起个名称.而且这个变量名称的值不能变化,所以加上final固定.

    写法规范:常量所有字母都大写,多个单词,中间用_连接

    抽象类:

    特点 :

    1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰

    抽象方法必须定义在抽象类中.该类必须也被abstract修饰

    2,抽象类不可以被实例化.为什么?因为调用抽象方法没意义

    3,抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则,这个子类还是抽象类

    1,抽象类中有构造函数吗?

    有,用于给子类对象进行初始化

    2,抽象类可以不定义抽象方法吗?

    可以的,但是很少见,目的就是不让该类创建对像.AWT的适配器对象就是这种类

    通常这个类中的方法有方法体,但是却没有内容

    3,抽象关键字不可以和那些关键字共存?

    private static final 不行

    4,抽象类和一般类的去别?

    相同点:

    抽象类和一般类都是用来描述事物的,都在内部定了成员

    不同:

    1,一般类中有足够的信息描述事物

    抽象类的信息有可能不足

    2,一般类中不能定义抽象方法,只能定义非抽象方法

    抽象类中可定义抽象方法,同时也可以定义抽象方法

    3,一般类可以被实例化

    抽象类不可以被实例化

    5,抽象类一定是个负类吗?

    是的.因为需要子类覆盖其方法后才可以对子类实例化

    接口

    格式:

    interface{ }

    接口中的成员修饰符都是固定的

    成员常量:public static final

    成员函数:public abstract

    发现接口中的成员都是public的

    接口的出现将"多继承"通过另一种形式体现出来,即"多实现"

    当一个抽象类中的方法都是抽象类的时候,这时可以将该抽象类用另一种形式定义和表示,

    就是 接口 interface

    定义接口使用的关键字不是class,是interface

    类与类之间是继承关系,类与接口之间是实现关系

    接口不可以实例化

    只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化.

    否则,这个子类就是一个抽象类

    在Java中不直接支持多继承,因为会出现调用的不确定性

    所以Java将多继承机制进行改良,在Java中变成了多实现

    一个类可以实现多个接口

    接口的出现避免了单继承的局限性

    接口的特点:

    接口是对外暴露的规则

    接口是程序的功能扩展

    接口的出现降低耦合性

    接口可以用来多实现

    类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口

    接口与接口之间可以有继承关系

    抽象类和接口的异同点:

    相同点:

    都是不断向上抽取而来的

    不同点:

    1,抽象类需要被继承,而且只能单继承

    接口需要被实现,而且可以多实现

    2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法

    接口中只能定义抽象方法,必须由子类去实现

    3,抽象类的继承,是is a关系,在定义该体系的基本共性内容

    接口的实现时like a关系,在定义体系额外功能

    相关文章

      网友评论

          本文标题:7

          本文链接:https://www.haomeiwen.com/subject/qgahjttx.html