Java笔记

  • 面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。

  • 运算符的优先级排列,数字越小的表示优先级越高。

运算符优先级

  • “==”操作符用于比较两个对象的内存地址值是否相等,equals()方法用于比较两个对象的内容是否一致。

  • 在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期。

  • 子类在继承父类时,会继承父类中的全部的属性与方法,super关键字不仅可以调用父类中的构造方法,也可以调用父类中的属性或方法,还可以调用声明为private的属性或方法。

  • 子类重写父类中的方法时,被子类重写的方法不能拥有比父类中更严格的访问权限。

  • 关键字this和super的比较

关键字this和super的比较

  • final:final标记的类不能被继承,final标记的方法不能被子类重写,final标记的变量(成员变量或局部变量)即为常量,只能被赋值一次。

集合

Collection接口

Collection接口是构造类集框架的基础。

核心方法:

方法 描述
boolean add(Object obj) 将obj加入到调用类集中。如果obj被加入到类集中,则返回true;如果obj已经是类集中的一个成员或类集不能被复制时,则返回false。
boolean addAll(Collection c) 将c中的所有元素都加入到调用类集中,如果操作成功(元素被加入了),则返回true;否则返回false。
void clear() 从调用类集中删除所有元素。
boolean contains(Object obj) 如果obj是调用类集的一个元素,则返回true;否则返回false。
boolean containsAll(Collection c) 如果调用类集包含了c中的所有元素,则返回true;否则返回false。
boolean equals(Object obj) 如果调用类集与obj相等,则返回true;否则返回false。
int hashCode() 返回调用类集的散列码。
boolean isEmpty() 如果调用类集是空的,则返回true;否则返回false。
Iterator iterator() 返回调用类集的迭代程序。
boolean ramove(Object obj) 从调用类集中删除obj的一个实例。如果这个元素被删除了,则返回true;否则返回false。
boolean removeAll(Collection c) 从调用类集中删除c的所有元素。如果类集被改变了(也就是元素被删除了),则返回true;否则返回false。
boolean retainAll(Collection c) 删除调用类集中除了包含c中的元素之外的全部元素。如果类集被改变了(也就是元素被删除了),则返回true;否则返回false。
int size() 返回调用类集中元素的个数
Object[] toArray() 返回一个数组,该数组包含了所有存储在调用类集中的元素。数组元素是类集元素的拷贝。
Object[] toArray(Object array[]) 返回一个数组,该数组仅仅包含了那些类型与数组元素类型匹配的类集元素。数组元素是类集元素的拷贝。如果array的大小比匹配元素的个数大,在数组中,类集元素之后的单元被置为null。如果任一类集元素的类型都不是array的子类型,则引发一个ArrayStoreException异常。

List接口

List接口扩展了Collection并声明存储一系列元素的类集的特性。使用一个基于零的下标,元素可以通过它们在列表中的位置被插入和访问。一个列表可以包含重复元素。

由List定义的方法:

方法 描述
void add(int index, Object obj) 将obj插入调用列表,插入位置的下标由index传递。
Boolean addAll(int index, Collection c) 将c中所有的元素插入到调用列表中,插入点的下标由index传递。如果调用列表改变了,则返回true;否则返回false。
Object get(int index) 返回存储在调用类集内指定下标处的对象。
int indexOf(Object obj) 返回调用列表中obj的第一个实例的下标。如果obj不是列表中的元素,则返回-1。
int lastIndexOf(Object obj) 返回调用列表中obj的最后一个实例的下标。如果obj不是列表中的元素,则返回-1。
ListIterator listIterator() 返回调用列表开始的迭代程序。
ListIterator listIterator(int index) 返回调用列表在指定下标处开始的迭代程序。
Object remove(int index) 删除调用列表中index位置的元素并返回删除的元素。删除后,被删除元素后面的元素的下标减一。
Object set(int index, Object obj) 用obj对调用列表内由index指定的位置进行赋值。
List subList(int start, int end) 返回一个列表,该列表包括了调用列表中从start到end-1的元素。返回列表中元素也被调用对象引用。
ArrayList类:
* 构造方法

ArrayList():创建一个空的数组列表。

ArrayList(Collection c):创建一个数组列表,该数组列表由类c中的元素初始化。

ArrayList(int capacity):创建一个数组列表,该数组列表有指定的初始容量(capacity)。
LinkedList类
* 构造方法

LinkedList():创建一个空的链接列表。

LinkedList(Collection c):创建一个链接列表,该链接列表由类c中的元素初始化。

* 其他方法

void addFirst(Object obj):在链表头增加元素,obj是被增加项。

void addLast(Object obj):在链表尾部增加元素,obj是被增加项。

Object getFirst():获得第一个元素。

Object getLast():获得最后一个元素。

Object removeFirst():删除第一个元素。

Object removeLast():删除最后一个元素。

SortedSet接口

SortedSet接口扩展了Set并说明了按升序排列的集合的特性。

由SortedSet定义的方法:

方法 描述
Comparator comparator() 返回调用被排序集合的比较函数,如果对该集合使用自然顺序,则返回null。
Object first() 返回调用被排序集合的第一个元素。
SortedSet headSet(Object end) 返回一个包含那些小于end的元素的SortedSet,那些元素包含在调用被排序集合中。
Object last() 返回调用排序集合的最后一个元素。
SortedSet subSet(Object start, Object end) 返回一个SortedSet,它包含了从start到end-1的元素。返回类集中的元素也被调用对象所引用。
SortedSet tailSet(Object start) 返回一个SortedSet,它包含了那些包含在分类集合中的大于等于start的元素。返回集合中的元素也被调用对象所引用。
HashSet类

HashSet扩展AbstractSet并且实现Set接口。它创建一个类集,该类集使用散列表进行存储。而散列表通过使用称之为散列法的机制来存储信息。

在散列(hashing)中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hash code)。而散列码被用来当做与关键字相连的数据的存储下标。关键字到散列码的转换时自动执行的————看不到散列码本身。程序代码也不能直接索引散列码。

* 构造方法:

HashSet():创建一个默认的散列集合。

HashSet(Collection c):创建一个散列集合,用c中的元素初始化散列集合。

HashSet(int capacity):创建一个散列集合,用capacity初始化散列集合的容量。

HashSet(int capacity, float fillRatio):用capacity和fillRatio初始化散列集合的容量和填充比(也称为加载容量)。

填充比必须介于0.0与1.0之间,它决定在散列集合向上调整大小之前,有多少能被充满。具体的说,就是当元素的个数大于散列集合容量乘以它的填充比时,散列集合被扩大。对于没有获得填充比的构造方法,默认使用0.75。

TreeSet类

TreeSet为使用树来进行存储的Set接口提供了一个工具,对象按升序存储。访问和检索是很快的。在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。

* 构造方法:

TreeSet():创建一个空的树集合,该树集合将根据其元素的自然顺序按升序排序。

TreeSet(Collection c):创建一个包含了c的元素的树集合。

TreeSet(Comparator comp):创建一个空的树集合,它按照由comp指定的比较方法进行排序。

TreeSet(SortedSet ss):创建一个包含了ss的元素的树集合。

Iterator 迭代器

方法 描述
boolean hasNext() 如果存在下一个元素,则返回true;否则返回false。
Object next() 返回下一个元素。如果没有下一个元素,则引发NoSuchElementException异常。
void remove() 删除当前元素,如果试图在调用next()方法之后或调用previous()方法之前,调用remove()方法,则引发IllegalStateException异常。
ListIterator
方法 描述
boolean hasNext() 如果存在下一个元素,则返回true;否则返回false。
Object next() 返回下一个元素。如果没有下一个元素,则引发NoSuchElementException异常。
void remove() 删除当前元素,如果试图在调用next()方法之后或调用previous()方法之前,调用remove()方法,则引发IllegalStateException异常。
boolean hasPrevious() 如果存在前一个元素,则返回true;否则返回false。
Object previous() 返回前一个元素,如果前一个元素不存在,则引发一个NoSucnElementException异常。
int nextIndex() 返回下一个元素的下标,如果不存在一下元素,则返回列表的大小。
int previousIndex() 返回前一个元素的下标,如果前一个元素不存在,则返回-1。
void set(Object obj) 将obj赋给当前元素。这是上一次调用next()方法或previous()方法最后返回的元素。
void add(Object obj) 将obj插入列表中的一个元素之前,该元素在下一次调用next()方法时,被返回。

映射接口

Map接口

Map接口映射唯一关键字到值。关键字(key)是以后用于检索的对象。给定一个关键字和一个值,可以存储这个值到一个Map对象中。当这个值被存储之后,就可以使用它的关键字来检索它。

方法 描述
void clear() 从调用映射中删除所有的“关键字/值”对
boolean containsKey(Object k) 如果调用映射中包含了作为关键字的k,则返回true;否则返回false。
boolean containsValue(Object v) 如果调用映射中包含了作为值的v,则返回true;否则返回false。
Set entrySet() 返回包含了映射中的项的集合(Set)。该集合包含了类型Map.Entry的对象。这个方法为调用映射提供了一个集合“视图”。
boolean equals(Object obj) 如果obj是一个Map并包含了相同的输入,则返回true;否则返回false。
Object get(Object k) 返回与关键字相关联的值。
int hashCode() 返回调用映射的散列码。
boolean isEmpty() 如果调用映射是空的,则返回true;否则返回false。
Set keySet() 返回一个包含调用映射中关键字的集合(Set)。这个方法为调用映射的关键字提供了一个集合“视图”。
Object put(Object k, Object v) 将一个输入加入调用映射,覆盖原先与该关键字相关联的值。关键字和值分别为k和v。如果关键字已经不存在了,则返回null;否则,返回原先与关键字相关联的值。
void putAll(Map m) 将所有来自m的输入加入调用映射。
Object remove(Object k) 删除关键字等于k的输入。
int size() 返回映射中“关键字/值”对的个数。
Collection values() 返回一个包含了映射中的值的类集。这个方法为映射中的值提供了一个类集“视图”,映射循环使用两个基本操作:get()和put()。使用put()方法可以将一个指定了关键字和其它对应的值加入映射。为了得到值,可以通过将关键字作为参数来调用get()方法,调用返回该值。

SortedMap接口

SortedMap接口扩展了Map,它确保了各项按关键字升序排序。

方法 描述
Comparator comparator() 返回调用排序映射的比较方法。如果调用映射使用的是自然顺序的话,则返回null。
Object firstKey() 返回调用映射的第一个关键字。
SortedMap headMap(Object end) 返回一个排序映射,该映射包含了那些关键字小于end的映射输入。
Object lastKey() 返回调用映射的最后一个关键字。
SortedMap subMap(Object start, Object end) 返回一个映射,该映射包含了那些关键字大于等于start同时小于end的输入。
SortedMap tailMap(Object start) 返回一个映射,该映射包含了那些关键字大于等于start的输入。

映射类

AbstractMap类

AbstractMap对于HashMap、TreeMap、WeakHashMap来说是一个超类,它实现了大多数的Map接口。

HashMap类

HashMap类扩展了AbstractMap类并使用散列表实现Map接口。这允许一些基本操作,如:get()和put()的运行时间保持恒定,即便对大型集合,也是这样的。

* 构造方法

HashMap():创建一个默认的散列映射。

HashMap(Map m):创建一个散列映射,用m的元素初始化散列映射。

HashMap(int capacity):创建一个散列映射,并将散列映射的容量初始化为capacity。

HashMap(int capacity, float fillRatio):用capacity和fillRatio初始化散列映射的容量和填充比。

容量和填充比的概念同HashSet()

TreeMap类

TreeMap类通过使用树实现Map接口。TreeMap提供了按排序顺序存储“关键字/值”对的有效手段,同时允许快速检索。应该注意的是,不像散列映射,树映射保证它的元素按照关键字升序排列。

* 构造方法

TreeMap():创建一个空的树映射,该映射使用其关键字的自然顺序来排序。

TreeMap(Comparator comp):创建一个空的树映射,该映射通过使用comp来排序。

TreeMap(Map m):创建一个空的树映射,用从m的输入初始化树映射,该映射使用关键字的自然顺序来排序。

TreeMap(SortedMap sm):创建一个空的树映射,用从sm的输入来初始化一个树映射,该映射将按与sm相同的顺序来排序。

TreeMap实现SortedMap并且扩展了AbstractMap,而它本身并没有另外定义其他方法。

Vector类

Vector实现动态数组。Vector继承自AbstractList,这与ArrayList相似,但两者不同的是:Vector是同步的,Vector被重新设计来扩展AbstractList和实现List接口,因此现在它与类集是完全兼容的。

* 构造方法

Vector():创建一个原始大小为10的默认矢量。

Vector(int size):创建一个其原始容量由size指定的矢量。

Vector(int size,int incr):创建一个原始容量由size指定,增量由incr指定的矢量。增量指定了矢量每次允许向上改变大小的元素的个数。

Vector(Collection c):创建一个包含了类集c中元素的矢量。

* 其他方法
方法 描述
final void addElement(Object element) 将由element指定的对象加入矢量。
int capacity() 返回矢量的容量。
Object clone() 返回调用矢量的一个拷贝。
boolean contains(Object element) 如果element被包含在矢量中,则返回true;否则返回false。
void copyInto(Object array[]) 将包含在调用矢量中的元素复制到由array指定的数组中。
Object elementAt(int index) 返回由index指定位置的元素。
Enumeration elements() 返回矢量中元素的一个枚举。
Object firstElement() 返回矢量的第一个元素。
int indexOf(Object element) 返回element首次出现的位置下标。如果对象不在矢量中,则返回-1。
int indexOf(Object element, int start) 返回element在矢量中在start及其之后第一次出现的位置下标。如果该对象不属于矢量的第一部分,则返回-1。
void insertElementAt(Object element, int index) 在矢量中,在由index指定的位置处加入element。
boolean isEmpty() 如果矢量是空的,则返回true;否则返回false。
Object lastElement() 返回矢量的最后一个元素。
int lastIndexOf(Object element) 返回element在矢量中最后一次出现的位置下标。如果对象不包含在矢量中,则返回-1。
int lastIndexOf(Object element, int start) 返回element在矢量中,在start之前最后一次出现的位置下标。如果该对象不属于矢量的这一部分,则返回-1。
void removeAllElements() 清空矢量,在这个方法执行以后,矢量的大小为0。
boolean removeElement(Object element) 从矢量中删除element。如果有多个指定的矢量实例,则其中第一个实例被删除。如果成功删除,则范湖true;否则返回false。
void removeElementAt(int index) 删除由index指定位置处的元素。
void setElementAt(Object element, int index) 将由index指定的位置分配给element。
void setSize(int size) 将矢量中元素的个数设为size。如果新的长度小于旧的长度,元素将丢失;如果新的长度大于旧的长度,则在其后增加null元素。
int size() 返回矢量中当前元素的个数。
String toString() 返回矢量的字符串等价形式。
void trimToSize() 将矢量的容量设为与其当前拥有的长度元素的个数相等。
Stack

Stack是Vector的一个子类,它实现标准的后进先出堆栈。Stack仅仅定义了创建空堆栈的默认构造方法。Stack包括了由Vector定义的所有方法,同时增加了几种它自己定义的方法。

方法 描述
boolean empty() 如果堆栈是空的,则返回true;否则返回false。
Object peek() 返回位于栈顶的元素,但是并不在堆栈中删除它。
Object pop() 返回位于栈顶的元素,并在进程中删除它。
Object push(Object element) 将element压入堆栈,同时也返回element。
int Search(Object element) 在堆栈中搜索element,如果发现了,则返回它相对于栈顶的偏移量;否则返回-1。

Dictionary

字典(Dictionary)是一个表示“关键字/值”存储库的抽象类。已被Map取代。

Hashtable

散列表(Hashtable)继承了Dictionary,并且实现了Map接口。它与HashMap相似,但它是同步的。和HashMap一样,Hastable将“关键字/值”对存储到散列表中。使用Hashtable时,指定一个对象作为关键字,同时指定与该关键字相关联的值。接着该值被散列,而把得到的散列值作为存储在表中的值的下标。

* 构造方法

Hashtable():默认的构造方法,创建一个散列表。

Hashtable(int size):创建一个散列表,该散列表具有由size指定的原始大小。

Hashtable(int size,float fillRatio):创建一个散列表,并且具有由size指定的原始大小和由fillRatio指定的填充比。

Hashtable(Map m):创建一个散列表,该散列表用m中的元素初始化。散列表的容量被设为m中元素的个数的两倍。

* 其他方法
方法 描述
void clean() 复位并清空散列表。
Object clone() 返回调用对象的复制。
boolean contains(Object value) 如果一些值与存在于散列表中的value相等的话,则返回true;否则返回false。
boolean containsKey(Object key) 如果一些关键字与存在与散列表中的key相等的话,则返回true;否则返回 false。
boolean containsValue(Object value) 如果一些值与散列表中存在的value相等的话,则返回true;否则返回false。
Enumeration elements() 返回包含在散列表中的值的枚举。
Object get(Object key) 返回包含与key相关联的值的对象。如果key不在散列表中,则返回一个空对象。
boolean isEmpty() 判断散列表是否为空,为空则返回true;否则返回false。
Enumeration keys() 返回包含在散列表中的关键字的枚举。
Object put(Object key, Object value) 将关键字和值插入散列表中。如果key已经不在散列表中,则返回null。如果key存在与散列表中,则返回与key相连的前一个值。
void rehash() 增大散列表的大小并且对其关键字进行再散列。
Object remove(Object key) 删除key及其对应的值。返回与key相关联的值。如果key不在散列表中,则返回一个空对象。
int size() 返回散列表中的项数。
String toString() 返回散列表的等价字符串形式。
Properties

属性(Properties)是Hashtable的一个子类。它用来保持值的列表,在其中关键字和值都是字符串。

方法 描述
String getProperty(String key) 返回与key相关联的值。如果key既不在列表中,也不在默认属性列表中,则返回一个null对象。
String getPreperty(String key, String defaultProperty) 返回与key相关联的值。如果key既不在列表中,也不在默认属性列表中,则返回defaultProperty。
void list(PrintStream streamOut) 将属性列表发送给与streamOut相链接的输出流。
void list(PrintWriter streamOut) 将属性列表发送给与streamOut相链接的输出就。
void load(InputStream streanIn) 从与streamIn相链接的输入数据流输入一个属性列表。
Object setProperty(String key, String value) 将value与key关联。返回与key关联的前一个值。如果不存在这样的关联,则返回null。
void store(OutputStream streamOut, String description) 在写入由description指定的字符串之后,属性列表被写入与streamOut相链接的输出流。

Socket通讯

Socket是网络上运行的两个程序双向通讯的一端,它既可以接收请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递。

在Java中Socket可以理解为客户端或者服务器端的一个特殊对象,这个对象有两个关键方法,一个是getInputStream()方法,另一个是getOutputStream()方法。getInputStream()方法可以得到一个输入流,客户端的Socket对象上的getInputStream()方法得到的输入流其实就是从服务器端发回的数据流。getOutputStream()方法得到一个输出流,客户端Socket对象上的getOutputStream()方法返回的输出流就是将要发送到服务器端的数据流(其实是一个缓冲区,暂时存储将要发送的数据)。

Socket有两种主要的操作方式:

  • 面向连接

面向连接的操作使用TCP协议。这个模式下的socket必须在发送数据之前与目的地的socket取得一个连接。一旦连接建立了,sockets就可以使用一个流接口 打开-读-写-关闭。所有的发送的信息都会在另一端以同样的顺序就收。面向连接的操作比无连接的操作效率更低,但是数据的安全性更高。

可以用Socket类、ServerSocket类实现。
  • 无连接

无连接操作使用UDP协议。一个数据报是一个独立的单元,它包含了所有的投递信息。可以把它想象成一个信封,它有目的地址和要发送的内容。这个模式下的Socket不需要连接一个目的地的Socket,它只是简单地投出数据报。无连接的操作是快速和高效的,但是数据安全性不佳。

可以用DatagramPacket类、DatagramSocket类实现。