ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

JavaSE学习心得记录

JavaSE学习心得记录 此文章仅是我个人在学习后的理解记录下来是为了以后观看多次记忆文章可能有问题及错误欢迎大家交流并指出1.面向对象三大特点1.1封装当我们将一些现实中的事物将他们的特点提取出来将他们抽象为一个类的时候我们可以在这个类中定义他的属性和一些方法。我们可以通过创建私有变量和成员方法来修改我们的属性值这样可以避免实例对象直接通过成员变量来修改值而是通过调用成员方法来修改属性值可以保护属性安全。创建私有成员变量对外暴露接口提高代码复用性保证数值安全。关键字private私有1.2继承在日常写代码的时候容易出现很多类有相同的变量及方法这个时候我们可以将这些相同部分的代码提取出来创建一个类当其他类需要这些属性或者方法时就可以通过继承这个类从而达到减少重复代码的问题。继承父类后的子类拥有父类所有非私有的属性和方法子类可以根据自己类的需要重写父类方法也可以重新编写一个方法。关键字this调用子类方法super调用父类方法1.3多态同一方法在不同的类中有不同的实现方式用课本上的话说就是“父类的引用指向子类对象”代码格式如Fu f new Zi()。在使用实例方法的过程中编译器会先检查父类Fu中有无此方法如果没有就会报错在有的情况下会检查有无被重写如果被重写就会调用子类里被重写过后的方法。多态在实际开发中会减少工作量和重复代码如 if-else。2.异常处理异常有一个总的体系 Throwable有两个分支 Error 和 ExceptionError 代表的是错误Exception 是指异常我们可以在编写代码的时候避免的问题。Exception 还有很多的分类如 IO 异常运行时异常类异常等等。我们在编写一段代码时不知道这段代码会不会出问题时我们可以将他们可能出现的异常类标记一下当运行时出现问题时可以帮我们快速定位错误的地方。一般我们有两种方式来抛出异常一种是声明式异常 throws另一种是捕获型异常 try-catch。捕获异常语法如下try{//编写可能会出现异常的代码}catch(异常类型 e){处理异常的代码//记录日志/打印异常信息/继续抛出异常}当可能出现多个错误时在catch后继续加catch即可在代码编写的时候异常处理比较重要可以帮助我们快速定位问题的所在减少寻找时间提高开发效率。3.泛型定义及使用当我们编写代码时碰到定义属性或者类的时候我们并不知道要传入的参数类型我们可以先用泛型符号代表类型当我们使用时传入哪个类型就把泛型文字当做什么类型但是只可以代替为同一种类型不能有多种类型。泛型方法定义的格式为修饰符 代表泛型的变量 返回值类型 方法名(参数){ }4.集合集合分为三种分别为SetListMapSet无序、不可重复的集合List有序可重复的集合Map具有映射关系的集合4.1List集合有几种分类常用的是ArrayList集合LinkedList集合Vector集合。ArrayList集合ArrayList内部是通过数组实现的它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔当数组大小不满足时需要增加存储能力就要将已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时需要对数组进行复制、移动、代价比较高ArrayList在内存不够时默认是扩展50% 1个。因此它适合随机查找和遍历不适合插入和删除。LinkedList集合LinkedList是用双向链表结构存储数据的很适合数据的动态插入和删除随机访问和遍历速度比较慢。另外他还提供了List接口中没有定义的方法专门用于操作表头和表尾元素可以当作堆栈、队列和双向队列使用。Vector集合Vector集合底层数据结构是数组实现的其操作和ArrayList一致查询快增删慢但是其内部是线程安全效率低。4.2Set常用集合有HashSet和TreeSetHashSet集合HashSet 是 Set 接口的典型实现大多数时候使用 Set 集合时都使用这个实现类。HashSet 按 Hash 算法来存储集合中的元素因此具有很好的存取和查找性能。HashSet 具有以下特点不能保证元素的排列顺序HashSet 不是线程安全的集合元素可以是 nullTreeSet集合TreeSet 是 SortedSet 接口的实现类TreeSet 可以确保集合元素处于排序状态。TreeSet 支持两种排序方法自然排序和定制排序。默认情况下TreeSet 采用自然排序。4.3.Map接口的常用实现有HashMapTreeMapHashMap集合HashMap是 Map 接口使用频率最高的实现类。HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作并允许使用 null 值和 null 键。与HashSet一样此类不保证映射的顺序特别是它不保证该顺序恒久不变。HashMap 判断两个 key 相等的标准是两个 key 通过 equals() 方法返回 truehashCode 值也相等。HashMap 判断两个 value相等的标准是两个 value 通过 equals() 方法返回 true。TreeMap集合TreeMap是用键来进行升序顺序来排序的。通过Comparable 或 Comparator来排序。5.多线程在这我们要先理解线程和进程的区别进程是程序的一次执行过程是系统运行程序的基本单位。程序是静态的进程是动态的。系统运行一个程序即是一个进程从创建、运行到消亡的过程。线程是比进程更小的运行单位是程序中单个顺序的流控制。一个进程中可以包含多个线程。简单来讲线程是一个独立的执行流是进程内部的一个独立执行单元相当于一个子程序。一个进程中的所有线程都在该进程的虚拟地址空间中使用该进程的全局变量和系统资源。操作系统给每个线程分配不同的CPU时间片在某一时刻CPU只执行一个时间片内的线程多个时间片中的相应线程在CPU内轮流执行。多线程应用使用场景有很多比如VNC同时共享屏幕给多个电脑迅雷开启多条线程一起下载QQ同时和多个人一起视频服务器同时处理多个客户端请求。在我们使用Java命令时会启动java虚拟机(JVM)等于启动了一个应用程序也就是启动了一个进程。该进程会自动启动一个 “主线程” 然后主线程去调用某个类的 main 方法一个应用程序有且只有一个主线程,程序员不能New主线程可以New子线程。JVM是多线程因为他至少启动了主线程和垃圾回收线程6.Lambda、函数式接口以及StreamLambda表达式的标准格式为(参数类型 参数名称) ‐ { 代码语句 }Lambda的前提使用Lambda必须具有接口且要求接口中有且仅有一个抽象方法无论是JDK内置的 Runnable 、 Comparator 接口还是自定义的接口只有当接口中的抽象方法存在且唯一时才可以使用Lambda。使用Lambda必须具有上下文推断也就是方法的参数或局部变量类型必须为Lambda对应的接口类型才能使用Lambda作为该接口的实例。函数式接口在Java中是指有且仅有一个抽象方法的接口。Stream流每当我们需要对集合中的元素进行操作的时候总是需要进行循环、循环、再循环Stream流可以帮忙减少循环次数提高代码执行效率。7.IO流流是一组有顺序的有起点和终点的字节集合是对数据传输的总称或抽象。IO流分类有两种分类方式流按照流向数据流向可以分为输入流和输出流。流按照处理数据类型的单位不同可以分为字节流和字符流。缓冲流原理在创建流对象时会创建一个内置的默认大小的缓冲区数组通过缓冲区读写减少系统IO次数从而提高读写的效率。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进