1. 面向对象的基本概念
- 面向对象的三个基本特征是:封装、继承和多态。
- 封装是指隐藏对象的属性和实现细节,只对外提供公开的接口。这样可以保护对象的内部状态,防止被外界误用或修改。
- 继承是指让一个类(子类)获得另一个类(父类)的属性和方法。这样可以实现代码的复用和扩展。
- 多态是指对于同一个行为,不同的子类对象有不同的表现形式。多态的实现依赖于继承和重写。重写是指子类修改或覆盖父类的方法。
- 举例:动物类是一个父类,它有一个叫声方法。猫类和狗类是动物类的子类,它们继承了动物类的属性和方法,并重写了叫声方法。当我们调用动物类的叫声方法时,如果传入的是猫对象,就会输出“喵喵”,如果传入的是狗对象,就会输出“汪汪”。这就是多态的体现。
2. Java基础语法
- Java是一种编译型语言,它需要先编译成字节码文件,然后由Java虚拟机(JVM)执行。
- Java是一种强类型语言,它要求变量在使用前必须声明其数据类型,并且不能随意改变。
- Java支持八种基本数据类型:byte、short、int、long、float、double、char、boolean。它们分别占用不同的字节数,并有不同的取值范围。
- Java还支持引用数据类型,如数组、类、接口、枚举等。引用数据类型存储的是对象在堆内存中的地址,而不是对象本身。
- Java支持四种访问修饰符:public、protected、default(不写)、private。它们分别表示不同的访问权限,如下表所示:
修饰符 | 同一个类 | 同一个包 | 子类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
- Java支持运算符、控制语句、异常处理等常见的语法结构。运算符包括算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符等。控制语句包括if-else、switch-case、for、while、do-while等。异常处理包括try-catch-finally和throw-throws等。
3. Java集合框架
- Java集合框架提供了一套用于存储和操作多个数据的接口和实现类。它主要包括两种类型:Collection和Map。
- Collection是一个单列集合的接口,它有三个子接口:List、Set和Queue。List表示有序可重复的集合,如ArrayList和LinkedList。Set表示无序不可重复的集合,如HashSet和TreeSet。Queue表示先进先出的队列,如LinkedList和PriorityQueue。
- Map是一个双列集合的接口,它表示键值对的映射关系。它有两个常用的实现类:HashMap和TreeMap。HashMap是基于哈希表的无序映射,它支持快速的插入和查找,但不保证键值对的顺序。TreeMap是基于红黑树的有序映射,它按照键的自然顺序或者指定的比较器排序键值对,但插入和查找的效率较低。
- Java集合框架还提供了一些工具类,如Collections和Arrays,它们提供了一些静态方法用于操作集合和数组,如排序、查找、反转、拷贝等。
4. Java并发编程
- Java并发编程是指利用多线程技术来提高程序的执行效率和响应速度的编程方式。Java提供了多种方式来创建和管理线程,如Thread类、Runnable接口、Callable接口、Executor框架等。
- Java中的线程有五种状态:新建、就绪、运行、阻塞和死亡。线程之间会根据CPU的调度和同步机制来切换状态。
- Java中的线程同步是指在多个线程访问共享资源时,保证资源的一致性和正确性的机制。Java提供了多种同步手段,如synchronized关键字、Lock接口、原子类、并发容器等。
- Java中的线程通信是指在多个线程之间传递信息或协调动作的机制。Java提供了多种通信手段,如wait-notify机制、join方法、CountDownLatch类、CyclicBarrier类等。
5. Java虚拟机(JVM)
- Java虚拟机(JVM)是一个能够执行Java字节码文件的抽象计算机。它负责将字节码文件转换为特定平台上的机器码,并执行。
- JVM有三个主要组成部分:类加载器(ClassLoader)、运行时数据区(Runtime Data Area)和执行引擎(Execution Engine)。
- 类加载器负责加载Java类到内存中,它分为四种:启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)、应用程序类加载器(Application ClassLoader)和自定义类加载器(User-defined ClassLoader)。类加载过程分为五个阶段:加载、验证、准备、解析和初始化。
- 运行时数据区是JVM在运行时为Java程序分配内存空间的区域,它分为五个部分:方法区(Method Area)、堆(Heap)、栈(Stack)、本地方法栈(Native Method Stack)和程序计数器(Program Counter Register)。其中方法区和堆是所有线程共享的,栈、本地方法栈和程序计数器是每个线程私有的。
- 执行引擎负责执行字节码文件中的指令,它包括解释器(Interpreter)、即时编译器(Just-In-Time Compiler)和垃圾回收器(Garbage Collector)。解释器负责逐行解释执行字节码文件,即时编译器负责将热点代码编译为本地机器码,提高执行效率,垃圾回收器负责回收不再使用的对象,释放内存空间。