疯狂Java讲义笔记汇总

简介: 目录• 一、基础类型• 二、流程控制与数组• 三、面向对象• 四、基础类库• 五、集合• 六、泛型• 七、异常• 八、数据库• 九、注释• 十、输入输出• 十一、网络• 十二、类加载机制• 十三、多线程

目录

  • 一、基础类型
  • 二、流程控制与数组
  • 三、面向对象
  • 四、基础类库
  • 五、集合
  • 六、泛型
  • 七、异常
  • 八、数据库
  • 九、注释
  • 十、输入输出
  • 十一、网络
  • 十二、类加载机制
  • 十三、多线程


面向对象三大特性:封装、继承、多态

一、基础类型

  • char, int, short, long, byte, float, double, boolean
  • 基本类型的类型转换(自动与强制、补码,反码与原码)
  • 逻辑运算符(不短路与&,和&&; | 和|| 两个的只执行最少比较,单个的都比较)
  • 运算符的优先级

二、流程控制与数组

  • if, while, for
  • break, continue, return
  • 数组在内存中,初始化
  • java8增强工具类:Arrays

三、面向对象

  • 类和对象;方法(值传递,基础·类型传递值到不同方法栈区,对象类型传递引用值,引用自内存堆的对象)
  • 成员变量、局部变量的初始化和内存中的运行机制;
  • 隐藏与封装:private、default、protected、public
  • 构造器
  • 继承:单继承
  • 多态:编译时类型、运行时类型
  • instanceof前一个需要和后一个类有关系,否则编译错误。比如String instanceof Math,无法通过编译;
  • 继承与组合:开销无差别,继承is-a;组合has-a
  • final、abstract、接口与抽象类
  • 内部类(非静态内部类、静态内部类)
  • Lambda表达式
  • 枚举类
  • 对象与垃圾回收可达、可恢复、不可达System.gc(); Runtime.getRuntime().gc();finalize方法软、弱、虚引用

四、基础类库

  • Object,Java8增强Objects(大多是空指针安全的)
  • String、StringBuffer(线程安全,每个方法加了synchronized 关键字,和StringBuidler同继承自AbstractStringBuilder方法)、StringBuilder
  • Math库
  • Random、ThreadLocalRandom(Java7新增用于并发线程安全)
  • BigDecimal(double类型容易发生精度丢失:4.015*100=401.499999999994)
  • Date(不推荐)、Canlendar、Java8新增java.time包
  • 正则表达式:\d \D \s \S \w \W;[]枚举 -范围 ^否 &&与 ;^开头 $结尾 \b边界 \B \A输入的开头 \G前一个匹配的结构 \Z输入的结尾,仅用于最后的结束符 \z输入的结尾;贪婪模式(匹配最多,默认)、勉强模式(匹配最少,?)、占有模式Pattern p = Pattern.compile("a*b");Mathcer m = p.matcher("aaaaab");boolean b = m.matches(); //返回true
  • SimpleDateFormat、Java8新增DateTimeFormatter

五、集合

Set:无序,下面实现类都是非线程安全的

  • HashSet:非同步、元素可以是null
  • LinkedHashSet:以插入顺序保存,遍历效率高
  • TreeSet:排序,红黑树排序
  • EnumSet:有序,以位向量存储,紧凑高效,占用内存小,对于批量操作非常快;不允许插入null

List:有序、可重复

  • ArrayList:线程不安全的,可以通过Collections工具类变成线程安全的;数组存储
  • Vector:线程安全,不过很老了,不推荐使用
  • LinkedList:也实现了Deque接口,可以作为双端队列或者栈;链表存储

Queue队列

  • PriorityQueue:按照元素大小重新排序
  • Deque(类似于双端队列,也可以作为栈的实现),ArrayDeque

Map

  • HashMap:线程不安全;允许放入null作为key或value;
  • Hashtable:古老,类似于Vector,不推荐使用,线程安全,不允许放入null;Properties是它的子类
  • LinkedHashMap
  • TreeMap,SortedMap
  • WeakHashMap

Hash的知识点:

  • 容量(capacity,默认是10)、初始化容量(可以通过构造器传入)
  • 尺寸(当前hash表中记录的数量)
  • 负载因子,一般是0.75;超过时会发生rehashing,比较消耗

Collections:提供的集合工具类,操纵List、Set、Map

  • 排序、查找、替换
  • 同步控制List list = Collections.synchronizedList(new ArrayList()),可以获得线程安全的ArrayList

六、泛型

编译时不检查类型的异常,所以需要泛型

  • 没有泛型类:Collections instanceof java.util.ArrayLsit<String>()这个是错误的
  • 类型通配符
  • 类型上限与下限,当从List<string>变成List时,发生了类型擦除,变成了上限Object

七、异常

  • finally
  • throw, throws,try catch
  • 不要过度使用异常
  • 不要使用过于庞大的try块
  • 避免使用Catch All语句
  • 不要忽略捕获到的异常

八、数据库

Class.forName(“com.mysql.jdbc.Driver”);

try{

Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/select","root","xxxx");

Statement stat = conn.createStatement();

ResultSet rs = stat.execute("sql语句");

while(rs.hasnext){sysout(rs.getXX)}

stat.executeUpdate("updateSql语句");

conn.commit();

}

  • 连接池(DBCP数据源、C3P0数据源)

九、注释

  • @override,@Deprecated, @SuppressWarnings
  • @Retention,@Target, @Document
  • 自定义注释(public @interface Test {}) 用法:@Test
  • 只加注解是没有用的,结合反射使用 method.isAnnotationPresent方法来做处理

十、输入输出

  • File:不能访问文件本身,需要使用输入/输出流
  • 字节流(8位字节,Inputstream、OutputStrem)、字符流(16位字符,Reader、Writer)
  • 转换流(只提供了从字节流转换为字符流)
  • 序列化(类实现了Serializable,所有的成员变量也都需要是可序列化的),通过transient指定序列化时可以无需理会(只能用于修饰实例变量)
  • NIO,从java1.4开始,放在java.nio包下;两个核心对象Channel、Buffer
  • NIO.2 Path、Paths、和Files核心API、FileVisitor

十一、网络

  • InetAddress代表ip地址
  • URLDecoder,URLEncoder
  • ......太多了

十二、类加载机制

  • 加载过程加载:将类的class文件读入内存,并为之创建一个java.lang.Class对象连接:验证、准备、解析初始化:虚拟机对类进行初始化
  • 类加载器根类加载器 bootstrap扩展类加载器 extension系统类加载器 system
  • 反射(由于对象存在编译时类型和运行时类型,程序需要在运行时发现对象和类的真实信息)获得Class对象:forName获取构造器 getConstructor方法getMthod, method.invoke();获取成员变量getField获取标注getAnnotation...等
  • 使用反射生成JDK动态代理

十三、多线程

一、创建线程三种方式

继承Thread、实现Runnable、Callable接口

二、线程的生命周期

新建和就绪、运行和阻塞、死亡

三、控制线程

join、后台进程Daemon、睡眠Sleep、让步yield

  • synchronized关键字可以修饰方法、代码块,但是不能修饰构造器、成员变量等synchronized修饰的同步方法,因为该类的默认实例是this,就是同步监视器,所以可以直接调用Object的wati(), notify(),notifyAll()方法;synchronized修饰的是同步代码块,同步监视器就是synchronized括号后的对象,所以必须使用该队现改对象调用这三个方法。
  • java8提供了新型的StampedLock类,大多数场景中它可以替代传统的ReentrantReadWriteLock
  • ReentrantReadWriteLock为读写操作提供了三种锁模式:Writing、ReadingOptimistic、Reading
  • 常用的是ReentrantLock(可重入锁)Private final ReentrantLock lock = new ReentrantLock();public void m(){ lock.lock(); try{ // 需要保障线程安全的代码} finally{lock.unlock();}}如果是用Lock,则使用Condition将wait,notify,nitifyAll分成不同对象private final Lock lock = new ReentrantLock();privat final Condition cond = lock.newCondition();lock.lock();cond.await();\ cond.signalAll();
  • 使用阻塞队列(BlockingQueue)控制线程通信

线程组 ThreadGroup

线程池:从java5开始,提供了Executor工厂类

线程相关类:ThreadLocal

产生死锁的原因主要是:

(1) 因为系统资源不足。

(2) 进程运行推进的顺序不合适。

(3) 资源分配不当等。

产生死锁的四个必要条件:

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

相关文章
|
21天前
|
设计模式 Java
Java基础—笔记—多态、final、抽象类、接口篇
该文介绍了编程中的多态、final和抽象类、接口相关概念。多态允许子类重写父类方法,通过父类引用调用子类方法,实现解耦和提高代码灵活性,但也可能导致无法使用子类特有功能,需通过强制类型转换解决。final用于修饰不可变的类、方法或变量,防止继承、重写和多次赋值。抽象类是一种包含抽象方法的类,用于强制子类重写特定方法,实现多态,适用于模板方法设计模式,解决代码重复问题。
17 0
|
21天前
|
Java
Java基础—笔记—static篇
`static`关键字用于声明静态变量和方法,在类加载时初始化,只有一份共享内存。静态变量可通过类名或对象访问,但推荐使用类名。静态方法无`this`,不能访问实例成员,常用于工具类。静态代码块在类加载时执行一次,用于初始化静态成员。
10 0
|
21天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
15 0
|
2月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
3月前
|
监控 负载均衡 Dubbo
|
21天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
10 0
|
2月前
|
Java
Java8 Stream流 使用笔记
Java8 Stream流 使用笔记
27 1
|
2月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--快速排序
数据结构与算法(Java篇)笔记--快速排序
|
2月前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法(Java篇)笔记--归并排序
数据结构与算法(Java篇)笔记--归并排序
|
2月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--插入排序
数据结构与算法(Java篇)笔记--插入排序