Java基础之部分重点

187 阅读5分钟

Java基础之部分重点

Java作为应用开发最广泛的语言之一,涉及到的知识点非常多,包括Java基础特定及企业级框架。本文主要基于《Head First Java》这本偏向Java基础介绍的著作,结合实际的开发经验,总结了Java基础特性中值得注意的一部分重点。企业级Java框架如Spring、SpringBoot等,及反射、注解等相关特性,暂且不在文中介绍。扎实的基础知识是掌握高阶技术的基石,是对各技术融会贯通的纽带。下述内容为本文总结的Java基础重点特性。

Java基础之部分重点.png


面向对象

关键词:类、对象、封装、继承、多态

面向对象的基础包括类、对象、封装、继承、多态等。继承的意义是:1)避免重复代码;2)定义共同协议。多态的基本用法为父型引用变量指向子类对象,使用场景为方法入参多态、方法返回值多态、数组元素多态等,目的为程序在引进新子类时减少程序修改。抽象类关键字为abstract,特点为类不能初始化只能被继承,抽象方法没有实现只能被覆盖,有抽象方法的类必须是抽象的,具体类必须实现继承的抽象类的所有抽象方法。接口关键字为interface,全部方法为抽象的,必须在实现类中实现。定义继承关系时,只能继承一个父类,接口可继承多个。


变量

关键词:primitive主数据类型、引用数据类型、变量比较、静态变量、变量包装

数据类型包括primitive主数据类型和引用数据类型,primitive主数据类型包括boolean、char、byte、数值型,引用数据类型包括String、数组、程序自定义类。引用变量赋值为null,代表不引用任何对象。类实例变量都有默认值,其中引用变量默认值为null。变量用==运算符比较时,primitive主数据类型比对的是字节组合,如int 2 == byte 2为true,引用数据类型比对的是引用是否指向同一对象。静态变量值对所有实例共享,在类被加载时初始化。primitive主数据类型包装,如int包装为Integer。


方法

关键词: 值拷贝、引用拷贝、方法覆盖、方法重载、构造函数、super方法、this方法、静态方法

方法调用时,当入参为primitive主数据类型时,入参拷贝方式为值拷贝,当入参为引用数据类型时,入参拷贝方式为引用拷贝。方法的重载与继承、多态无关,需要与方法覆盖区别开来。构造函数,父类构造函数会在子类创建对象时执行,且父类构造函数先于子类构造函数执行,形成构造函数链。super()方法编译器自动添加,对super重载方法的调用必须为构造函数第一条语句。this方法为构造函数调用同一类的另一构造函数,且必须为第一条语句,所以super和this不可兼得。静态方法不能调用非静态变量和方法,static{}为静态初始化程序,在加载类时执行。


编译运行

关键词:源代码、字节码、二进制码、编译器、JVM

Java编译运行的整体过程为:源代码(.java文件)经编译器编译(javac命令)成字节码(.class文件),字节码在Java虚拟机(JVM)上转换为二进制码后程序运行。


内存管理

关键词:堆内存、栈内存、GC

堆为对象及其实例变量的生存空间,栈为方法调用的生存空间及局部变量的生存空间。当局部变量为引用变量时,引用变量在栈上,引用变量指向的对象在堆空间上。GC,当最后一个引用消失时,对象变成可回收的。


异常处理

关键词:Exception

编译器不关注RuntimeException,不需包在try/catch中。catch多个异常时要先catch子类,再catch父类。


序列化

关键词:序列化、序列化标识

对象序列化,需类实现serializable接口,该接口无需要实现的方法。对象序列化时,该对象引用的实例变量也会被序列化。如果父类已经实现序列化,则子类自动实现序列化。静态变量不会被序列化。序列化用versionID或serialVersionUID标识。


多线程

关键字:Thread类、Runnable接口、线程执行空间、线程状态、线程调度器、synchronized

实现Runnable接口的类传给Thread类构造函数创建Thread对象,之后调用start方法后线程执行。线程在线程执行空间中,包括可执行状状态、执行中状态、堵塞状态。JVM线程调度器不保证线程执行顺序和执行时间,但可在一定程度上用Thread.sleep在代码层面干预。多线程会产生并发性问题,即2个以上线程存取单一对象数据,可用synchronized关键词修饰方法使对象数据被单一线程访问,但该方式可产生死锁问题。线程命名可用setName方法,通常用于排错。


集合

关键字:Collection、List、Set、Map、泛型、sort方法

集合包括Collection、List、Set、Map等,里面涉及泛型的概念,泛型中的extend代表extend/implement。sort方法只接受实现Comparable或Comparator接口的对象的集合的调用。数组类型在运行期检查,集合类型在编译期检查


参考资料

《Head First Java》