java基础核心总结归纳---参考手册
Posted weixin_40228600
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础核心总结归纳---参考手册相关的知识,希望对你有一定的参考价值。
Java 概述
Java 定义
Java 是快速、安全和可靠的编程语言。它主要分为三个版本:
JavaSE(J2SE)(Java2 Platform Standard Edition, java平台标准版)
JavaEE(J2EE)(Java 2 Platform,Enterprise Edition, java平台企业版)
JavaME(J2ME)(Java 2 Platform Micro Edition, java平台微型版)。
Java 的特点
1、Java 是⼀⻔⾯向对象的编程语⾔
⾯向对象(Object Oriented)是⼀种软件开发思想。它是把相关数据和⽅法组织为⼀个整体来看待。
还有一种编程语言是⾯向过程(Procedure Oriented),它是⼀种以过程为中⼼的编程思想。⽐如你早上起来上班,需要做几件事,穿衣服、刷牙、洗脸、过早,出门、到公司。这一系列的顺序动作就是面向过程的。
2、Java 具有平台独⽴性和可移植性
Java⼀次编写、到处运⾏。因为它的运行核⼼就是JVM,计算机应⽤程序和硬件之间依靠操作系统完成调度和协调,⼤致的体系结构如下:
Java应用、JVM的体系结构如下:
Java 是跨平台的,已编译的 Java 程序可以在任何带有 JVM 的平台上运⾏。你可以在 Windows 平台下编写代码,然后拿到 Linux 平台下运⾏。
3、Java 实现多线程
在⽤户空间中实现多线程
在内核空间中实现多线程
在⽤户和内核空间中混合实现多线程
4、Java 具有⾼性能
编写的代码经过javac编译器编译为字节码(bytecode),经过JVM内嵌的解释器将字节码转换为机器代码。
5、Java 语⾔具有健壮性
Java具有强类型机制、异常处理、垃圾的⾃动收集等主要功能,这也是它的健壮性所在。
6、Java提供外部接口调用
Java中很多的api接口调用,提供了⽤于⽹络应⽤编程的类库,包括
URL、URLConnection、Socket、ServerSocket等。
Java 开发环境
JDK(Java Development Kit)称为 Java 开发包或 Java 开发⼯具。它是整个Java的核⼼,包括了 Java运⾏环境(Java Runtime Environment)、Java ⼯具和 Java 的核⼼类库(Java API)
JRE是个运⾏开发环境,在运⾏ Java 程序的时候就需要JRE。⽽ JDK ⾥⾯已经包含了JRE,因此只要安装了JDK,就可以编辑 Java 程序,也可以正常运⾏ Java 程序。
Java 基本语法
数据类型
整数型
byte 也就是字节,1 byte = 8 bits,byte 的默认值是 0 ;
short 占⽤两个字节,也就是 16 位,1 short = 16 bits,它的默认值也是 0 ;
int 占⽤四个字节,也就是 32 位,1 int = 32 bits,默认值是 0 ;
long 占⽤⼋个字节,也就是 64 位,1 long = 64 bits,默认值是 0L;
所以整数型的占⽤字节⼤⼩空间为 long > int > short > byte
浮点型
float 是单精度浮点型,占⽤ 4 位,1 float = 32 bits,默认值是 0.0f;
double 是双精度浮点型,占⽤ 8 位,1 double = 64 bits,默认值是 0.0d;
字符型
字符型char可以存储任何字符, 它是单一的16 位 Unicode 字符。
布尔型
布尔型用boolean表示,它有两种值:true 和false,只表示 1 位,默认值是 false。
基础语法
Java 区分⼤⼩写,比如A与a是不同的。
类名:对于定义所有的类来说,⾸字⺟应该⼤写。例如MyTest
包名:包名应该尽量保证⼩写,例如 my.test.package
⽅法名:⽅法名⾸字⺟需要⼩写,后⾯每个单词字⺟都需要⼤写,例如 myTestMethod()
运算符
1、赋值运算符是把=号右边的值复制给左边,右边的值可以是任何常数、变量或者表达式,但左边的值必须是⼀个明确的,已经定义的变量。⽐如int a = 4 。
但是对于对象来说,复制的不是对象的值,⽽是对象的引⽤,所以如果说将⼀个对象复制给另⼀个对象,实际上是将⼀个对象的引⽤赋值给另⼀个对象。
2、算数运算符需要注意优先级问题 ,当⼀个表达式中存在多个操作符时,操作符的优先级顺序就决定了计算顺序,最简单的规则就是先乘除后加减。
3、⾃增、⾃减运算符
int i = 5;int j = ++i; int k = i–;
4、⽐较运算符⽤于程序中的变量之间,变量和⾃变量之间以及其他类型的信息之间的⽐较。⽐较运算符的运算结果是 boolean型。当运算符对应的关系成⽴时,运算的结果为 true,否则为false。
5、逻辑运算符主要有三种,与、或、⾮
6、按位运算符⽤来操作整数基本类型中的每个⽐特位,也就是⼆进制位。按位操作符会对两个参数中对应的位执⾏布尔代数运算,并最终⽣成⼀个结果。
按位与:按位进⾏与运算(AND),两个操作数中位都为1,结果才为1,否则结果为0。
按位或:按位进⾏或运算(OR),两个位只要有⼀个为1,那么结果就是1,否则就为0。
按位⾮:按位进⾏异或运算(XOR),如果位为0,结果是1,如果位为1,结果是0。
按位异或:按位进⾏取反运算(NOT),两个操作数的位中,相同则结果为0,不同则结果为1。
7、移位运算符⽤来将操作数向某个⽅向(向左或者右)移动指定的⼆进制位数。
8、三元运算符语法为:条件表达式?表达式 1:表达式 2。问号前⾯的位置是判断的条件,判断结果为布尔型,为 true 时调⽤表达式 1,为 false 时调⽤表达式 2。
Java 执⾏控制流程
条件语句
if语句
可以单独判断表达式的结果。
if…else 条件语句
If()内的表达式必须是 boolean型的。如果为 true,则执⾏ if 后的语句;如果为 false,则执⾏else后的语句。
if…else if 多分⽀语句
如果需要两个以上,具有多个判断条件时,采取的方式
switch 多分⽀语句
也是多分支的方式,但比if…else if看起来层次更加分明些。
循环语句
while 循环语句
利⽤⼀个条件来控制是否要继续反复执⾏这个语句。while 循环语句的格式如下:
当 (布尔值) 为 true 的时候,执⾏下⾯的表达式,布尔值为 false 的时候,结束循环。
do…while 循环
while 与 do…while 循环的唯⼀区别是 do…while 语句⾄少执⾏⼀次,即使第⼀次的表达式为 false。⽽在 while 循环中,如果第⼀次条件为 false,那么其中的语句根本不会执⾏。
for 循环
它的循环形式会在第⼀次迭代前进⾏初始化。它的形式如下:
每次迭代前会测试布尔表达式。如果获得的结果是 false,就会执⾏ for 语句后⾯的代码;每次循环结束,会按照步进的值执⾏下⼀次循环。
跳转语句
break 语句
它是⽤于终⽌循环的操作,实际上 break 语句在for、while、do···while循环语句中,⽤于强⾏退出当前循环。
continue 语句
continue也可以放在循环语句中,它与 break 语句具有相反的效果,它的作⽤是⽤于执⾏下⼀次循环,⽽不是退出当前循环。
return 语句
return 语句可以从⼀个⽅法返回,并把控制权交给调⽤它的语句。
⾯向对象
类的定义
类相当于⼀系列对象的抽象,就⽐如书籍⼀样,类相当于是书的封⾯,告诉⾥⾯定义的对象都是什么样的。
对象的创建
在 Java 中,万事万物都是对象。但在操作对象时,却是操作对象的 引⽤(reference) 。比如:把⻋钥匙和⻋看作是⼀组对象。当你想要开⻋的时候,⾸先需要拿出⻋钥匙点击开锁的选项,停⻋时,你需要点击加锁来锁⻋。⻋钥匙相当于就是引⽤,⻋就是对象,由⻋钥匙来驱动⻋的加锁和开锁。并且,即使没有⻋的存在,⻋钥匙也是⼀个独⽴存在的实体,也就是说,你有⼀个对象引⽤,但你不⼀定需要⼀个对象与之关联。
属性和⽅法
类里面有属性和⽅法。
属性可以是任意类型的对象,也可以是基本数据类型。
⽅法表示的是做某些事情的⽅式。⽅法其实就是函数,体现了⾯向对象的概念。
构造⽅法
构造⽅法 ,也被称为构造函数、构造器等。构造⽅法只能在对象的创建时期调⽤⼀次,保证了对象初始化的进⾏。构造⽅法⽐较特殊,它没有参数类型和返回值,它的名称要和类名保持⼀致,并且构造⽅法可以有多个。
⽅法重载
⽅法名称必须相同。
参数列表必须不同(个数不同、或类型不同、参数类型排列顺序不同等)。
⽅法的返回类型可以相同也可以不相同。
仅仅返回类型不同不⾜以成为⽅法的重载。
⽅法的重写
重写的⽅法必须要和⽗类保持⼀致,包括返回值类型,⽅法名,参数列表 也都⼀样。
重写的⽅法可以使⽤ @Override 注解来标识
⼦类中重写⽅法的访问权限不能低于⽗类中⽅法的访问权限。
初始化
类的初始化
Java 会尽量保证每个变量在使⽤前都会获得初始化,初始化涉及两种初始化。
1、编译器默认指定的字段初始化,基本数据类型的初始化;
2、指定数值的初始化;
构造器初始化
利⽤构造器来对某些⽅法和某些动作进⾏初始化,确定初始值。
初始化顺序
静态属性:static 开头定义的属性
静态⽅法块:static 包起来的代码块
普通属性: ⾮static 定义的属性
普通⽅法块: 包起来的代码块
构造函数: 类名相同的⽅法
⽅法: 普通⽅法
this 和 super
this 表示的当前对象,this 可以调⽤⽅法、调⽤属性和指向对象本身。
super就是指向⽗类的⼀个引⽤。super 关键字和 this⼀样,你可以使⽤ super.对象 来引⽤⽗类的成员。
访问控制权限
Java中成员的访问权限共有四种,分别是 public、protected、default、private。
继承
继承是所有 OOP(Object Oriented Programming) 语⾔和 Java 语⾔都不可或缺的⼀部分。只要创建了⼀个类,就隐式的继承⾃ Object ⽗类。
多态
多态指的是同⼀⾏为具有多个不同表现形式。是指⼀个类实例(对象)的相同⽅法在不同情形下具有不同表现形式。
代理
代理是指A想要调⽤B类的⽅法,A不直接调⽤,A会在⾃⼰的类中创建⼀个B对象的代理,再由代理调⽤B的⽅法。
Static
⽤ static 声明的成员变量为静态成员变量,也成为类变量。类变量的⽣命周期和类相同,在整个应⽤程序执⾏期间都有效。
Final
final 修饰类时,表明这个类不能被继承。
final 修饰⽅法时,表明这个⽅法不能被任何⼦类重写。
接⼝和抽象类
接⼝
接⼝相当于就是对外的⼀种约定和标准,接⼝是由 interface 关键字来表示。它不会提供任何⽅法的实现,只是会进⾏⽅法的定义。
抽象类
抽象类使⽤ abstract 关键字来表示。
抽象类中不⼀定只有抽象⽅法,抽象类中也可以有具体的⽅法。
抽象类中可以定义构造⽅法、抽象⽅法、普通属性、⽅法、静态属性和静态⽅法。
抽象类和接⼝⼀样不能被实例化,实例化只能实例化具体的类。
异常
异常是程序运⾏之前,编译期间出实现的错误,这些异常异常往往在运⾏时才能被发现。
认识 Exception
Exception 位于 java.lang 包下,继承于 Throwable 类
什么是 Throwable
Throwable 类是 Java 中所有错误(errors) 和异常(exceptions) 的⽗类。只有继承于Throwable 的类或者其⼦类才能够被抛出,还有⼀种⽅式是带有注解的 @throw的类也可以抛出。
常⻅的 Exception
与 Exception 有关的 Java 关键字
在 Java 中关键字: throws、throw、try、finally、catch
throws 和 throw
异常是⼀个对象,它能够被程序员⾃定义抛出或者应⽤程序抛出,需要借助throws 和 throw 语句来定义抛出异常。
throw 语句⽤在⽅法体内,表示抛出异常。 throws 语句⽤在⽅法声明后⾯,由该⽅法的调⽤者来处理。
throws 主要是声明这个⽅法会抛出类型的异常,使它的调⽤者知道要捕获这个异常。 throw 是具体向外抛异常的动作,是异常实例。
try 、finally 、catch
try…catch 表示对某⼀段代码可能抛出异常进⾏的捕获。
try…finally 表示对⼀段代码不管执⾏情况如何,都会⾛ finally 中的代码。
try…catch…finally 也是⼀样的,表示对异常捕获后,再⾛ finally 中的代码逻辑。
什么是 Error
Error 是程序⽆法处理的错误,表示运⾏应⽤程序中较严重问题。⼤多数错误与代码编写者执⾏的操作⽆关,⽽表示代码运⾏时 JVM(Java 虚拟机)出现的问题。
内部类
可以将⼀个类的定义放在另⼀个类的内部,这就是内部类。
集合
Collection 主要⽤来定义集合的约定。
List 继承了 Collection 接⼝ ,同时也是 ArrayList、LinkedList 等集合元素的⽗类。
Set 接⼝也继承了 Collection 接⼝。
Queue 来在处理之前保持元素的访问次序。除了 Collection 基础的操作之外,队列提供了额外的插⼊,读取,检查操作。
SortedSet 接⼝直接继承于 Set 接⼝,使⽤ Comparable 对元素进⾏⾃然排序或者使⽤ Comparator 在创建时对元素提供定制的排序规则。
Map 是⼀个⽀持 key-value 存储的对象,Map 不能包含重复的 key,每个键最多映射⼀个值。
ArrayList
ArrayList 实现了 List 接⼝的 可扩容数组(动态数组) ,它的内部是基于数组实现的。不是线程安全的容器,如果多个线程中⾄少有两个线程修改了 ArrayList 的结构的话就会导致线程安全问题。
Vector
Vector 同 ArrayList ⼀样,都是基于数组实现的,但 Vector 是⼀个线程安全的容器,它对内部的每个⽅法都上了锁,避免多线程引起的安全性问题,但是通常这种同步⽅式需要的开销⽐较⼤,因此,访问元素的效率要远远低于 ArrayList。
在扩容上,ArrayList 扩容后的数组⻓度会增加 50%,⽽ Vector 的扩容⻓度后数组会增加⼀倍。
LinkedList
LinkedList 是⼀个双向链表,允许存储任何元素(包括 null );LinkedList 所有的操作都可以表现为双向性的,索引到链表的操作将遍历从头到尾,视哪个距离近
为遍历顺序;它也不是线程安全的,如果多个线程并发访问链表,并且⾄少其中的⼀个线程修改了链表的结构,那么这个链表必须进⾏外部加锁。
Stack
堆栈是后⼊先出的容器 。它继承了 Vector 类,提供了通常⽤的 push 和 pop 操作,以及在栈顶的 peek ⽅法,测试 stack 是否为空的 empty ⽅法,和⼀个寻找与栈顶距离的 search⽅法。
HashSet
HashSet 是 Set 接⼝的实现类,由哈希表⽀持(实际上 HashSet 是 HashMap 的⼀个实例)。它不能保证集合的迭代顺序。这个类允许 null 元素。这个实现不是线程安全的。如果多线程并发访问 HashSet,并且⾄少⼀个线程修改了set,必
须进⾏外部加锁。
TreeSet
TreeSet 是⼀个基于 TreeMap 的 NavigableSet 实现。这些元素使⽤他们的⾃然排序或者在创建时提供的Comparator 进⾏排序,具体取决于使⽤的构造函数。这个实现不是线程安全的。如果多线程并发访问 TreeSet,并且⾄少⼀个线程修改了 set,必须进⾏外部加锁。
LinkedHashSet
LinkedHashSet是Set接⼝的Hash表和LinkedList的实现。这个实现不同于 HashSet 的,是它维护着⼀个贯穿所有条⽬的双向链表。此链表定义了元素插⼊集合的顺序。注意:如果元素重新插⼊,则插⼊顺序不会受到影响。
LinkedHashSet 有两个影响其构成的参数: 初始容量和加载因⼦。它们的定义与 HashSet 完全相同。对于LinkedHashSet,选择过⾼的初始容量值的开销要⽐ HashSet ⼩,因为LinkedHashSet 的迭代次数不受容量影响。
HashMap
HashMap 是⼀个利⽤哈希表原理来存储元素的集合,并且允许空的 key-value 键值对。HashMap 是⾮线程安全的,也就是说在多线程的环境下,可能会存在问题,⽽ Hashtable 是线程安全的容器。HashMap 也⽀持 fail-fast 机制。HashMap 的实例有两个参数影响其性能:初始容量和加载因⼦。
集合实现类特征图
泛形
泛型其实就是⼀种参数化的集合,它限制了你添加进集合的类型。
反射
对于任意⼀个对象,都能够调⽤它的任意属性和⽅法,这种动态获取信息以及动态调⽤对象⽅法的功能称为java语⾔的反射机制。
I/O
File 类
File 类是对系统中⽂件以及⽂件夹进⾏操作的类,可以通过⾯向对象的思想操作⽂件和⽂件夹。
基础 IO 类和相关⽅法
基本的是四个抽象类,InputStream、OutputStream、Reader、Writer。
最基本的⽅法也就是 read() 和 write() ⽅法,其他流都是上⾯这四类流的⼦类,⽅法也是通过这两类⽅法衍⽣⽽成的。
InputStream
InputStream 是⼀个定义了 Java 流式字节输⼊模式的抽象类。
OutputStream
OutputStream 是定义了流式字节输出模式的抽象类。
Reader 类
Reader 是 Java 定义的流式字符输⼊模式的抽象类。
Writer 类
Writer 是定义流式字符输出的抽象类。
InputStream 及其⼦类
FileInputStream ⽂件输⼊流
ByteArrayInputStream 字节数组输⼊流
PipedInputStream 管道输⼊流
SequenceInputStream 顺序输⼊流
FilterOutputStream 过滤输⼊流
ObjectInputStream 反序列化输⼊流
DataInputStream : 数据输⼊流允许应⽤程序以与机器⽆关⽅式从底层输⼊流中读取基本 Java 数据类型。
PushbackInputStream 推回输⼊流
Pushback ⽤于输⼊流允许字节被读取然后返回到流。
OutputStream 及其⼦类
FileOutputStream ⽂件输出流
ByteArrayOutputStream 字节数组输出流
PipedOutputStream 管道输出流
ObjectOutputStream 基本类型输出流
FilterOutputStream 过滤输出流
PrintStream 打印流 通过 PrintStream 可以将⽂字打印到⽂件或者⽹络中去。
DataOutputStream : 数据输出流允许应⽤程序以与机器⽆关⽅式向底层输出流中写⼊基本 Java 数据类型
Reader 及其⼦类
FileReader ⽂件字符输⼊流 : 把⽂件转换为字符流读⼊
CharArrayReader 字符数组输⼊流 : 是⼀个把字符数组作为源的输⼊流的实现
BufferedReader 缓冲区输⼊流
PushbackReader : PushbackReader 类允许⼀个或多个字符被送回输⼊流。
PipedReader 管道输⼊流: 主要⽤途也是在线程间通讯,不过这个可以⽤来传输字符
Writer 及其⼦类
FileWriter 字符输出流 : FileWriter 创建⼀个可以写⽂件的 Writer 类。
CharArrayWriter 字符数组输出流: CharArrayWriter 实现了以数组作为⽬标的输出流。
BufferedWriter 缓冲区输出流
PipedWriter 管道输出流
注解
@Override : 重写标记,⼀般⽤在⼦类继承⽗类后,标注在重写过后的⼦类⽅法上。
@Deprecated :⽤此注解注释的代码已经过时,不再推荐使⽤。
@SuppressWarnings : 这个注解起到忽略编译器的警告作⽤。
@Retention : 标识如何存储,是在代码中,还是编⼊class⽂件中,或者是在运⾏时可以通过反射访问。
@Documented : 标记这些注解是否包含在 JavaDoc 中。
@Target : 标记这个注解说明了 Annotation 所修饰的对象范围,Annotation 可被⽤于packages、types(类、接⼝、枚举、Annotation类型)、类型成员(⽅法、构造⽅法、成员变量、枚举值)、⽅法参数和本地变量(如循环变量、catch参数)。
@Inherited : 标记这个注解是继承于哪个注解类的。
@SafeVarargs :在声明可变参数的构造函数或⽅法时,Java 编译器会报 unchecked 警告。使⽤ @SafeVarargs 可以忽略这些警告。
@FunctionalInterface : 表明这个⽅法是⼀个函数式接⼝。
@Repeatable : 标识某注解可以在同⼀个声明上使⽤多次。
关于 null 的⼏种处理⽅式
null 是任何引⽤类型的初始值
null 是所有引⽤类型的默认值,Java 中的任何引⽤变量都将null作为默认值,也就是说所有 Object 类下的引⽤类型默认值都是 null。
下⾯是基本数据类型的初始值
以上是关于java基础核心总结归纳---参考手册的主要内容,如果未能解决你的问题,请参考以下文章