Java知识点总结
一、 Java基础
1、Java简介
Java是Sun公司1995年推出的Java面向对象程序设计语言和Java平台的总称。
Java分为三个体系:JavaSE(标准版)、JavaEE(企业版)、JavaME(微型版)
2、基本数据类型
(1)、整数型
byte:8位带符号二进制
short:16位带符号二进制
int:32位带符号二进制
long:64位带符号二进制
(2)、浮点数类型
float:32位带符号二进制,后缀F或f,8位指数,23位有效尾数
double:64位带符号二进制,后缀D或d,11位指数,52位有效尾数
(3)、字符类型
char:16位无符号二进制,使用Unicode码表示字符(可以为中文)
(4)、布尔类型
boolean:true或false
3、Java数组
Java数组实在内存中存储相同类型的连续的空间,声明一个数组就是在内存空间中划出一串联系的空间。
数组名代表的是连续空间的首地址,数组的下标从0开始。数组长度一旦声明,不可改变,不可追加。
测试如下图所示:
4、String类和StringBuffer类
(1)、String类
String类用于字符串操作,本质是char[]。
String对象的值是不可变的,当修改一个String对象的内容,JVM不会改变原来的对象,而是生成一个新的String对象。
使用String str = "ABCD"时,会先看常量池中是否已有值,如有则引用,没有则创建String对象。当使用String str = new String("ABCD")生成String对象时,无论常量池中是否有字符串的值都会构造新的String对象。
测试如下图所示:
(2)、StringBuffer类
与String类不同的是,StringBuffer类的对象能够被多次的修改,且不产生新的未使用的对象。StringBuffer的内部使用字符数组,当放入StringBuffer对象的字符长度超过初始化时设置的字符数组长度时,需要重新开辟长度增加两倍的字符数组,并把原来的字符数组内容复制到新字符数组中。所以设置合适的长度,对StringBuffer的性能影响很大。
测试如下图所示:
(3)、String和StringBuffer相互互换
5、接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
声明接口:
接口实现:当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。类使用implements关键字实现接口,例public class test implements TestInterface。
接口的继承:一个接口能继承另一个接口,与类继承不同的是,接口允许多继承。接口的继承使用extends关键字,子接口继承父接口的方法。
6、泛型
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
泛型类:
泛型接口:泛型接口与泛型类的定义及使用基本相同。
泛型方法:是在调用方法的时候指明泛型的具体类型。
7、常用的数据结构
Java中有几种常用的数据结构,主要分为Collection和Map两个主要接口。
(1)、几个常用类的区别
ArrayList:实现了可变大小的数组,元素允许为null,ArrayList是非同步。
Vector:Vector与ArrayList类似,但Vector是同步的。由Vector创建的Iterator正在被使用,另一个线程改变了Vector的状态(例如添加或删除了一些元素),这时调用Iterator的方法会抛出ConcurrentModificationException异常。
LinkedList:实现了List接口,元素允许为null。LinkedList提供额外的get、remove、insert方法在LinkedList的首部或尾部。这些方法使LinkedList可被用作堆栈(stack)、队列(queue)或双向队列。
注意:注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
HashTable:Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空的对象都可作为key或者value。添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。此外,HashTable是同步的。
HashMap:HashMap与HashTable类似,不同之处在于HashMap是非同步的,且允许null(null value和null key)。
(2)、Vertor、ArrayList和LinkedList
如果能用数组的时候(元素类型固定,数组长度固定),尽量使用数组来代替List;
如果没有频繁的删除插入操作,又不用考虑多线程问题,优先选择ArrayList;
如果在多线程条件下使用,可以考虑Vector;
如果需要频繁地删除插入,选择LinkedList;
大多数情况下,ArrayList的性能最好。