疯狂Java讲义笔记汇总(疯狂java讲义和java从入门到精通)
ztj100 2024-11-06 13:19 11 浏览 0 评论
目录
- 一、基础类型
- 二、流程控制与数组
- 三、面向对象
- 四、基础类库
- 五、集合
- 六、泛型
- 七、异常
- 八、数据库
- 九、注释
- 十、输入输出
- 十一、网络
- 十二、类加载机制
- 十三、多线程
面向对象三大特性:封装、继承、多态
一、基础类型
- 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) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
相关推荐
- Vue 技术栈(全家桶)(vue technology)
-
Vue技术栈(全家桶)尚硅谷前端研究院第1章:Vue核心Vue简介官网英文官网:https://vuejs.org/中文官网:https://cn.vuejs.org/...
- vue 基础- nextTick 的使用场景(vue的nexttick这个方法有什么用)
-
前言《vue基础》系列是再次回炉vue记的笔记,除了官网那部分知识点外,还会加入自己的一些理解。(里面会有部分和官网相同的文案,有经验的同学择感兴趣的阅读)在开发时,是不是遇到过这样的场景,响应...
- vue3 组件初始化流程(vue组件初始化顺序)
-
学习完成响应式系统后,咋们来看看vue3组件的初始化流程既然是看vue组件的初始化流程,咋们先来创建基本的代码,跑跑流程(在app.vue中写入以下内容,来跑流程)...
- vue3优雅的设置element-plus的table自动滚动到底部
-
场景我是需要在table最后添加一行数据,然后把滚动条滚动到最后。查网上的解决方案都是读取html结构,暴力的去获取,虽能解决问题,但是不喜欢这种打补丁的解决方案,我想着官方应该有相关的定义,于是就去...
- Vue3为什么推荐使用ref而不是reactive
-
为什么推荐使用ref而不是reactivereactive本身具有很大局限性导致使用过程需要额外注意,如果忽视这些问题将对开发造成不小的麻烦;ref更像是vue2时代optionapi的data的替...
- 9、echarts 在 vue 中怎么引用?(必会)
-
首先我们初始化一个vue项目,执行vueinitwebpackechart,接着我们进入初始化的项目下。安装echarts,npminstallecharts-S//或...
- 无所不能,将 Vue 渲染到嵌入式液晶屏
-
该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言...
- vue-element-admin 增删改查(五)(vue-element-admin怎么用)
-
此篇幅比较长,涉及到的小知识点也比较多,一定要耐心看完,记住学东西没有耐心可不行!!!一、添加和修改注:添加和编辑用到了同一个组件,也就是此篇文章你能学会如何封装组件及引用组件;第二能学会async和...
- 最全的 Vue 面试题+详解答案(vue面试题知识点大全)
-
前言本文整理了...
- 基于 vue3.0 桌面端朋友圈/登录验证+60s倒计时
-
今天给大家分享的是Vue3聊天实例中的朋友圈的实现及登录验证和倒计时操作。先上效果图这个是最新开发的vue3.x网页端聊天项目中的朋友圈模块。用到了ElementPlus...
- 不来看看这些 VUE 的生命周期钩子函数?| 原力计划
-
作者|huangfuyk责编|王晓曼出品|CSDN博客VUE的生命周期钩子函数:就是指在一个组件从创建到销毁的过程自动执行的函数,包含组件的变化。可以分为:创建、挂载、更新、销毁四个模块...
- Vue3.5正式上线,父传子props用法更丝滑简洁
-
前言Vue3.5在2024-09-03正式上线,目前在Vue官网显最新版本已经是Vue3.5,其中主要包含了几个小改动,我留意到日常最常用的改动就是props了,肯定是用Vue3的人必用的,所以针对性...
- Vue 3 生命周期完整指南(vue生命周期及使用)
-
Vue2和Vue3中的生命周期钩子的工作方式非常相似,我们仍然可以访问相同的钩子,也希望将它们能用于相同的场景。...
- 救命!这 10 个 Vue3 技巧藏太深了!性能翻倍 + 摸鱼神器全揭秘
-
前端打工人集合!是不是经常遇到这些崩溃瞬间:Vue3项目越写越卡,组件通信像走迷宫,复杂逻辑写得脑壳疼?别慌!作为在一线摸爬滚打多年的老前端,今天直接甩出10个超实用的Vue3实战技巧,手把...
- 怎么在 vue 中使用 form 清除校验状态?
-
在Vue中使用表单验证时,经常需要清除表单的校验状态。下面我将介绍一些方法来清除表单的校验状态。1.使用this.$refs...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Vue 技术栈(全家桶)(vue technology)
- vue 基础- nextTick 的使用场景(vue的nexttick这个方法有什么用)
- vue3 组件初始化流程(vue组件初始化顺序)
- vue3优雅的设置element-plus的table自动滚动到底部
- Vue3为什么推荐使用ref而不是reactive
- 9、echarts 在 vue 中怎么引用?(必会)
- 无所不能,将 Vue 渲染到嵌入式液晶屏
- vue-element-admin 增删改查(五)(vue-element-admin怎么用)
- 最全的 Vue 面试题+详解答案(vue面试题知识点大全)
- 基于 vue3.0 桌面端朋友圈/登录验证+60s倒计时
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- node卸载 (33)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- exceptionininitializererror (33)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)