Java基础知识大纲(一):
1、Java环境搭建:
在开发之前,必定离不开环境的搭建。而Java的运行、开发环境就需要JDK的支持了。当然如果只是单纯的运行Java程序,那么只需要JRE接口;因此,JDK与JRE之间是包含关系。
一般地,会配置Java的环境变量简化Java的运行命令。而对于Windows这样界面交互的系统,直接通过IDE集成工具来引入JDK。
2、基本语法:
2.1、关键字、保留字
各个语言的关键字和保留字都很类似,作用也是如此。不过对于Java中的native、transient、volatle这三个关键字说明下。 | |
native | 用于修饰方法,表明该方法不是Java实现和提供的,主要是通过调用C、C++语言实现的类库 |
transient | 翻译:暂时。这个关键字用于修饰类成员变量,被修饰的变量在序列化时,就不会被序列化。 |
volatile | 翻译:易挥发的。这个关键用于修饰类成员变量,是Java的一个轻量级锁,被修饰的变量具有三个特性:1、保证可见性;2、防止指令重排;3、不可以保证原子性。 |
2.2、数据类型:
Java中一共有八大基本数据类型和引用类型 | |||
八大基本数据类型 | 整型 | byte | 字节,常用于数据IO读写单位。很多数据都会转换为字节进行存储和传输 |
short | 整型,范围比byte大。这个类型很少使用 | ||
int | 整型,范围比short大。是最常用的整型类型,而且Java整型数值字面量的默认类型。对于一些比较长的数值,可以使用_来进行区分。 例如:1_000_000_000 | ||
long | 最大范围的整型类型,对于大于int范围的字面量,一定要在整型字面量的尾部加L或l来表示该数值是long类型。 | ||
浮点型 | float | 单精度浮点数类型,范围比double小。如果给其赋值,那么需要给浮点数字面量的尾部加F或f来表示 | |
double | 双精度浮点类型,同时也是Java浮点数字面量的默认类型。可以显式给字面量的浮点数的尾部加D、d来表示 | ||
字符型 | char | 字符类型,两个字节大小。因此,可以存储一个中文 | |
布尔型 | boolean | 布尔值,true或false。表示真和假两种取值。 | |
引用类型 | 对象类型 | 所有对象引用类型 | 引用类型,就是通过new创建的类型,这个类型基本都是自定义的或者是Java本身类库现有的。 |
对于八大基本数据类型,还有其相应的包装类型。一个目的是为了满足泛型的要求,另一个目的是为了能够像操作对象那样来操作数值。例如:调用方法。任何类型都是隐式的将范围小的数值赋给范围大;反过来,则需要显式转换为低范围类型。因为,这是考虑到数据精度丢失的问题。
基本数据类型的拷贝是值的拷贝,而引用类型则是引用地址的拷贝。其实本质上也是值的拷贝,只是这个值是指向实际对象的地址值。
2.3、运算符:
算术运算符 | +、-、*、/、++、-- |
赋值运算符 | =、+=、*=、 /=、-= |
比较运算符 | ==、!=、、>=、<= |
位运算符 | &、|、!、^、<>、>>> |
逻辑运算符 | &&、|| |
三目运算符 | ? : |
2.4、流程控制:
在任何语言中,流程控制主要有三种:顺序、条件和循环。
顺序 | 自上而下顺序执行 |
条件 | 条件匹配,执行相应的分支。if、else、switch |
循环 | 满足循环条件,不断重复执行循环体内的代码。 while、do-while、for |
3、异常处理机制:
异常可以分为两类,Exception和Error,都继承Throwable类,表示可以抛出的异常。 其中Exception是最常碰到(属于程序运行错误),而Error多数是与JVM有关的错误。 其中RuntimeException表示运行时错误,是不受检异常,不用显式处理异常。但是如果是受检异常,则需要异常处理。 | |
try | 修饰可能出现异常的代码块,这个最好缩小作用代码块的范围。 |
catch | 用于捕获异常,可以有多过个(声明捕获的不同异常) |
finally | 异常处理之后的收尾处理,异常处理完都会执行 |
throw | 抛出异常 |
throws | 作用与方法,表示该方法可能会抛出异常 |
4、数组与集合:
数组和集合是最常用的,其中集合又可以分为List、Set、Map三大类。其中数组有Arrays工具类(提供了数组拷贝的功能)、Collection有Collections工具类(提供了集合不可编辑、同步化、元素打乱的功能)。
数组 | 数组固定长度,存储同类元素。能够随机访问,但无法物理删除,只能逻辑删除。 | |
List | ArrayList | 底层使用数组作为存储结构,支持随机访问,但是对于扩容、删除、指定下标插入就比较不好 |
LinkedList | 底层使用链表的形式进行存储数据,也就是对插入、删除都很好的支持,并且无需扩容,内存有多大就有多大。但是对于查找就是O(N)复杂度 | |
CopyOnWriteArrayList | 只是一个线程安全的集合,其思想就是利用副本来隔离线程之间可能导致不安全的操作。也就是对某些值修改操作,都会建立一个副本进行,而此时,读操作还是在原本的集合进行。提高读写事务的吞吐。 | |
Set | HashSet | 底层就是基于相对应的Map实现的 |
LinkedHashSet | ||
TreeSet | ||
Map | HashMap | 底层基于数组+红黑树实现的,有链化和树化机制。查询性能最好 |
LinkedHashMap | 在HashMap的基础上,扩展一个功能。那就是遍历时保持与插入顺序一致。而这需要一个链表进行维护,所以会比HashMap稍差 | |
TreeMap | 底层基于数组 + 红黑树。其实这个和HashMap相差不大,只是TreeMap在解决Hash冲突时,直接就使用红黑树。其实这有点大材小用。毕竟红黑树在维护都会有开销,尤其对于数据量小的话,其实根本没必要使用红黑树,所以才会有HashMap的链化。 阈值小于8就以链表形式存储 | |
ConcurrentHashMap | 这是一个线程安全的HashMap,在JDK1.8时采用了分段加锁作用于Hash表的对应的桶,细化锁的粒度,提高并发度。 |
5、常用API:
任何语言都会有自带的一些工具类以及对字符串的操作API。
常用工具类 | API |
String | length() |
charAt() | |
subString() | |
splite() | |
replace() | |
Math | max() |
min() | |
abs() | |
round() | |
Collections | shuffle |
sort | |
reverse | |
unmodifiableCollection | |
synchronizedCollection | |
Arrays | arraycopy |
binarySearch | |
copyOf |