前言
从事java开发多年,一直没有好好梳理总结知识点的习惯,现在总结一下java知识体系,不是最终版,会不定期更新,作为java编程工作的总结和后续成长足迹的记录,同时遇到的问题也会在此记录。也希望可以结交更多志同道合的欧阳,如若知识点有疏忽或遗漏的地方,还望各位大佬不吝赐教。在此表示感谢。
基础知识
基础语法:
java概述:是一门面向对象编程语言,特点就是作为静态语言面向对象编程语言的代表,实现了完全面向对象理论。
java标识符:给包,类,方法,变量起名的符号,由数字,下划线,字母组成,原则是见名知意,注意不能以数字开头,不能是java关键字,大小写根据包,类方法区分。
java关键字:被Java语言赋予了特殊含义,用作专门用途的字符串(单词),这些关键字不能用于常量、变量、和任何标识符的名称。
类别 | 关键字 | 声明 |
访问控制: | private | 同一类可见 |
protected | 同一包内的类和所有子类可见 | |
public | 对所有类可见 | |
类,方法,变量: | abstract | 类或成员方法具有抽象属性 |
class | 声明一个类 | |
enum | 枚举 | |
extends | 表明一个类型是另一个类型的子类型 | |
final | 用来说明最终属性 | |
implements | 表明一个类的实现接口 | |
interface | 接口 | |
native | 原生方法 | |
new | 用来创建对象实例 | |
static | 表明具有静态属性 | |
strictfp | 用于限制浮点计算的精度和舍入 | |
synchronized | 表明一段代码需要同步执行 | |
transient | 声明不用序列化的成员域 | |
volatile | 表明两个或多个变量必须同步发生变化 | |
程序控制语句: | break | 用于结束当前循环体的执行 |
case | 用于在switch语句中表示分支 | |
continue | 跳出当前循环 | |
default | 用于在switch语句中默认分支 | |
do | 用于do-while循环结构中 | |
else | 用于条件语句条件不成立时分支 | |
for | 循环结构引导词 | |
if | 条件语句引导词 | |
instanceof | 用于测试一个对象是否为指定类型的实例对象 | |
return | 方法执行返回定义 | |
switch | 分支语句结构引导词 | |
while | 创建一个while循环 | |
错误处理: | assert | 断言,用于程序调试 |
catch | 用于异常处理,捕获异常 | |
finally | 用于声明处理异常中肯定会执行的语句块 | |
throw | 抛出一个异常 | |
throws | 在方法声明中用于指定在方法中未处理哪些异常 | |
try | 定义具有异常处理的语句块 | |
包相关: | import | 引入类型或者包 |
package | 包 | |
基本数据类型: | boolean | 布尔类型 |
byte | 字节类型 | |
char | 字符类型 | |
double | 双精度浮点数据类型 | |
float | 单精度浮点数据类型 | |
int | 整数类型 | |
long | 长整型 | |
short | 短整型 | |
变量引用: | super | 当前对象的父类型的引用或父类型的构造方法 |
this | 当前实例对象的引用 | |
void | 声明方法不返回任何值 | |
保留关键字: | goto | 保留 |
const | 保留 | |
Java8以后关键字: | defalut | 用于指定接口中的方法提供方法的默认实现 |
exports | 在模块化java中用于导出包含模块的包 | |
module | 用于java应用程序内声明模块 | |
requires | 用于指定模块内部所需要的库 | |
var | 不能用作类型名称的特殊标识符 |
java注解:用于解释说明程序的文字,有单行注解,多行注解,文档注解。
java访问修饰符:
java分隔符:
空格、逗号、分号以及行结束符都被称为分隔符,规定任意两个相邻标识符、数字、保留字或语句之间必须至少有一个分隔符,以便程序编译时能够识别。
具体包含:
; 分号 用来终止一个语句
{} 花括号、大括号 用来包括自动初始化的数组的值,也用来定义程序块、类、方法以及局部范围
[] 方括号、中括号 用来声明数组的类型,也用来表示撤消对数组值的引用
, 逗号 在变量声明中,区分变量说明的各个变量。在for控制语句中,用来将圆括号内的语句连接起来
. 原点 用来将软件包的名字与它的子包或类分隔。也用来将引用变量与变量或方法分隔
() 圆括号 在定义和调用方法时用来容纳参数表。在控制语句或强制类型转换组成的表达式中用来表示执行或计算的优先权
java转译符:
转译符是一种特殊的字符常量,通常以反斜杠“\” 开头,后面跟着一个或几个字符,常见的转译符如下:
Java中,不管是String.split(),还是正则表达式,有一些特殊字符需要转义,这些字符是( [ { / ^ - $ ¦ } ] ) ? * + .
转义方法为字符前面加上"\",这样在split、replaceAll时就不会报错。不过要注意,String.contains()方法不需要转义。
java进制:
进制就是进位计数制,带进位的计算方法。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
java流程控制语句:
流程是指java程序运行时,各语句的执行顺序,流程控制语句就是用来控制各语句的执行顺序。
大体分为三类:
顺序结构:常见的按照既定顺序执行
分支结构:
循环结构:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
java表达式:
运算符把常量或变量连接起来的符号在java中叫做表达式。例:
a + b
3.14 + a
(x + y) * z + 100
boolean b= i < 10 && (i%10 != 0)
java运算符:
运算符是指对操作数的运算方式,常用的有算数运算符和比较运算符:
还有很多,后续增加++++++
java变量:
在程序执行的过程中,在某个范围内会改变的量。变量是内存的一小块区域。
1.一切对象存放在堆里。
2.类变量,常量 存放在方法区中。
3.局部变量为私有变量存放在java虚拟机栈中。
成员变量:方法外部,类内部的变量
局部变量:类方法中的变量
成员变量和局部变量的区别:
作用域
成员变量:针对整个类有效。
局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)
存储位置
成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。当方法调用完,或者语句结束后,就自动释放。
生命周期
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:当方法调用完,或者语句结束后,就自动释放。
初始值
成员变量:有默认初始值。
局部变量:没有默认初始值,使用前必须赋值。
基础数据类型变量:
数据类型 变量名 = 初始化值;
引用数据类型变量:
java常量:
在程序执行的过程中,其值不可以发生改变的量。分类如下:
字符串常量 用双引号括起来的内容(“HelloWorld”)
整数常量 所有整数(12,-23)
小数常量 所有小数(12.34)
字符常量 用单引号括起来的内容(‘a’,’A’,’0’)
布尔常量 较为特有,只有true和false
空常量 null
java数据类型:
Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。
java反射:
java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法,对于任意一个对象,都能够调用他的任意方法和属性,这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
用途:通过反射,Java 代码可以发现有关已加载类的字段,方法和构造函数的信息,并可以在安全限制内对这些字段,方法和构造函数进行操作。
优点:提供程序的灵活性,扩展性,降低耦合,提高自适应能力。
缺点:性能不高,有安全问题,必须在没有安全限制的环境下运行反射。内部暴露问题,反射允许代码执行一些在正常情况下不被允许的操作。
反射机制的相关类:
类名 | 用途 |
Class类 | 代表类的实体,在运行的Java应用程序中表示类和接口 |
Field类 | 代表类的成员变量(成员变量也称为类的属性) |
Method类 | 代表类的方法 |
Constructor类 | 代表类的构造方法 |
Class类:
获取类相关方法
方法 | 用途 |
asSubclass(Class clazz) | 把传递的类的对象转换成代表其子类的对象 |
Cast | 把对象转换成代表类或是接口的对象 |
getClassLoader() | 获得类的加载器 |
getClasses() | 返回一个数组,数组中包含该类中所有公共类和接口类的对象 |
getDeclaredClasses() | 返回一个数组,数组中包含该类中所有类和接口类的对象 |
forName(String className) | 根据类名返回类的对象 |
getName() | 获得类的完整路径名字 |
newInstance() | 创建类的实例 |
getPackage() | 获得类的包 |
getSimpleName() | 获得类的名字 |
getSuperclass() | 获得当前类继承的父类的名字 |
getInterfaces() | 获得当前类实现的类或是接口 |
获得类中注解相关的方法:
方法 | 用途 |
getAnnotation(Class annotationClass) | 返回该类中与参数类型匹配的公有注解对象 |
getAnnotations() | 返回该类所有的公有注解对象 |
getDeclaredAnnotation(Class annotationClass) | 返回该类中与参数类型匹配的所有注解对象 |
getDeclaredAnnotations() | 返回该类所有的注解对象 |
获取类中属性的相关方法:
方法 | 用途 |
getAnnotation(Class annotationClass) | 返回该类中与参数类型匹配的公有注解对象 |
getAnnotations() | 返回该类所有的公有注解对象 |
getDeclaredAnnotation(Class annotationClass) | 返回该类中与参数类型匹配的所有注解对象 |
getDeclaredAnnotations() | 返回该类所有的注解对象 |
获得类中构造器相关的方法:
方法 | 用途 |
getConstructor(Class…<?> parameterTypes) | 获得该类中与参数类型匹配的公有构造方法 |
getConstructors() | 获得该类的所有公有构造方法 |
getDeclaredConstructor(Class…<?> parameterTypes) | 获得该类中与参数类型匹配的构造方法 |
getDeclaredConstructors() | 获得该类所有构造方法 |
获得类中方法相关:
方法 | 用途 |
getMethod(String name, Class…<?> parameterTypes) | 获得该类某个公有的方法 |
getMethods() | 获得该类所有公有的方法 |
getDeclaredMethod(String name, Class…<?> parameterTypes) | 获得该类某个方法 |
getDeclaredMethods() | 获得该类所有方法 |
类中其他重要的方法:
方法 | 用途 |
isAnnotation() | 如果是注解类型则返回true |
isAnnotationPresent(Class<? extends Annotation> annotationClass) | 如果是指定类型注解类型则返回true |
isAnonymousClass() | 如果是匿名类则返回true |
isArray() | 如果是一个数组类则返回true |
isEnum() | 如果是枚举类则返回true |
isInstance(Object obj) | 如果obj是该类的实例则返回true |
isInterface() | 如果是接口类则返回true |
isLocalClass() | 如果是局部类则返回true |
isMemberClass() | 如果是内部类则返回true |
Field类:
方法 | 用途 |
equals(Object obj) | 属性与obj相等则返回true |
get(Object obj) | 获得obj中对应的属性值 |
set(Object obj, Object value) | 设置obj中对应属性值 |
Method类:
方法 | 用途 |
invoke(Object obj, Object… args) | 传递object对象及参数调用该对象对应的方法 |
Constructor类:
方法 | 用途 |
newInstance(Object… initargs) | 根据传递的参数创建类的对象 |
java语法糖:
指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。语法糖就是对现有语法的一个封装。简而言之,语法糖让程序更加简洁,有更高的可读性。
例如:switch支持String与枚举;泛型和类型擦除;自动装箱与拆箱;方法变长参数;枚举;内部类;条件编译;断言;数值字面量;增强for循环;try-with-resource语句;Lambda表达式
java注解:
注解也叫元数据,即一种描述数据的数据。用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注。Annotation接口中有下面这句话来描述注解:Annotation 是所有注解继承的公共接口。注解的本质就是一个继承了 Annotation 接口的接口。
注解用途:
1.生成文档,通过代码里标识的元数据生成javadoc文档。
2.编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
3.编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
4.运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。
注解的分类:
Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查
元注解,元注解是用于定义注解的注解,包括@Retention(标明注解被保留的阶段)、@Target(标明注解使用的范围)、@Inherited(标明注解可继承)、@Documented(标明是否生成javadoc文档)
自定义注解,可以根据自己的需求定义注解。
json简介:
轻量级的数据交换格式,易于人的编写和阅读,也易于机器解析。JSON由两种结构组成:
键值对的无序集合——对象(或者叫记录、结构、字典、哈希表、有键列表或关联数组等)
值的有序列表——数组
json形式:对象,数组