JavaSE从入门到线程知识点总结笔记(完)

JavaSE总结

一、了解Java语言

1、我能不能学会这个语言?

2、写博客

3、学习MarkDown语法

4、简单的Dos命令

5、计算机语言的发展史

6、Java的诞生(1995年)–>JavaSE -->JavaME (Android) -->JavaEE

7、JDK(开发着工具包)、JRE(运行环境)

二、Hello World

2-1 Hello World 程序

public class Hello(){
    public static void main(String[] args) {
        Systen.out.print("Hello World");
    }
}

2-2 Java语言特点

  • Java是一个强类型静态语言
  • Java是编译型语言,Python是解释型语言
  • 使用Javac生成class

三、基础语法

3-1 注释

  • 行内注释 //
  • 多行注释 /**/
  • 文档注释 /** */ javadoc 生成帮助文档

3-2 标识符

关键字

请添加图片描述


3-3 数据类型

  • **基本数据类型: **

    • 整数(byte 1 、short 2 、int(默认) 4 、long 8 )、
    • 浮点数( float 4 、double (默认) 8 )
    • 字符(char 2 )
    • 布尔值(boolean 1 )
  • 引用数据类型:类、接口、数组


3-4 类型转换

  • 自动类型转换:低转高

  • 强制类型转换:高转低(低)高


3-5 变量和常量

  • type varName [=value];
  • 作用域:类变量 ; 实力变量; 局部变量;
  • 常量:final(关键词) MAX_A = 10;
  • 命名规范:
    • 1、见名知意
    • 2、驼峰命名(变量,方法)
    • 3、类,首字母大写,驼峰命名
    • 4、常量 大写+下划线

3-6 运算符

  • 算数运算符 + - * / ++ –
  • 赋值运算符 =
  • 关系运算符 > < >= <= == != instanceof
  • 逻辑运算符 && || !
  • 位运算符 & | ^ ~ >> <<
  • 条件运算符 ? :
  • 扩展运算符 += -= *= /=

3-7 包机制

  • 域名倒写
  • 防止命名冲突
  • package
  • import

JavaDoc

  • JDK 帮助文档
  • javadoc
    • author
    • Version
    • Sinc

3-8 流程控制

  • 顺序结构 (程序默认结构,自伤而下的执行)

  • Scanner (用户交互 System.in)

  • 分支结构

    • if单选择结构
    • if-else 双选择结构
    • if-else -else 多选择结构
    • switch jdk支持了String类型 case穿透现象 default
  • 循环结构

    • while 尽量避免死循环
    • do…while
    • for for(int i = 0; i < 100;i++)
    • for-each
  • break & continue

    • break : 跳出循环
    • continue : 终止当次循环
    • 带标签continue
    • return : 结束方法的运行

3-9 方法

  • 方法的定义
    • 修饰符、返回值 方法名 (参数名) {return 返回值};
  • 方法调用
    • 类名.方法
    • 对象,方法
  • 方法重载
    • 名字相同,参数列表不同
  • 命令行传参
    • 给main方法传递参数
  • 可变长参数
    • 必须放在最后一个参数
  • 递归 -----> 自己调用自己,给自己一个出口 (面试常温)

3-10 数组

  • 数组的定义
    • int[5]
    • {1,2,3,4,5}
    • 必须是同一个类型
  • 数组的使用
    • 通过下标拿到值
    • ArrayIndexOutOfBounds
    • 增强for循环遍历
  • 二维数组
    • int[[][]
  • Arrays 工具类
  • 排序算法
    • 冒泡排序
    • 选择排序
    • 插入排序
    • 快速排序
    • 归并排序
    • 希尔排序
    • 堆排序
    • 基数排序

3-11 面向对象

  • 什么是面向对象

  • 类与对象

    • 类与对象的抽象:模板Class
    • 对象是类的具体
  • 构造方法

    • 构造的重载 【默认的午餐构造】
    • 如果手动定义了有参构造就必须手动再加一个无参构造
    • 单例模式,需要构造器私有
  • new 对象

    • 栈存放引用
    • 堆存在具体的对象
  • 封装

    • get 、set、 属性私有
  • 继承

    • extends
    • Object
    • 子类拥有父类的全部特性
    • 方法重写
    • this
    • super
    • Java是单继承,只能继承一个父类
  • 多态

    • 父类的引用指向子类的对象 Person person = new Student();
    • instanceof 关键,如果匹配,可以进行类型之间的转换
  • 修饰符

    • public
    • protected
    • private
    • static
    • abstract
    • final
  • 接口

    • interface 代表约束只能定义方法名
    • 子类实现接口,必须重写其中的方法
    • 只有一个方法的接口叫做函数式接口,可以使用lambda表达式简化
    • 接口比抽象类更更抽象
    • 一个类可以实现多个接口
  • 内部类

    • 局部内部类
    • 静态内部类
    • 匿名内部类(重点)

3-12 异常

  • Throwable

    • Execption
      • 运行时异常
        • 1/0
        • ClassNotFound
        • NullPoint
        • UnKownType
        • 下标越界异常
      • 检查型异常
    • Error
      • AWT 错误
      • JVM 错误
        • StackOverFlow 栈溢出
        • OutOfMemory 内存溢出
  • 五个关键字

    • try{}
    • catch() {} 先小后大
    • finally{}
    • throw 手动抛出异常
    • throws 方法抛出异常
  • 自定义异常

    • 继承Exception类即可

四、高级语法

4-1 常用类

  • Object类
    • hashcode()
    • toString()
    • clone()
    • getClass()
    • notify()
    • wait()
    • equals()
  • Math类
    • 常见的数学运算
  • Random类
    • 生成随机数 UUID
  • File类
    • 创建文件
    • 查看文件
    • 修改文件
    • 删除文件
  • Date类
    • Date
    • SimpleDateFormat
      • yy-MM-dd HH:mm:ss
    • Calendar
      • 建议使用它
  • 包装类
    • 自动装箱和拆箱
  • String类
    • 不可变性 final
  • StringBuffer
    • 可变长 final 操作了较少
    • append() 多线程数据量比较大 效率低 安全
  • StringBuilder
    • 可变长 单线程数据量比较大 效率高,不安全

synchronized的实现原理:

①收到新的锁请求时首先自旋,如果通过自旋也没有获取锁资源,被放入ContentionList(该做法对于已经进入队列的线程是不公平的,体现了synchronized的不公平性)。
②为了防止ContentionList尾部的元素被大量线程进行CAS访问影响性能,Owner线程会在是释放锁时将ContentionList的部分线程移动到EntryList并指定某个线程(一般是最先进入的)为OnDeck线程。Owner并没有将锁直接传递给OnDeck线程而是把锁竞争的权利交给他,该行为叫做竞争切换,牺牲了公平性但提高了性能。
③获取到锁的OnDeck线程会变为Owner线程,未获取到的仍停留在EntryList中。
④Owner线程在被wait阻塞后会进入WaitSet,直到某个时刻被唤醒再次进入EntryList。
⑤ContentionList、EntryList、WaitSet中的线程均为阻塞状态。
⑥当Owner线程执行完毕后会释放锁资源并变为!Owner状态。

  • String str = “a” + 1 + 2
  • String str = ‘a’ + 1 + 2

4-2 集合框架

  • Collection
    • List 有序可以重复
      • ArrayList
        • add 添加
        • remove 删除
        • contains
        • size 大小
      • LinkedList
        • getFirst()
        • getLast()
        • removeFirst()
        • addFirst()
    • Set 无序不可重复
      • HashSet
      • TreeSet
  • Map
    • HashMap
      • JDK1.7 数组+链表
      • JDK1.8 数组+链表+红黑树
    • TreeMap
  • Collections工具类
  • 泛型<> 约束,避免类型转换之间的问题

4-3 IO流

  • 字节流
    • 输出:OutputStream
    • 输入:InpStream
  • 字符流
    • Reader 读
    • Writer 写
  • 节点流
    • CharArrayReader,Writer,inputstream,outputstream
    • StringReader,Writer
    • pipe(管道流)
  • 处理流
    • buffer
      • bufferInputStream
      • bufferOutputStream
      • bufferReader
      • bufferWriter
    • data
      • DataInputStream
      • DataOutputStream
    • 转换流
      • InputstreamReader
      • OuterstreamWriter
    • Filter
      • FilterInputStream
      • FilterOutputStream
      • FilterReader
      • FilterWriter
    • print
      • PrintWriter
      • PringStream

4-4 多线程

  • 进程 和 线程

  • run() ,Start()

①start方法用于启动线程,真正实现了多线程,调用了start方法后,会在后台创建一个新的线程来执行,不需要等待run方法执行完毕就可以继续执行其他代码。调用start方法时,该线程处于就绪状态,并没有开始运行。
②run方法也叫做线程体,包含了要执行的线程的逻辑代码,在调用run方法并没有创建新的线程,而是直接运行run方法中的代码。

  • 线程创建的方式

    • Thread
      • start() 本地方法:java无权调用,交给底层
    • Runnable
      • 函数式接口 lambda表达式
    • Callable
      • 可以有返回值
  • 静态地理

    • new Thread(Runnable).start();
  • Lambda表达式

    • 属于函数式编程
    • 避免内部类定义过多
  • 线程的状态

    • 新键状态
    • 就绪
    • 运行
    • 阻塞
    • 死亡
  • 常用的方法

    • sleep
    • join
    • yield
    • isLive
    • start
    • setPriority
    • interrput

①wait是Object类的方法,调用wait方法的线程会进入WAITING状态,只有等待其他线程的通知或被中断后才会解除阻塞,调用wait方法会释放锁资源。
②sleep是Thread类的方法,调用sleep方法会导致当前线程进入休眠状态,与wait不同的是该方法不会释放锁资源,进入的是TIMED-WAITING状态。
③yiled方法会使当前线程让出CPU时间片给优先级相同或更高的线程,回到RUNNABLE状态,与其他线程一起重新竞争CPU时间片。
④join方法用于等待其他线程运行终止,如果当前线程调用了另一个线程的join方法,则当前线程进入阻塞状态,当另一个线程结束时当前线程才能从阻塞状态转为就绪态,等待获取CPU时间片。底层使用的是wait,也会释放锁。

  • 线程同步

    lock > 同步代码块 > 同步方法


    • 多个对象操作同一个资源,并发
    • 队列+锁
    • Synchronized
      • 同步方法---->弊端锁太多
      • 同步代码块(常用)
      • 第一个线程拿到锁,后面就要排队了,知道这个人释放锁,后面拿到锁才可以进入
      • 死锁:两个人都抱着对方的锁
        • 互斥
        • 请求与保持
        • 不剥夺条件
        • 循环等待条件
    • Lock —> 优先级最高
      • ReentrantLock
        • lock
        • unlock
        • trylock
  • 线程通信

    • 缓冲区:消息队列
    • 标志位:红绿灯
    • Object:
      • wait() 等待
      • notifyAll() 唤醒
  • 线程池(POOL)

    • 池化技术
    • 池的大小
    • 最大连接数
    • 保持时间

4-5 注解和反射

  • 注解
    • 元注解
    • 内置注解
    • 自定义注解
    • 反射读取注解
  • 反射
    • Class
      • newInstance
    • 类加载机制
    • Method
      • invoke(user,“simon”)
      • 存在重载,也需要写参数的类型
    • Filed
      • set(user,“simon”)
    • Construct
      • newInstance();
      • 获取的时候需要没传递参数的class类型
    • 破坏私有关键字
      • setAccessible(true)
    • 性能分析
      • 正常 > 检测关闭的反射 > 默认的反射
  • 单例模式
  • Stream
  • ForkJoin 效率比

本问根据结合狂神说Java结合JavaSE总结的MarkDown笔记,仅供参考学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值