Java 基础知识点梳理

Java 基础知识点梳理

基础语法

基本类型(8种)

byte,short,int,long,float,double

char,boolean

基本类型的字面值规则

  1. 整数字面值是 int 类型
  2. byte,short,char 比 int 小的整数,可以直接使用范围内的字面值
  3. 浮点数字面值是 double 类型
  4. 字面值后缀
    • F float
    • L long
    • D double
  5. 字面值前缀
    • 0x 16进制
    • 0 8进制
    • 0b 2进制
    • \u char类型16进制 ‘\u0061’

基本类型的运算规则

  1. 运算结果的类型,和运算项中最大的类型一致
  2. byte,short,char 比int范围小的整数,先自动转成int再运算
  3. 浮点数运算不精确,如果做精确运算需要使用 BigDecimal 对象
    2-1.9 ----> 0.10000000000009
    4.35*100 ----> 434.99999999999994
  4. 浮点数的特殊值
    • Infinity 无穷: 3.14/0, Double.MAX_VALUE*2
    • NaN — Not a Number: Math.sqrt(-4)
    • 判断一个浮点数是否是 Infinity 或 NaN:
      • Double.isInfinite(d1)
      • Double.isNaN(d1)

运算符

±*/%

= < <=
== !=
&&
||
!
& 位与,两个都是1结果才是1
| 位或,两个都是0结果才是0
^ 相同是0, 不同是1
~ 求反,1变0, 0变1
>> 带符号右移位
>>> 不带符号右移位,不管符号位是1还是0,左边都补0
<< 左移位
=
+= -= /=
()
? :

方法

方法递归 — 方法中调用自身

递归是一步一步的简化问题,把问题简化成最简问题,再倒推求出结果

求阶乘

f(5);
5 * f(4)
4 * f(3)
3 * f(2)
2 * f(1)
1 * f(0)

void f(int n) {
	if(n == 0) return 1;
<span class="token keyword">return</span> n <span class="token operator">*</span> <span class="token function">f</span><span class="token punctuation">(</span>n<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5

流程控制

if
switch
只能判断byte,short,char,int 这几种整数和 String
break
- 如果没有break,会穿透执行
- 遇到 break 跳出 switch
for

for(int i=1; i<=3; i++) {
	for(char j='a'; j<='c'; j++) {
		打印 i,j
	}
}

1, a
1, b
1, c
2, a
2, b
2, c
3, a
3, b
3, c

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

while 先判断后执行
do-while 先执行后判断,至少执行1次

break 跳出循环
continue 跳到下一轮循环

循环的命名
在内层循环中,控制外层循环

outer:
for() {
	for() {
			break outer;
			continue outer;
	}
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

数组

创建数组的三种语法:
int[] a = new int[5];
int[] a = {2,1,5,7};

a = new int[]{3,2,6};

  • 数组长度不可变
  • a.length
  • 数组遍历

二维数组
数组中保存数组
int[][] a = { {2,3,4}, {2,1}, {3,4,2,6}};

数组的工具类
Arrays.toString()
Arrays.sort()
Arrays.binarySearch()
Arrays.copyOf()

面向对象(*)

封装


对象(实例)
引用
构造方法
重载
this

  • this.xxx, this.xxx() 调用当前实例的成员,this是特殊引用,引用自己的地址
  • this() 调用重载的构造方法
    隐藏 ---- 方便代码的维护和修改,私有成员可以随便修改,对其他代码无影响

继承

集成的作用: 代码重用

创建子类实例:

  • 先创建父类实例
  • 再创建子类实例
  • 两个实例绑定在一起整体作为一个实例

调用成员时:

  • 先找子类
  • 再找父类

方法重写

  • 在子类中重新定义继承的方法

super

  • super.xxx 调用父类成员
  • super() 调用父类的构造方法

多态

多态的作用: 一致的类型
所有子类型的实例,都可以被当做父类型来处理

类型转换
- 向上转型
- 向下转型

instanceof
- 判断一个对象的真实类型
- 对真实类型和父类型判断,都是true

B 继承 A
A a = new B()

a instanceof B  ---  true
a instanceof A  ---  true
a instanceof Object  ---  true

 
 
  • 1
  • 2
  • 3

抽象类

  • 包含抽象方法的类必须是抽象类
  • 抽象类中不一定有抽象方法

abstract class A {
void a() {

}

abstract void b();

 
 
  • 1

}

抽象方法的作用:
- 作用通用方法在父类中定义
- 要求子类必须实现这个方法

final,static,访问控制符

final
- 修饰类: 不能被继承
- 修饰方法: 不能在子类中重写
- 修饰常量: 变量的值不可变,即常量

static
- 属于类,而不属于实例
- 静态初始化块
class A {
static {
}
}

private 类
[default] 包
protected 任意子类
public 任意

接口

作用: 结构设计工具, 用来解耦合

内部类

  • 非静态内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

基础API

  • Object

  • String
    - 字符串字面值 “ger4t3” 在“字符串常量池”分配内存
    - 常量池中的字符串可以重复使用,不会重复创建
    - 字符串连接效率低
    String s1 = “aa”;
    String s2 = “bb”;
    String s3 = “cc”;
    String s = s1 + s2 + s3;

        String s = "aa" + "bb" + "cc";   // 编译器直接优化为 String s = "aabbcc";
    
       
       
    • 1
  • StringBuilder / StringBuffer

    • 一般用来代替字符串做高效率连接运算
    • appen()
  • Integer 、Double …

  • BigDecimal

  • Date

  • SimpleDateFormat

集合(*)

  • ArrayList
    - 数组存放数据
    - 访问效率高
    - 增删数据效率可能降低

  • LinkedList
    - 双向链表
    - 两端效率高
    - 如果只在两端操作数据,用双向链表

  • HashMap
    - 哈希表
    - HashMap 使用 Entry[] 数组存放数据
    - 初始长度 16
    - 翻倍增长
    - 存放数据的运算过程:
    - key.hashCode() 获得键的哈希值计算下标 i
    - 新建 Entry 实例封装键值对
    - 把 Entry 实例放入 i 位置
    - 如果是空位置直接方法
    - 如果已经有数据,依次用 equals() 比较键是否相等
    - 有相等的键,覆盖值
    - 没有相等的键,用链表连接在一起
    - 加载因子、负载率到 0.75
    - 容量翻倍
    - 所有数据重新执行哈希运算放入新数组
    - jdk1.8
    - 链表长度到8,转成红黑树
    - 树上的数据减少到6,转回链表

  • Iterator

  • Collections

IO

线程(*)

网络

反射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不将就的麒麟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值