JavaSE笔记详细整理

JavaSE笔记

文章目录

  • JavaSE笔记
    • 第一章 初识Java
      • 1.1 java发展史
      • 1.2 特点
      • 1.3 语言特性
      • 1.4 JDK、JRE、JVM三者关系
      • 1.5 Java加载与执行
      • 1.6 DOS基本命令
      • 1.7 常用快捷键
      • 1.8 Java环境搭建
      • 1.9 注释
    • 第二章 数据相关
      • 2.1 标识符与关键字
      • 2.2 变量
        • 2.2.1 字面量
        • 2.2.2 变量
      • 2.3 数据类型
        • 2.3.1 定义
        • 2.3.2 8种基本数据类型区别
        • 2.3.3 数据类型注意事项
        • 2.3.4 字符编码
        • 2.3.5 转义字符
      • 2.4 运算符
        • 2.4.1 算数运算符
        • 2.4.2 关系运算符
        • 2.4.3 逻辑运算符
        • 2.4.4 赋值运算符
        • 2.4.5 三目运算符
        • 2.4.6 移位运算符
        • 2.4.7 字符串拼接
        • 2.4.8 优先级
    • 第三章 控制语句
      • 3.1 键盘输入语句
      • 3.2 if语句
      • 3.3 switch语句
      • 3.4 for语句
      • 3.5 while语句
      • 3.6 do while语句
    • 第四章 方法
      • 4.1 语法
      • 4.2 方法的内存层面
      • 4.3 方法重载overload
      • 4.4 方法递归
    • 第五章 面向对象
      • 5.1 类
        • 5.1.1 类和对象的关系
        • 5.1.2 类的创建
        • 5.1.3 类的实例化(创建对象)
        • 5.1.4 (内存)运行过程
        • 5.1.5 构造方法
      • 5.2 封装
        • 5.2.1 什么是封装
        • 5.2.2 封装步骤
      • 5.3 继承
        • 5.3.1 继承机制
        • 5.3.2 继承特性
        • 5.3.3 方法覆盖(重写)
      • 5.4 多态
        • 5.4.1 什么是多态
        • 5.4.2 基础语法
        • 5.4.3 instanceof运算符
      • 5.5 this和super
      • 5.6 修饰符
        • 5.6.1 权限修饰符
        • 5.6.2 特征修饰符
          • static
          • final
          • abstract(抽象类)
          • interface(接口)
      • 5.7 Object类
        • 5.7.1 toString()
        • 5.7.2 equals()
        • 5.7.3 finalize
      • 5.8 包和import
        • 5.8.1 package
        • 5.8.2 import
        • 5.8.3 JDK常用包
      • 5.9 内部类
    • 第六章 数组
      • 6.1 数组简介
        • 6.1.1 数组扩容
      • 6.2 数组常用算法
        • 6.2.1 冒泡排序
        • 6.2.2 选择排序
        • 6.2.3 数组二分法查找
      • 6.4 Arrays工具类
        • 6.4.1 Arrays.length 数组长度
        • 6.4.2 Arrays.sort 数组排序(小到大)
        • 6.4.3 Arrays.binarySerch() 二分查找
        • 6.4.4 Arrays.toString() 数组的打印
        • 6.4.5 Arrays.fill() 数组的填充
        • 6.4.6 Arrays.equals() 判断两个数组大小是否相等
        • 6.4.7 Arrays.copyOf() 数组的拷贝
    • 第七章 常用类
      • 7.1 String
        • 7.1.1 String 特点
        • 7.1.2 String 常用方法
      • 7.2 StringBuffer 和 StringBuilder
      • 7.3 包装类
      • 7.4 日期类
        • 7.4.1 Date类
        • 7.4.2 SimpleDateFormat类
        • 7.4.3 Calendar类
      • 7.5 数字类
        • 7.5.1 Math类
        • 7.5.2 BigDecimal类
      • 7.6 Random
      • 7.7 枚举
        • 7.7.1 枚举常用方法
        • 7.7.2 枚举的高级使用
        • 7.7.3 枚举中的抽象类
        • 7.7.4 枚举的其他用法
    • 第八章 异常
      • 8.1 异常的分类
        • 8.1.1 什么是Throwable
        • 8.1.2 Exception及其子类
      • 8.2 异常的捕获
        • 8.2.1 try、catch 和 finally
        • 8.2.2 获取异常信息方法
      • 8.3 throw和throws
      • 8.4 自定义异常
    • 第九章 集合
      • 9.1 集合的结构
        • 9.1.1 集合概述
        • 9.1.2 集合继承关系
        • 9.1.3 集合和数组的区别
      • 9.2 Iterable和Collection
        • 9.2.1 Iterable接口
        • 9.2.2 Collection接口
      • 9.3 List
        • 9.3.1 ArrayList(数组)
        • 9.3.2 LinkedList(双向链表)
      • 9.4 Set
        • 9.4.1 哈希表、二叉树
        • 9.4.2 HashSet(Hash 表)
        • 9.4.3 TreeSet(二叉树)
        • 9.4.4 LinkHashSet(HashSet+LinkedHashMap)
        • 9.4.5 小结
      • 9.5 Map
        • 9.5.1 HashMap
        • 9.5.2 TreeMap
      • 9.6 Collections工具类
      • 9.7 泛型
        • 9.7.1 泛型的使用
        • 9.7.2 JDK8 泛型新特性
    • 第十章 IO流
      • 10.1 IO流概述
        • 10.1.1 InputStream 字节输入流
        • 10.1.2 OutputStream 字节输出流
        • 10.1.3 Reader 字符输入流
        • 10.1.4 Writer 字符输出流
      • 10.2 文件流
        • 10.2.1 FileInputStream(文件字节输入流)
        • 10.2.2 FileOutputStream(文件字节输出流)
        • 10.2.3 FileReader(文件字符输入流)
        • 10.2.3 FileReader(文件字符输入流)
      • 10.3 缓冲流
        • 10.3.1 字节缓冲流
        • 10.3.2 字符缓冲流
      • 10.4 转换流
        • 10.4.1 InputStreamReader
        • 10.4.2 OutputStreamWriter
      • 10.5 打印流
        • 10.5.1 完成屏幕打印的重定向
        • 10.5.2 接受屏幕输入
      • 10.6 对象流
        • 10.6.1 序列化
        • 10.6.2 反序列化
        • 10.6.3 serialVersionUID
      • 10.7 File 类
        • 10.7.1 File 类常用方法
    • 第十一章 多线程
      • 11.1 多线程的基本概念
        • 11.1.1 进程简介
        • 11.1.2 线程简介
        • 11.1.3 并行与并发
        • 11.1.4 java程序的执行流程
      • 11.2 线程的生命周期
      • 11.3 两种线程实现方式
        • 11.3.1 继承 Thread 类
        • 11.3.2 实现 Runnable 接口
        • 11.3.3 两种方式比较
      • 11.4 线程调度与控制
        • 11.4.1 线程的优先级
        • 11.4.2 Thread.sleep 线程睡眠
          • sleep与wait区别
        • 11.4.3 Thread.yield 线程让步
        • 11.4.4 Thread.join 线程插入
        • 11.4.5 Thread.interrupt 线程中断
        • 11.4.6 推荐的停止线程方式
      • 11.5 Thread类常用方法
      • 11.6 线程锁
        • 11.6.1 乐观锁
        • 11.6.2 悲观锁
        • 11.6.3 自旋锁
        • 11.6.4 Synchronized 同步锁
      • 11.7 守护线程
    • 第十二章 反射
      • 12.1 反射的基本概念
      • 12.2 反射的使用
        • 12.2.1 反射使用场合
        • 12.2.2 反射API
        • 12.2.3 使用步骤
        • 12.2.4 获取class对象的3种方法
        • 12.2.5 创建对象的两种方法
      • 12.3 反射的缺点
    • 第十三章 注解

第一章 初识Java

1.1 java发展史

? 1990 年末,Sun 公司准备为下一代智能家电(电视机,微波炉,电话)编写一个通用的控制系统。该团队最初考虑使用C++语言,很多成员包括Sun 公司的首席科学家Bill Joy,发现C++语言在某些方面复杂,系统资源极其有限,缺少垃圾回收系统等,于是Bill Joy 决定开发一种新的语言:Oak。

? 1992 年夏天,Green 计划已经完成新平台的部分功能,包括Green 操作系统,Oak 的程序设计语言、类库等。同年11 月,Green 计划被转成“FirstPerson 有限公司”,一个Sun 公司的全资子公司。该团队致力于创建一种高度互动的设备。

? 1994 年夏天,互联网和浏览器的出现不仅给广大互联网的用户带来了福音,也给Oak 语言带来了新的生机。James Gosling(Java 之父)立即意识到,这是一个机会,于是对Oak 进行了小规模的改造。

? 1994 年秋,小组中的Naughton 和Jonathan payne 完成了第一个Java 语言的网页浏览器:WebRunner。Sun 公司实验室主任Bert Sutherland 和技术总监Eric Schmidt 观看了该网页的演示并给予了高度的评价。当时Oak 这个商标已经被注册了,于是将Oak 改名为Java。

? 1995 年初,Sun 公司发布Java 语言,Sun 公司直接把Java 放到互联网上,免费给大家使用,甚至连源代码也不保密,也放在互联网公开。几个月后,Java 成了互联网上最热门的宝贝。各种各样的小程序层出不穷,Java 终于扬眉吐气,成为了一种广为人知的编程语言。

? 1996 年底,Flash 问世了,这是一种更加简单的动画设计软件:使用Flash 几乎无须任何编程语言知识,就可以做出丰富多彩的动画。Flash 逐渐蚕食了Java 在网页上的应用。

? 1997 年2 月18 日,Sun 公司发布了JDK1.1,增加了即时编译器JIT。

? 1995 年Java 诞生到1998 年底,Java 语言虽然成为了互联网上广泛使用的编程语言,但它没有找到一个准确的定位。

? 1998 年12 月,Sun 发布了Java 历史上最重要的JDK 版本:JDK1.2。并将Java 分成了J2EE(提供了企业应用开发相关的完整解决方案)、J2SE(整个Java 技术的核心和基础)、J2ME(主要用于控制移动设备和信息家电等有限存储的设备)三个版本。

? 2002 年2 月,Sun 发布了JDK 历史上最为成熟的版本,JDK1.4。

? 2004 年10 月,Sun 发布了万众期待的JDK1.5。JDK1.5 增加了诸如泛型、增强的for 语句、可变数量的形参、注释、自动拆箱和装箱等。

? 2005 年,Java 诞生十周年,J2SE/J2EE/J2ME 分别改名为:JavaSE/JavaEE/JavaME。2006 年12 月,Sun 发布了JDK1.6。

? 2009 年4 月20 日,Oracle 甲骨文公司宣布将以每股9.5 美元的价格收购Sun。Oracle 通过收购Sun 获得了两项资产:Java 和Solaris。

? 2007 年11 月,Google 宣布推出一款基于Linux 平台的开源手机操作系统:Android。Android使用Java 语言来开发应用程序。Android 平台的流行,让Java 语言获得了在客户端程序上大展拳脚的机会。

? 2011 年7 月28 日,Oracle 发布了Java SE7,这次版本升级耗时将近5 年时间。引入二进制整数、支持字符串的switch 语句等。

? 2014 年3 月18 日,Oracle 发布了Java SE 8。2017 年7 月,Oracle 发布了JavaSE 9。

? 2018 年3 月20 日,Oracle 发布了正式版JavaSE 10。同一年9 月25 日发布了Java11。

? 2019 年3 月19 日,Oracle 发布了Java12。

? 2019 年 9 月,Oracle 发布了Java SE 13

? 2020 年 3 月,Oracle 发布了Java SE 14

1.2 特点

Java分别为三部分:JavaSE、JavaEE、JavaME。三者关系如下图:

JavaSE笔记详细整理

Java程序在计算机的结构:

JavaSE笔记详细整理

JDK、JRE、JVM 之间存在这样的包含关系:JDK 包含JRE,JRE又包含JVM。换句话说,只要安装了JDK,JRE 和JVM 则自动就安装了。

1.5 Java加载与执行

JavaSE笔记详细整理

十进制转为二进制:

JavaSE笔记详细整理

2.3.3 数据类型注意事项

整数型:

  • java中整数会自动视为为int型,数值超过-2147483678~2147483647,后面要加L
  • 大容量数据类型赋值给小容量前,要强制类型转换,否则会损失精度编译报错
    • long a = 100L;
    • int b = (int)a;
  • byte型和short型在取值范围内,字面量可以直接赋值不用强制转换
  • 多种数据类型混合运算时,结果取最大容量的数据类型

浮点型:

  • 任意一个浮点型数据都比整数型容量空间大 float容量 > long容量
  • 任意一个浮点型数据都被默认当成double型数据处理

布尔型:

  • java中boolean类型只能有两个值,只能赋值为true和false(和C、C++不同)

2.3.4 字符编码

常见的字符编码有:

ASCII(’a’是97,’A’是65,’0’是48)

ISO-8859-1

GB2312

GBK

GB18030

Big5

unicode(utf8 utf16 utf32)

Java中大部分团队使用的编码为utf-8

2.3.5 转义字符

常用转义字符:

制表符:

换行符:

输出符号:

转义unicode码:

2.4 运算符

2.4.1 算数运算符

? 加减乘除:

? 取余:

? 自加1自减1:

2.4.2 关系运算符

? 大于:

? 大于或等于:

? 小于:

? 小于或等于:

? 等于:

? 不等于:

规则:所有关系运算符的运算结果都是布尔类型,不是true就是false;“==”和“=”注意区分,一个是判断,一个是赋值

2.4.3 逻辑运算符

? 且:

? 或:

? 非:

? 短路与:

? 短路或:

规则:逻辑运算符两边必须是布尔类型

短路:当使用短路&&时,左边表达式为false时,右边表达式不执行;短路或||同理

JavaSE笔记详细整理

2.4.4 赋值运算符

?

规则:使用扩展赋值运算符不会改变运算结果类型,但是超数值范围用+=会损失精度

来源:高同学在Skiing

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月25日
下一篇 2021年1月25日

相关推荐