面向对象特性
抽象:将外部所有干扰事务剔除,只遗留当前所需事物,组合成一个函数或者对象提供外部使用;
组合:主要就是将抽象出来的函数或者对象组合成一个有意义的事务;
继承:一个新类或者对象可以由原有的类或者对象派生出来;
注释:继承主要有两种类型,抽象类、接口,分别继承(extends)、实现(implement);
- 抽象类对于类而言只能继承一次,主要目的是将不同类中相同部分逻辑交由抽象类实现,子类主要实现自身特有部分逻辑(主要目的就是减少代码的编写量);
- 接口对于类而言可以实现多个,同类型的子类实现的方法名一致,内部逻辑不一样(主要目的形成一种规范);
区别:
- abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
- 在abstract class 中可以自己的数据成员,也可以非abstarct的成员方法,而在interface中,只能够静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
- abstract class和interface所反映出的设计理念不同。其实abstract class表示的是”is-a”关系,interface表示的是”like-a”关系。
- 实现抽象类和接口的类必须实现其中的所方法。抽象类中可以非抽象方法。接口中则不能不实现方法。
- 接口中定义的变量默认是public static final型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
- 抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
- 接口中的方法默认都是public,abstract 类型的。
多态:由继承延展出来,继承过程中旧类的一些方法可以被新类给重载(ovreload)和覆盖(ovreread),以提供不同场景下使用;
注释:重载同个函数名由不同参数或者返回值进行区别;覆盖同个函数内容被子类所重写用于自定义处理逻辑;
- 重载,指方法名一样,参数不一致,以此进行对不同请求进行响应;
- 重写,指方法名一样,参数一样,其内容处理逻辑不一样,主要在继承或实现接口中使用;
Java基础:
- Java基础数据类型:byte、int、long、float、double、char、short、boolean
- Java引用数据类型:Byte、Integer、Long、Float、Double、Char、Short、Boolean
注:引用类型与基础类型主要区别是在初始化时,部分数据类型为0,而引用类型为null,且引用类型都添加了final修饰,既是不可继承;
集合类
Collection是集合类的上级接口,继承与他的接口主要Set和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作;经常在线程中产生一个线程安全的对象用于存储数据
Collection
├List
│├LinkedList: 使用双向链表实现存储,序号索引数据需要进行前向或者后向遍历,但插入数据只需在前后项插入,插入速度很快;
│├ArrayList : 使用数组方式存储数据,允许直接通过序号索引元素,插入需要数组元素移动,索引数据快;
│└Vector : 同ArrayList,但使用synchronized修改方法,是为线程安全;
│ └Stack
└Set 同map,但不允许null值;
Map
├Hashtable :同HashMap,但不允许null键或者null值,且线程安全
├HashMap :允许null键或者null值,且非线程安全;
├WeakHashMap:
└ConcurrentHashMap:同Hashtable很像,不允许为null的key或value,但它不是通过方法加synchronized方法进程并发控制的,而是使用分段锁技术segment,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问,能够实现真正的并发访问,效率也比Hashtable好的多;
TreeMap、HashMap、LinkedHashMap区别
java.util.Map[I]
+–java.util.SortedMap[I]
+—–java.util.TreeMap[C]
+–java.util.Hashtable[C]
+–java.util.HashMap[C]
+–java.util.LinkedHashMap[C]
+–java.util.WeakHashMap[C]
- HashMap和Hashtable主要区别在线程安全方面和存储null值方面;
- LinkedHashMap保存了数据的插入顺序,底层是通过一个双链表的数据结构来维持这个插入顺序的,key和value都可以为null;
- TreeMap实现了SortMap接口,他保存的记录是根据键值key排序,默认是按key升序排序,也可以指定排序的Comparator。
HashMap、LinkedHashMap和TreeMap都是线程不安全的;
String、StringBuffer、StringBuild:
- String字符串操作类型,对象不可变(其构造函数为final类型,不可继承);
- StringBuffer字符串操作类,对象可变常用于字符串对象构造,且线程安全;
- StringBuild同StringBuffer一样,其不是线程安全;
static 和 final
- final定义的变量可以看做一个常量,不能被改变;
- final定义的方法不能被覆盖;
- final定义的类不能被继承。
- final static 就是再加上static的特性就可以了
- static 和final是没有直接关系的
- static 是在内存中分配一块区域,供整个类通用,所有的类的对象都享有它的共同的值
java反射机制
- 对于任意一个类,都能够知道这个类的所有属性和方法;
- 对于任意一个对象,都能够调用它的任意一个方法;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制;
POJO(Plain Ordinary Java Object)
- 简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。
- 使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。