前言

这是举荐学java 系列的第三篇,这节的内容很多,对于小白来说,都是新概念,要熟练掌握的话,须要大量的练习。本节内容的导图会很大,小编会在解说每个知识点之前独自提供导图,当然全图也有,除此之外,这节内容会波及很多零碎的API,而咱们要学会看 jdk 文档,所以也会给大家提供 jdk1.8 的帮忙文档,下载见文末。

有图有假相就不多说了,知识点根本是上一篇的两倍。

设计模式

Java中的 23 种设计模式在开发中利用很多,不仅仅是咱们平时的利用开发,还包含一些框架和零碎源码中都有利用,具体的内容不能生吞活剥,而是在教训中去领会这个过程,思考利用设计模式的机会和场景。

其中单例设计模式最罕用,也最简略,简直能够说凡是用Java语言开发的程序,都会用到单例设计模式。没有必要死磕概念,重要的是了解其思维,随着开发教训的累积,就会缓缓体悟到其中的奥秘!

/** * 懒汉式 */public class SingletonLazy {    private static SingletonLazy singletonHungry;    private SingletonLazy() {    }    public static SingletonLazy getInstance() {        if (singletonHungry == null) {            singletonHungry = new SingletonLazy();        }        return singletonHungry;    }}
/** * 饿汉式 */public class SingletonHungry {    private static SingletonHungry singletonHungry = new SingletonHungry();    private SingletonHungry() {    }    public static SingletonHungry getInstance() {        return singletonHungry;    }}

多态

多态 是 Java 面向对象中的三大特点之一,上一篇中讲了 封装继承 ,多态是本节的第一重点内容。其要表白的意思简而言之:一种事务的多种状态展示模式就叫多态。

形象起来不好了解,举例理论场景比拟好了解:

比方咱们软件开发者自身就是形象一类,因为其余行业的人了解起来就不容易,而且还分不清楚,你到底是开发啥的?(是前端开发还是后端开发?是Java开发还是PHP开发?是零碎层开发还是游戏开发?等等),这个概念总体给人是一种形象的,但还大略晓得这个词具备哪些 共性 ,而这里的 共性 就是形象进去的具体能力,Java中叫形象办法,因为每个具体的开发者所具备的同一个办法外部能力体现不同,这就是具体子类要实现的。这里的子类能够了解为 java开发工程师PHP开发工程师 等等。

在咱们理论开发中,依据业务场景,咱们要本人去提取抽象类,进而实现拆散的能力,而所分离出来的多个子类,具备不同的表现形式,就是多种状态的,故名 多态

关键字 instanceof

置信你能明确,咱们抽离进去了抽象类(父类),那么子类的体现各异,而父类如何判断一个子类是否是它的子类呢?这就是关键字 instanceof 的用途。

学习多态可能听到最多的一句话就是:父类援用指向子类对象

什么叫援用,老版本教材中叫做句柄,新点的教程都称为 援用,其实就是创立的对象的变量,比方:

// programmer 就是句柄,也叫援用Programmer programmer = new Programmer();

再举个父类援用指向子类对象的例子:

// new 是用来创建对象的,上一节大家都用过Programmer javaProgrammer = new JavaProgrammer();

interface

这块内容大家看导图,记住用法和为什么用。理论开发中,定义接口的场景太多了,必须熟练掌握应用规定。

小结

多态 的内容是重中之重,必须搞明确上面这几个概念和为什么?这也是常见的面试题。

  1. Java中的多态你是怎么了解的?
  2. 你对抽象类怎么了解?抽象类有什么特点?
  3. Java为什么会有接口(interface)?
  4. 接口的应用规定和接口中办法的定义
  5. 外部类的利用场景?

异样

这块内容当初开发中依附 IDE 的只能提醒曾经能够搞定了,更多的利用状况是本人开发SDK或者封装组件时候的解决,明确出现异常时,程序的执行程序,以及父类办法抛出异样,子类重写时抛异样的规定。

包装类

  • 明确为什么要有包装类?
  • 熟练掌握装箱与拆箱的规定和类型转换办法的应用

导图中提到的转换方法,开发中常常用到,大家要多练习,最起码根本数据类型要全副尝试一次。

以下代码是本节的重点:

private static void compareDemo() {    Integer num1 = 20;    /**     * 相当于执行了 Integer num2 = Integer.valueOf(2021);     *     * Double 和 Float 不具备这个个性(常量池)     */    Integer num2 = 2021;    Integer num3 = 20;    Integer num4 = 2021;    System.out.println("num1 与 20 相等吗 " + (num1 == 20));    // 主动拆箱比拟    System.out.println("num2 与 2021 相等吗 " + (num2 == 2021));    /**     * 后果不同的起因:Integer在 -128~127 之间时,参加两个 Integer 对象比拟前会主动拆箱,超过这个范畴则不会     */    System.out.println("num1 与 num3 相等吗 " + (num1 == num3)); // 30 数字在比拟    System.out.println("num2 与 num4 相等吗 " + (num2 == num4)); // 对象在比拟}

字符串

这部分内容每个Java开发者必须熟练掌握,字符串的截取、替换、匹配、大小写转换、查找、拼接等是最最罕用的操作,导图中列出来的办法必须纯熟使用。

汇合

导图中的重点内容都有标记,是属于重中之重,Java中的汇合内容也是面试问的最多的知识点之一,必须牢记于心,纯熟使用。ArrayListHashMap 是开发中最罕用到的汇合,必须要明确它们各自的特点和罕用办法以及特有办法,大多数场景是两者联合来应用,比方:条件过滤操作等。

线程

首先要搞清楚程序执行的默认程序和主线程之间的关系;其次要明确当有多个线程的时候,程序又是如何执行的;这两个问题搞清楚后,你就会明确什么时候须要创立线程了。

知识点(同样是面试题):

  • 创立线程的形式
  • 线程的执行程序
  • 对synchronized关键字的了解
  • 线程死锁问题

IO

这部分内容理论开发中与网络申请联合应用,比方下载文件、上传文件、批改头像等,这里的具体API应用都是最原生的,也就是底层实现逻辑是这样的,往往理论开发中咱们会应用他人封装的框架,看不到最外面的API实现,框架会暴漏给咱们一些办法,兴许就是一句话就实现了下载或者上传;然而有些场景还是须要咱们手动撸一遍,所以这些原理的外围代码还是要把握,偶然面试也会让你口述流程。

以下代码是对于 File 类创立文件的三种形式,依据业务都有可能会用到:

/** * 创立文件 File 的几种形式 * * @param parentPath   前端门路 * @param fileNamePath 后端门路 */private static void createFile(String parentPath, String fileNamePath) {    File file1 = new File(parentPath + "\\" + fileNamePath);    System.out.println("file1 is exit ? " + file1.exists());    File file2 = new File(parentPath, fileNamePath);    System.out.println("file2 is exit ? " + file2.exists());    File file3 = new File(new File(parentPath), fileNamePath);    System.out.println("file3 is exit ? " + file3.exists());}

总结

jdk1.8 帮忙文档下载:https://pan.baidu.com/s/12JHAlmwZbtBiJlPNZPlf3Q 取明码:d5ya(这个文档是小编从网上下的,外面如有其余内容请勿置信哈)

这三篇内容,对于小白倡议15天学完,必须操之过急,这就是Java最根底的货色,不论是前面要接触的如许牛逼的框架,底层都离不开根底的撑持。

补充内容:Java中的枚举(Enum)

绝对比较简单,自行搜寻相熟写法,后续的我的项目篇章就会利用。

小编特意创立了一个公众号:举荐学java,会分享与java相干的内容,并且以原创为主,欢送大家搜寻关注(关注即送小编筛选的精品视频教程),一起学Java!