Java基础知识大纲(一):

1、Java环境搭建:

在开发之前,必定离不开环境的搭建。而Java的运行、开发环境就需要JDK的支持了。当然如果只是单纯的运行Java程序,那么只需要JRE接口;因此,JDK与JRE之间是包含关系。 一般地,会配置Java的环境变量简化Java的运行命令。而对于Windows这样界面交互的系统,直接通过IDE集成工具来引入JDK。

2、基本语法:

2.1、关键字、保留字

各个语言的关键字和保留字都很类似,作用也是如此。不过对于Java中的native、transient、volatle这三个关键字说明下。

Java中map输出的顺序是怎么决定的 java的map如何取值_java map取值

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、异常处理机制:

Java中map输出的顺序是怎么决定的 java的map如何取值_java map取值_02

异常可以分为两类,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