您的位置:首页 > 编程语言 > Java开发

Java面向对象知识点总结

2017-10-18 19:48 381 查看


java面向对象小知识点总结:
 
 

一.基础数据类型:

1.基本数据类型:

byte,short,char,int,long,float,double,boolean它们之间的比较,应用双等号(==),比较的是它们的值。
 

2.复合数据类型

当它们用(==)进行比较的时候,比较的是它们在JVM中的存放地址,所以,除非是同一个new出来的对象,它们比较后的结果返回的值是bool类型的。Java中所有的类都是继承于Object这个基类的,在Object基类中定义了一个equals方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法别覆盖掉了,如Sting,Integer,Date在这些类当中equuals有其自身的实现,而不需要再比较类在堆内存的存放地址了。
 

3.String的equal()

(1)String类中的equals()首先比较地址,如果是同一个对象的引用,可知对象相等,返回为true。
(2)若不是同一对象,equals方法挨个比较两个字符串对象内的的字符,只有完全相等的时候才返回true。
 

二. String   StringBuffer   StringBuilder  的区别

 

String 字符串常量(对象不可变,线程安全)
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
 
ps:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问,直到该线程读取完之后才可以用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得的数据是脏数据。
 
如果线程不是多线程,那么使用StringBuilder效率会高于StringBuffer
在大部分情况下StringBuilder>StringBuffer>String
 

三.java集成

1.extends关键字,子类扩展了父类,也具有父类的全部成员变量和方法,但是java的子类不能获得父类的构造器。
2.Java没有C++中的多继承特征,每一个类最多只有一个直接父类,也就是所谓的单继承。
3.当调用子类构造器来初始化子类对象是,父类构造器总会在子类构造器之前执行。
4.创建任何java对象,最先执行的总是java.lang.object类的构造器,从该类所在继承树最顶层的构造器开始执行,然后依次向下执行。
 

四.java多态

1.如果java引用变量的编译时类型和运行时的类型不一致的时候,就可能出现了多态。
2.运行时该引用变量的方法总是表现出子类方法的行为特征。
3.java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。
 

五.内部类的作用

1.内部类可以很好的实现隐藏,方便将存在一定逻辑关系的类组织在一起。一般的非内部类,是不允许有private和protected权限的,但内部类可以的。
2.内部类拥有外围类的所有元素的访问权限。
3.实现多重继承,每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个接口,对于内部类都没有影响。内部类使得多继承的解决方案变得完整。
4.可以避免修改接口而实现一个类中的两种同名方法的调用。
5.方便编写线程代码。
 

六.java集合

1.Collection Frameword(框架)
集合框架是一个统一的架构,用来表示和操作集合。
集合框架主要是由接口,抽象类和实现类构成。
接口:蓝色;实现类:红色
Collection
|_____Set(HashSet)
|         |_____SortedSet(TreeSet)
|_____List(LinkedList,ArrayList)
Collection:集合层次中的根接口,JDK没有提供这个接口的实现类。
Set:不能包含重复的元素,子接口SortedSet是一个按照自然升序排列的元素的Set。有个特例,HashSet实现类能支持数据重复。
List:可以包含重复的元素,是一个有序的集合,提供了按索引访问的方式,有次序,位置不改变。
2.集合框架中的实现类
a.   ArratList类:
本质:我们可以把它看做是能够自动增长容量的数组,实际是采用对象数组来实现的。自动增长容量就是当数组内存不够的时候再定义更大的数组,然后将数组元素拷贝的新的数组中。
 
B.  LinkedList
LinkedList是采用双向循环链表实现的。
利用LinkedList实现栈(stack),队列(queue),双向队列(double-ended
queue)
* LinkedList的常用方法:{
* void addFirst(Object o)
* void addLast(Object o)
* Object getFirst()
* Object getLast()
* Object remove(int index)
* isEmpty()
}
C.   HashSet
HashSet实现了Set接口的hash table(哈希表),依靠HashMap来实现.
应该为要存放的散列表的各个对象定义hashCode()和equals()方法
因为Set接口中不能有重复的元素。
D.   TreeSet
TreeSet是依靠TreeMap来实现的。
TreeSet是一个有序集合,TreeSet中元素将按照升序排列
缺少是按照自然排序进行排列,意味着TreeSet中元素要实现Comparable接口
我们可以在构造TreeSet对象时,传递实现了Comparator接口的比较器对象。
 
HashSet是基于Hash算法实现的,其性能通常优于TreeSet.
通常都应该使用HashSet,在需要排序的功能时,才使用TreeSet.
3.Map 
Map---(HashMap)
|_____SortedMap(TreeMap)
Map:存储的是key-value对(键值对),不能包含重复的key,可以有重复的value。子接口SortedMap是一个按升序排列key的Map。
 
Map接口实现类:
(一)HashMap:
对key进行散列.实现了所有hashmap操作,允许空值和空键.
map接口没有add()方法.
要放置元素通过put()方法.,放置相同的key值时会覆盖掉第一个value值
 
常用的方法.
Object put(Object key,Object value)
获取元素的时候
Object get(Object key)
通过键获取值
Hash表,通过键计算出相对应的存储位置的值,并输出.
Set entrySet()
返回一个键值对视图类型是Set.
返回的Set集合当中每一个对象都是一个Map.Entry对象.
Map.Entry是一个静态的接口.
接口中提供了常用方法
Object getKey()
Object getValue()
(二)TreeMap:
实现了sorted Map接口的类
TreeMap按照key进行排序.
类似HashMap用法
**********************
HashMap和TreeMap比较
和Set类似,HashMap的速度通常都比TreeMap快,
只有在需要排序的功能的时候,才使用TreeMap.
 

七.迭代器:Iterator接口

Collection提供了一个iterator()方法,可以返回一个迭代器,迭代器是指向两个元素之间的指针。凡是继承自Collection的接口或间接的实现类都有这个方法.
     (一)迭代器3个方法
       1.hasNext()
    2.next()
3.remove()
hasNext()判断是否有更多的元素,如果有返回true
next()返回的是下一个对象值
remove()方法remove()方法需要删除上一个返回的元素,需要先调用next()方法后在用remove(),返回的列表有时不一定真正实现remove()方法,根据需要决定是否实现.
(二)迭代器的使用场合
  迭代器能用于查找和删除。用while(。hasNext())判断是否有对象元素,如果有的话用。Next方法接收对象
    但是迭代器最主要的功能还是用来删除list里面某个对象的值,用到。Remove,使用其他方法删除list里面的值,都有可能会报错!

八.Collections工具类
Collections类不同于Collection类
      (一)Collections.sort(List list)
主要是对列表排序.
static void sort(List list)方法是按升序对指定列表排序.
自然排序法. 
这里List的泛型类要实现comparable接口的实现方法compareTo(Object o1).
 
 
(二)Collections.sort(List list,C c)
排序的时候可以传递一个比较器.
类C要实现Comparator接口.里面的实现方法intcompare(Object o1,Object o2)
 实现一个比较器.
比较器总是和一个特定的类相关.
 
 
 
以上只是一个java知识点简单的一个小总结,并不是很全面,内容也不是很深,以后会继续更新的,希望大佬多多指教。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: