Java口袋指南


  • 一、语言

  • 1.命名

  • 类名:大驼峰

  • 泛型:E标识集合元素

  • 方法名:小驼峰

  • 变量名:小写

  • 包名:小写或下划线

  • 2.词法元素/token

  • 字符串压缩优化:-XX:-CompactStrings

  • 操作符

  • ~:按位取反

  • instanceof:类型对比

  • 3.基本类型

  • 拆箱:引用变量名.intValue()

  • 4.引用类型

  • 举例:注解、数组、类、枚举、接口

  • 默认值

  • 实例变量默认为null

  • 本地变量(方法内部)无默认值,直接检查会编译错误☆

  • 对比相等

  • 相等操作符==和!=比较对象的内存地址,不比较内容

  • equals()方法默认使用==对比,也可覆盖重写比较值是否相等(如String)

  • 拷贝

  • 拷贝引用:Object o2 = o1

  • 克隆对象

  • 实现Cloneable接口,调用clone()方法

  • 包括浅克隆(对象内部指向的引用对象不生成副本)和深克隆(需要手动定义)

  • 5.面向对象编程

  • 变长参数列表

  • 如:String ... names(实例:printf("%s",String...str))

  • 编译时被作为数组,也可通过增强for循环迭代

  • 手动定义注解

  • 包含:标记注解、单值注解、多值注解

  • 定义:public @interface

  • 取值:this.getAnnotation(Feedback.class)

  • 函数式接口

  • 又称单参数方法SAM接口,仅定义一个抽象方法的接口

  • 可以加@FuncationalInterface标识,但允许有多个默认方法default public xxx

  • 创建实例:lambda表达式、方法引用、构造器引用

  • 6.语句和代码块

  • 控制转移语句

  • 包括:break/continue/return

  • 添加标签的break语句,可以break+指定标签(通常放在循环前+:)

  • synchronized语句:限制只能有一个线程对代码区进行访问

  • 断言语句

  • 是Boolean表达式

  • 可以包含错误码,即assert express==true:"error express"+express

  • 7.异常处理

  • 层级结构-Throwable-(Exception,Error)

  • 分类

  • 检查型异常Exception

  • 编译期通过编译器检查

  • 可以进行捕获或抛出throws(方法体throw new IOException())

  • 如:SQLException/InterruptedException/NoSuchMethodException

  • 非检查型异常RuntimeException

  • 运行时触发

  • 如:DateTimeException/IllegalArgumentException/IndexOutOfBound

  • 错误Error

  • 如:OutOfMemoryError/StackOverflowError/VirtualMachineError

  • 异常和错误均可以进行捕获try catch或抛出throw

  • 语句和关键字

  • 抛出异常时,可以使用throw new Exception()语句

  • 捕获

  • try..catch:优先级从前往后,先写具体异常,最后写通用异常

  • try...finally:用于释放资源始终执行,遇到异常则选择抛出

  • try-with-resources

  • 实现AutoClosable接口的资源在不使用时关闭

  • 如:try(fileWriter)

  • 异常处理过程

  • 定义自己的异常类

  • 定义各种类型(检查型、非检查型、错误),均需要进行继承各自的类

  • 包含无参构造器及有参构造器(包括异常消息和id)

  • 打印异常信息

  • getMessage():字符串返回异常详细信息

  • toString():带类名的异常详细信息

  • printStackTrace():带类名和栈跟踪信息的异常描述信息

  • 8.修饰符

  • 分类

  • 定义了类、接口、构造器、方法和数据成员的访问权限

  • 访问修饰符

  • default(默认,包私有)、private、protected(包外子类)、public(任意位置)

  • 非访问修饰符

  • abstract、final(与抽象互斥)、native(其他语言代码合并)

  • static、synchronized、transient(不被序列化的瞬态关键字)、volatile(线程最新值)

  • 修饰符的编码与打印

  • 分类:.getClass()得到Class或Member

  • 获取修饰符:.getModifier()

  • 对修饰符解码:Modifier.toString(xxx..getModifier())

  • 二、平台

  • 9.JAVA SE(平台标准版)

  • 语言工具库:java.lang(唯一默认导入的包)/util

  • 基础库:java.beans/io/nio/math/net/file/net/time

  • 集成库:java.sql/naming/jws

  • 其他

  • 远程方法调用库:rmi

  • 用户界面库:javax.print/javafx.beans

  • 安全库:security

  • 可扩展标记语言库:javax.xml

  • 10.开发的基础工具

  • 命令行工具

  • 编译器javac:源码转字节码

  • 解释器java:负责程序的执行

  • 打包器jar:可将指定文件打入jar包(打印包文件列表)

  • jar文件执行过程

  • javac编译并放入指定包(文件夹)

  • 包所在目录创建Manifest.txt文件,声明Main Class

  • 执行jar cmf manifest.txt hello.jar com/life,将文件内容加入清单文件METS-INF/MANIFEST.MF

  • java -jar hello.jar运行打包后的文件

  • 11.内存管理

  • 自动内存管理(GC)

  • 任务:分配内存、维护内存中对象的引用、恢复不再引用对象的内存

  • 目标:最大的暂停时间、吞吐量目标

  • 常见的垃圾收集器

  • Serial收集器:单线程串行执行程序运行与GC

  • Parallerl收集器

  • Parallel整理收集器

  • 并发标记清除CMS收集器

  • 垃圾优先G1收集器

  • 内存管理工具

  • jvisualvm:问题排查工具

  • jconsole:java管理扩展(JMX,Exention)监控工具

  • jstat:JVM统计监控工具

  • jmap:内存映射工具

  • jstack:栈跟踪工具

  • 其他:jinfo、jstatd、jmc、jcmd、jdb、jps

  • 命令行参数

  • -XX:+PrintGC(Details/Timestamp)

  • -XX:+Use(Serial/G1/Parallel)GC

  • -Xmx/Xmn/Xms:堆空间、新生代大小

  • 与GC交互

  • 显示调用GC(强制full GC)

  • System.gc()或Runtime.getRuntime().gc()

  • 覆盖终结方法finalize()

  • extends继承,try+finally,执行super.finalize()

  • 12.基本输入输出

  • 标准流in、out、err

  • System.in.read()

  • System.out.write()/print()

  • System.err.print()

  • 标准输入输出类

  • 层级结构

  • 文本:Reader/Writer

  • 二进制:InputStream/OutputStream

  • 实现类:Buffered/Data/File/Piped/Object(序列化)/Printer+xxx

  • 其他

  • Socket(ip,port).getInputStream()读写

  • 压缩和解压文件(G)ZipIn(Out)putStream

  • 13.新I/O(NIO 2.0)

  • Path接口

  • 用于操作文件和目录

  • 获取:Paths.get("\root\soft")

  • 功能:getName/getRoot/getParent/toUri……

  • Files类

  • 用于CRUD文件或目录

  • 变动:createDirectories/File/move/copy

  • 查询:isReadable/isExecutable/Writable/Hidden

  • 其他特性

  • PathMatcher函数式接口查找文件

  • FileVisitor接口递归访问目录树

  • WatchService实现目录监控

  • 14.并发(多线程)

  • 概述:线程允许使用多个处理器或核心,从而使得计算更高效☆

  • 创建(实现run方法,调用实例的start启动)

  • 继承/扩展Thread类

  • 实现Runnable接口

  • Thread.state枚举状态

  • 新建、可运行(就绪)、阻塞、等待(wait/join激活)、时间等待(休眠)、终止

  • 常用方法

  • Thread类

  • 普通方法:get优先级/状态,检查is中断/存活,中断、设置优先级

  • 静态方法:sleep/yield,返回线程数量、引用、中断状态

  • Object类

  • wait、notify、notifyAll

  • 同步

  • 概述:将synchronized关键字应用到代码块和方法上

  • 格式:同步锁synchronized(对象实例this){}、sychronized vod mthod(){}

  • 并发工具集(JUC)

  • executor执行器(线程池)

  • 接口:Executor,类:(Scheduled)ThreadPoolExecutor

  • 方法:newCached/Fixed/Schedule/SingleThreadExecutor(int n)

  • 使用:.execute(t1),.shutdown()

  • 并发集合

  • ConcurrentMap/HashMap/SkipListMap/Set

  • COW(写时复制副本):CopyOnWriteArrayList/Set

  • (Priority)BlockingQueue/Deque-阻塞队列

  • 同步器synchronizer

  • Semaphore/CountDwonLatch/CyclicBarrier/Exchanger

  • 时间工具类TimeUint常量

  • tryLock(15L,TimeUnitSECONDS)=15秒,通知方法如何计算时间参数

  • 15.集合框架

  • Collection接口:List/Map/Queue/Set

  • 方法:put/add/get/remove,contains/Key/Value

  • 工具类方法:addAll/max/min/disjoint/copy/rotate/swap/sort/fill/replaceAll

  • Comparator接口与List.of()工厂方法

  • 16.泛型框架

  • 17.脚本API

  • Script s = scriptEngineManager.getEngineExtention()

  • s.eval(指令或FileReader(文件))

  • 18.日期和时间API

  • 19.Lambda表达式

  • λE基础

  • 包含一个函数式接口FI,理想情况下有@FI注解

  • 方法与构造器引用:ArrayList<Integer>::new/String::length

  • 函数式接口

  • 特定的:FileFilter/Runnable/Callable/Compator

  • 通用的:Consumer/Predicate/Supplier

  • 20.JSHell

  • 21.模块系统

作者:​​哥们要飞​​​