Java笔记
面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。
运算符的优先级排列,数字越小的表示优先级越高。
“==”操作符用于比较两个对象的内存地址值是否相等,equals()方法用于比较两个对象的内容是否一致。
在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期。
子类在继承父类时,会继承父类中的全部的属性与方法,super关键字不仅可以调用父类中的构造方法,也可以调用父类中的属性或方法,还可以调用声明为private的属性或方法。
子类重写父类中的方法时,被子类重写的方法不能拥有比父类中更严格的访问权限。
关键字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类实现。