以下是作者将Java入门的基础知识进行了一定总结,适用于学习过,但需要复习和加固基础的人群查阅,其中要有不对或不全之处,欢迎补充
目录
一. 编程基础
1.数据类型
基本数据类型 | 整数类型 | 字节型byte | 8位 |
短整型short | 16位 | ||
整型int | 32位 | ||
长整型long | 64位 | ||
浮点数类型 | float | 32位 | |
double | 64位 | ||
字符型 | char | ‘ ’单引号 | |
布尔型 | boolean | true或false | |
引用数据类型 | 类 class | ||
接口interface | |||
数组 | |||
枚举enum | |||
注解annotation |
1.变量之间可以相互转型
自动转型:byte<short<int<long
强制转型:目标类型 变量=(目标类型)值
2.变量只有在作用范围内才能被使用,一个{}则为一个作用域。
2.运算符
算术运算符 | 运算符 | 范例 | 结果 |
+ 正号/加号 | +3 | 3 | |
- 负号/减号 | b=4;-b; | -4 | |
* 乘 | 3*4 | 12 | |
/ 除 | 5/5 | 1 | |
% 取模(求余数) | 7%5 | 2 | |
++自增 前(先加) | a=2;b=++a | a=3,b=3 | |
++自增 后(后加) | a=2;b=a++ | a=3,b=2 | |
-- 自减 前(先减) | a=2;b=--a | a=1,b=1 | |
-- 自减 后(后减) | a=2;b=a-- | a=1,b=2 | |
赋值运算符 | = 赋值 | a=3 | a=3 |
+= 加等于 | a+=b | a=a+b | |
-= 减等于 | a-=b | a=a-b | |
*= 乘等于 | a*=b | a=a*b | |
/= 除等于 | a/=b | a=a/b | |
%= 模等于 | a%=b | a=a/b取整 | |
比较运算符 (返回均为布尔型) | ==等于 | 4==3 | false |
!=不等于 | 4!=3 | true | |
<小于 | 4<3 | false | |
>大于 | 4>3 | true | |
<=小于等于 | 4<=3 | false | |
>=大于等于 | 4>=3 | true | |
逻辑运算符 | & 与 一假为假 | true&false | false |
| 或 全假才假 | true|false | true |
1.运算符优先级:
算术 > 乘除 > 加减 > 比较 > 逻辑 > 赋值
3.循环结构语句
循环结构 | 语法 | 备注 |
if语句循环 | for(初始化表达式;循环条件;操作表达式){ 执行语句 } | 在循环次数已知的情况下,for循环语句 |
if…else if…else | if(判断语句){执行语句1 }else if(判断语句){执行语句2 }else{执行语句n } | 对于多个判断条件进行判断,进行多种不同的处理 |
switch | switch(表达式){ case 目标值1: 执行语句 break; default: 执行语句n break; } | 只针对于某个表表达式的值做出判断 |
while语句循环 (先判断后执行) | while(循环条件){ 执行语句 } | while语句会反复进行循环条件判断,只要条件成立,{}内的执行语句就会执行 |
do…while (先执行后判断) | do{ 执行语句 } while(循环条件) | 循环体会无条件执行一次,再根据条件决定是否继续循环 |
for循环语句 | for(初始化表达式;循环条件;操作表达式){ 执行语句 } | 一般在循环次数已知的情况下 |
跳转语句 | break语句 | 跳出循环语句执行后面的代码 |
continue语句 | 它的作用是终止本次循环,执行下一次循环 |
4.数组
1.数组基本元素:名称、元素、索引、数据类型
数据类型[ ]数组名=new 数据类型[元素…]
2.定义数组类型 (按数据类型进行分类)
3.写明数组长度(数组的初始值为0,最小索引为0,最大索引为数组长度减一)
4.new 为引用数据关键字
5.有一个length属性,可获得数组长度
二.面向对象
1.基本思想
封装性 | 将对象的属性和行为看成一个整体 |
继承性 | 子类可以继承父类的所有方法和属性 |
多态性 | 三要素:继承、重写、父类引用指向子类对象 |
1.类和对象
创建:class 类名{}
类名 对象名=new 类名()
new:在堆内存中创建一个新对象
对象的属性和方法的访问都是通(.)运算符来实现
2.控制权限
访问范围 | private私有 | default默认 | protected受保护的 | public 公共 |
同类 | √ | √ | √ | √ |
同包中的类 | √ | √ | √ | |
不在同包中的子类 | √ | √ | ||
全局范围 | √ |
2.封装
定义 | 实现 | 关键字 | 作用 |
将类的细节包装隐藏起来,通过类提供的方法访问 | 属性私有化,提供公有的读写方法 | private 获取属性 getxxx() 设置属性setxxx() | 防止本类代码和数据被外部类定义的代码随机访问 |
1.构造方法
定义 | 实现 | 关键字 | 注意 |
是类的特殊,在类实例化对象时自动调用 | 属性私有化,提供公有的读写方法 | pubiic | 构造方法的名称必须和类名一致 2.名称前不能有任何返回值类型的声明 3.不能在构造方法中使用return返回值 |
Overload:重载,不同方法之间作用,根据参数不同或数据类型不同选择不同方法,方法之间可以同名,所有同名不同参。
2.this关键字
调用本类中的属性 | |
调用成员方法 | |
调用构造方法 |
3.static关键字
应用 | 输入 | 输出 | 注意 | |
静态属性 (公共属性) | 适用于属性如果在使用中被修改,则所有对象的属性都修改 | 类名.属性进行访问 | 类.属性=“”修改 | 只能修饰成员变量,不能修饰局部变量 |
静态方法 | 适用于需要不创建对象,类名直接调用某个方法,一般用于工具类 | 类名.方法进行访问 | 类.方法=“”修改 | 静态方法只能访问静态成员 |
注:修饰类时,该类只能执行一次
3.继承
定义 | 关键字 | 注意 |
在现有类(父类)的基础上构建一个新类称为子类,子类继承父类属性和方法 | extends | 1.子类只能访问父类中公共和受保护的方法。2.只能单继承,不允许多继承,可以多个类继承一个父类,并且多层继承也可以 |
1.Override
Override:重写,继承中子类重写方法要和父类方法同名、同参、同类型
注:子类重写父类时,不能使用比父类方法更严格的访问权限
2.关键字
关键字 | 作用 | 注意 |
super | 1.访问父类的非私有属性或调用非私有方法 2.调用父类指定构造方法 | 调用的代码必须位于子类构造方法第一行,所以this和super不能同时使用 |
final | 1.类不能有子类 2.方法不能被重写 3.变量变为常量 | 声明变量时,变量名应全为大写 |
4. 抽象类和接口
1.抽象类
定义 | 抽象方法在定义时不需要实现方法体,包含抽象方法的类就是抽象类 |
关键字 | abstract |
语法格式 | abstract 返回值类型 方法名称(参数列表) |
定义规则 | 1.包含抽象方法的类必须是抽象类 2.声明抽象类和抽象方法时都要使用 abstract 关键字修饰 3.抽象方法只需要声明而不需要实现。 4.如果一个非抽象类继承了抽象类之后,那么该类必须重写抽象类中的全部抽象方法。 |
注意 | 1.抽象类中不一定有抽象方法,但抽象方法一定在抽象类中 2.抽象类不可以被实例化 3.抽象方法不能使用private关键字 |
2.接口
定义 | 定义程序协议,接口可以对接不同的业务模块 |
关键字 | 声明:interface / 实现:implements |
语法格式 | (public)interface 接口名 [extender 接口1,接口2] 使用:修饰符 class 类名 implements 接口1,接口2{ } |
定义规则 | 允许接口继承接口,并且一个接口可以同时继承多个接口 |
5.多态
定义 | 形式 |
不同类的对象在调用同一个方法时有多种不同行为 | 1.方法的重载 2.方法的重写 |
1.对象类型转换
情况 | 作用 | 格式 | 注意 |
子类对象 父类对象 | 父类对象可以调用子类重写发方法,不用更改父类代码 | 父类类型 父类对象=子类实例 | |
父类对象 子类对象 | 重新获得向上转型丢失的子类特性 | 父类类型 父类对象=子类实例 子类类型 子类对象=(子)父类对象 | 必须先向上转型,再向下转型 |
2.instanceof关键字
作用 | 语法 |
判断一个对象是否是某个类的实例 | 对象 instanceof 类 |
3.2.6 Object类
定义 | 常用方法 | 方法说明 |
所有类的父类,通常被称为超类 | boolean equals() | 判断两个对象是否“相等” |
int hashCode() | 返回对象的哈希值 | |
String toString() | 返回对象的字符串表示形式 |
三.异常
1.定义
Exception 普通错误 | RuntimeException 运行时异常 | ArithmeticException算术异常 |
ClassCastException类处理异常 | ||
Error 严重错误 | IOError/AWTError |
运行时异常 | 描述 |
ArithmeticException | 算术异常 |
IndexOutOfBoundsException | 索引越界异常 |
ClassCastException | 类型转换异常 |
NullPointerException | 空指针异常 |
NumberFormatException | 数字格式化异常 |
2.处理
关键字 | 功能描述 |
try | 放置可能引发异常的代码块 |
catch | 后面对应异常类型和一个代码块,该代码块用于处理这种类型的异常 |
finally | 无论程序是否异常都要执行,只能出现在try之后,不能单独出现 |
throw | 用于抛出一个实际的异常。它可以单独作为语句来抛出一个具体的异常对象,可以自定义错误信息 |
throws | 用在方法签名中,用于声明该方法可能抛出的异常,需要写在方法声明后面,throw后面还需要声明异常类型 |
3.自定义异常
自定义的异常类只需继承 Exception 类,在构造方法中使用 super()语句调用
Exception 的构造方法即可。
四. API
1.包装类
装箱:将基本数据类型转换/成包装类的过程
拆箱:将包装类转换成基本数据类型的过程
基本数据类型 | 对应的包装类 |
byte | Byte |
char | Character |
int | Integer |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
2.常用类
类型 | 类名 | 特点 | 常用方法 |
字符串类 | String类 | 初始化字符串对象 | boolean equals(Obiect obj) 比较 obj 与当前字符串的内容是否相同 |
StringBuffer类 | 字符串内容和长度可变 | int length() 获取字符串缓冲区中字符串内容的长度 | |
StringBuilder类 | 没有实现线程安全 | ||
系统相关 | System类 | 系统相关的属性和方法 | static Properties getProperties() 获取当前系统全部属性 |
Runtime类 | 获取Java虚拟机运行状态 | getRuntime() 用于获取 Runtime类的实例 | |
算术相关 | Math类 | 进行科学计算PI—Π E--e | random() 用于生成一个大于或等于 0.0 且小于 1.0 的随机数 [0,1) |
Random类 | 指定范围的随机数 | Random() 利用系统时间创建一个对象 | |
数据特殊 | BigInteger类 | 处理8个字节以上的整数 | |
BigDecimal类 | 处理书=数字精度要求高的场景 | ||
日期和时间 | Date类 | 时间和日期 | |
Calendar类 | 读取时间和日期的特定部分,抽象类,不可以被实例化 | ||
Instant类 | 精确时刻,精细到纳秒 | ||
LocalDate类 | 不带时区的日期 | ||
LocalTime类 | 不带时区的时间 | ||
Duration类 | 计算两个时间的间隔 | ||
Period类 | 计算两个日期的间隔 | ||
日期和时间格式化 | DateForm类 | 将日期时间进行格式化 | |
SimpleDataFormat类 | 是DateForm类子类,可以创建实例对象 | ||
数字格式化 | NumberFormat类 | 格式化和解析任何区域数字 | |
正则表达式 | Pattern类 | 创建正则表达式 | |
Marcher类 | 验证Pattern类定义的与字符串是否匹配 |
五.集合
1.概述
集合 可以存储任意类型的对象,并且存储的长度可变,这些类统称为集合 | Collection 单列集合 | List 存储一组有序、不唯一的对象 | ArrayList |
LinkedList | |||
Vector | |||
Set 存储一组无序、唯一的对象 | HashSet | ||
TreeSet | |||
Map 双列集合 | HashTable | Properties | |
HashMap | LinkedHashMap | ||
TreeMap |
2.常用类
ArrayList | HashSet | |
概念 | ArrayList 实现了 List 接口,是一个可变长度的有序集合,可以动态增加或减少元素 | 它基于哈希表数据结构,元素被散列到哈希表中,使元素的查找和插入效率非常高。 |
用法 | 它内部使用数组来存储元素,允许重复元素,而且保持元素的插入顺序 | HashSet用于存储一组唯一的元素,不允许重复。 可用于快速查找、插入和删除元素。 |
主要方法 | add(E element): 向列表末尾添加一个元素。 get(int index): 获取指定索引位置的元素。 set(int index, E element): 替换指定索引位置的元素。 remove(int index): 移除指定索引位置的元素。 size(): 返回列表的大小。 isEmpty(): 检查列表是否为空。 contains(Object o): 检查列表是否包含指定元素。 | add(E ): 向集合添加一个元素,如果已存在则不添加。 remove(object o): 从集合中移除指定元素。 contains(Object o): 检查集合中是否包含指定元素。 size(): 返回集合的大小。 isEmpty(): 检查集合是否为空。 |
使用场景 | 当需要一个动态数组,可以随时添加或删除元素时,使用 ArrayList。 适用于需要按顺序存储和访问元素的情况。 | 当需要存储一组唯一的元素时,使用 HashSet。 适用于需要快速查找、插入和删除元素的情况。 |
3.集合遍历
使用 | |
Iterator接口 | |
foreach循环 (只能访问其中元素,不能对其元素修改) |
4. Map接口
定义 | K | V |
双列集合,每一个元素都包含一个键对象和一个值对象,键和值之间存在映射 | hashset 不可重复,重复将会覆盖 | Arraylist 可重复 |
1.常用方法
方法声明 | 功能描述 |
void put( Objcet key, Object value) | 将指定的值和键存人集合并进行映射美联 |
Object get( Objeet key) | 返回指定的键映射的值;如果此映射不包含该键的狭射关系,则返回 null |
void clear() | 移除所有的键值对元素 |
2.实现类
HashMap | |
概念 | Java 中的一个集合类,它实现了 Map 接口,用于存储键值对。 将键映射到值,允许快速查找、插入和删除元素。HashMap 不允许重复的键,但允许键对应的值重复。 |
方法 | put(K key, V value): 将指定的键值对添加到映射中。如果键已存在,将替换对应的值。 get(Object key): 返回与指定键关联的值,如果键不存在,则返回 null。 remove(Object key): 从映射中移除指定键对应的键值对。 containsKey(Object key): 检查映射是否包含指定的键。 containsValue(Object value): 检查映射是否包含指定的值。 keySet(): 返回包含映射中所有键的集合。 values(): 返回包含映射中所有值的集合。 entrySet(): 返回包含映射中所有键值对的集合。 size(): 返回映射中键值对的数量。 isEmpty(): 检查映射是否为空。 |
使用场景 | HashMap 适用于需要存储键值对的情况,当需要关联一个唯一键与一个值时,但不要求键的顺序时,特别是在需要快速查找和访问值的情况下。 |
inkedHashMap | 集合中元素遍历顺序与存入顺序一致 |
TreeMap | 对元素的键进行排序 |
Propertise | 存储应用配置项 |
3.常用工具类
Collections | 提供大量排序、查找、修改的操作 |
Arrays | 提供了针对集合和数组的操作 |
Lambda | 取代匿名内部类 |
六.泛型
作用 | 1.类型安全 2.消除强制类型转换 3.潜在的性能收益 4.更好的代码复用性 |
优点 | 1.提高类型的安全性。 2.消除强制类型转换。 3.提高代码复用性。 4.拥有更高的运行效率。 |
使用 | 修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }super (参数 1,参数 2,..) 泛型广泛应用于Java集合框架 可以创建泛型类和接口 泛型方法 |
接口 | public<泛型类型>返回类型方法名(泛型类型变量名){} |
通配符 | E:元素 K,V:键值对 N:数字 T:类型dd |