前言
这是推荐学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
这块内容大家看导图,记住用法和为什么用。实际开发中,定义接口的场景太多了,必须熟练掌握使用规则。
小结
多态
的内容是重中之重,必须搞明白下面这几个概念和为什么?这也是常见的面试题。
- Java中的多态你是怎么理解的?
- 你对抽象类怎么理解?抽象类有什么特点?
- Java为什么会有接口(interface)?
- 接口的使用规则和接口中方法的定义
- 内部类的应用场景?
异常
这块内容现在开发中依靠 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中的集合内容也是面试问的最多的知识点之一,必须牢记于心,熟练运用。ArrayList
和 HashMap
是开发中最常用到的集合,必须要明白它们各自的特点和常用方法以及特有方法,大多数场景是两者结合来使用,比如:条件过滤操作等。
线程
首先要搞清楚程序执行的默认顺序和主线程之间的关系;其次要明白当有多个线程的时候,程序又是如何执行的;这两个问题搞清楚后,你就会明白什么时候需要创建线程了。
知识点(同样是面试题):
- 创建线程的方式
- 线程的执行顺序
- 对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!
相关推荐
编程知识+技术开发+Springboot入门知识,一文掌握Springboot体系;编程知识+技术开发+Springboot入门知识,一文掌握Springboot体系;编程知识+技术开发+Springboot入门知识,一文掌握Springboot体系;编程知识+技术...
在本文中,我们将深入探讨《从小白到大神,一文掌握 Python 密集知识点》这份资料所涵盖的丰富Python编程知识。Python是一种高级、通用的编程语言,以其易读性、简洁的语法和强大的库支持而备受青睐。无论你是初学者...
Java内存模型(JMM)规定了线程如何访问和修改共享变量,`volatile`关键字正是在此模型下发挥作用。它通过内存屏障(内存栅栏)来防止指令重排序,并强制将更新后的值立即写回主内存,确保所有线程都能看到最新的值...
Spring框架是Java EE应用开发中最流行的轻量级框架之一,它简化了企业级应用的开发过程,尤其是对于依赖注入(DI)、面向切面编程(AOP)、事务管理等方面有着强大的支持。
Python基础知识,一文了解列表知识
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java集合详解5:深入...
《JAVA电子书下载网址大全》一文为广大的JAVA学习者和从业者提供了一站式的资源宝库,集合了数十个与JAVA相关的电子书下载网址,覆盖了JAVA编程的多个方面,从基础到进阶,从理论到实践,满足不同层次学习者的需求。...
一文弄懂UFS协议,快速入门
鲍捷在其所著的《金融知识图谱的发展近况和应用回顾》一文中,详细回顾了金融知识图谱的发展历史、应用领域以及行业现状。 知识图谱是一种基于语义的网络表示方式,它将信息转化为图结构,以节点和边的形式展现实体...
学习Java作为编程语言是一个系统的过程,下面是一份适合初学者的Java学习路线图以及每个阶段的关键知识点和实践指南
### Java编程语言的基础与核心知识点解析 #### Java的三大领域:javase、javaee与javame Java,作为全球范围内广泛使用的编程语言之一,其应用领域涵盖了从桌面应用程序到企业级Web服务,再到移动设备软件的开发。...
这份名为“房地产行业研究:一文回顾EH50房企2020H1业绩会”的报告,聚焦了这些企业在2020年上半年的表现,为我们揭示了在经济环境和政策影响下的房地产业动态。 报告首先可能对2020年上半年的整体市场环境进行了...
本篇报告标题为“汽车行业投资策略:一文回顾2021上海车展-拥抱汽车产业电动智能变革”,是一份证券研究报告,主要回顾了2021年在上海举办的车展并分析了汽车行业在电动化、智能化趋势下的发展以及投资策略。...
通过从一组称为GC Roots的对象开始,沿着引用链向下搜索。如果一个对象不能从GC Roots到达,那么它被认为是不可达的,可以被回收。可达性分析可以有效解决循环引用的问题,但其复杂度较高,需要对大量数据进行分析,...
单从“Stream”这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系。实际上呢,没毛关系。Java 8 新增的 Stream 是为了解放程序员操作集合(Collection)时的生产力,之所以能解放,很...
Kotlin协程官方文档提供了详细的入门指南和进阶教程,涵盖了协程的基础知识、取消和超时、组合挂起函数、协程上下文和调度器、异步流、通道和异常处理等 Topic。 在使用Kotlin协程时,需要了解协程的生命周期和上...
- 在 `switch` 语句中,`break` 通常用于结束每个 `case` 块,防止代码“穿透”到下一个 `case` 或 `default` 块。 #### 4. `byte` 数据类型 - **描述**: `byte` 是 Java 的一种原始数据类型,用于存储范围在 `-...
Java反射机制是Java编程语言中的一个核心特性,它允许程序在运行时动态地获取类的信息并操作类的对象。反射在框架设计中扮演着至关重要的角色,因为它赋予了代码高度的灵活性和可扩展性。通过反射,开发者可以在不...
根据标题"读书笔记,一文读懂如何调优JAVA程序"和描述"多年经验总结加读书笔记",我们可以总结出以下知识点: 一、异常处理 * 在 JAVA 中,异常可以分为编译错误、逻辑错误和运行时错误三种/non-normal situations...