公告

记录一下自己学习和生活中的所见所闻

Skip to content

Java概述

整理来源

https://javabetter.cn/sidebar/sanfene/javase.html

1. 什么是 Java?

是什么
  1. Java 是⼀⻔⾯向对象的编程语⾔,由 Sun 公司的詹姆斯·⾼斯林团队于 1995 年推出。
  2. 吸收了 C++ 语⾔中⼤量的优点,但⼜抛弃了 C++ 中容易出错的地⽅,如垃圾回收、指针。
  3. 同时,Java ⼜是⼀⻔平台⽆关的编程语⾔,即⼀次编译,处处运⾏。 只需要在对应的平台上安装 JDK,就可以实现跨平台,在 Windows、macOS、Linux 操作系统上运⾏。

Java 语⾔和 C 语⾔有哪些区别?

区别
  1. Java 是⼀种跨平台的编程语⾔,通过在不同操作系统上安装对应版本的 JVM 以实现“⼀次编译,处处运⾏”的⽬的。 ⽽ C 语⾔需要在不同的操作系统上重新编译。
  2. Java 实现了内存的⾃动管理,⽽ C 语⾔需要使⽤ malloc 和 free 来⼿动管理内存。

多久开始学习Java的

我是从⼤⼀下学期开始学习 Java 的,当时已经学完了 C 语⾔,但苦于 C 语⾔没有很好的应⽤⽅向,就开始学习 Java 了,因为我了解到,绝⼤多数的互联⽹公司,包括银⾏、国企,后端服务都是⽤ Java 开发的,另外就是, Java 的学习资料⾮常丰富,就业岗位和薪资待遇都⽐较理想。 于是就⼀边学,⼀边实战,先做了前后端分离的社区项⽬ 技术派,接触到了 Spring Boot、MyBatis-Plus、 MySQL、Redis、ElasticSearch、MongoDB、Docker、RabbitMQ 等⼀系列的 Java 技术栈。 后⾯⼜做了微服务项⽬ pmhub,接触到了 Spring Cloud、Nacos、Sentinel、Seata、SkyWalking 等相关技术 栈。

平时使用什么编程语言

⼤⼀上先学习的 C 语⾔,⼤⼀下半学期开始学习 Java,中间还学过⼀些 Python 和 JavaScript,但整体的感受上来 说还是更喜欢 Java。 因为它可以做的事情太多了,既可以⽤它来写 Web 后端服务,也可以⽤它来造⼀些轮⼦,⽐如 MYDB 这个轮⼦, 就是⽤ Java 完成的,不进加深了我对 MySQL索引、事务、MVCC 的理解,还让我对 Java 的 NIO、多线程、JVM 有了更深的了解。

平时怎么学习Java的

⼀开始,主要是跟着学校的课程⾛,⼊⻔后感觉课程已经满⾜不了我的求知欲了,于是就开始在 B 站和 GitHub 上 找⼀些优质的视频资源和开源知识库来学习。 ⽐如说《 Java 进阶之路》就很适合我的⼝味,从 Java 的语法、数组&字符串、OOP、集合框架、Java IO、异常处 理、⽹络编程、NIO、并发编程、JVM 等,都有详细的讲解,还有很多⼿绘图和代码实例,我都跟着动⼿⼀步步实 现了,感觉收获很⼤。 后来⼜读了⼀遍《Java 编程思想》、《Effective Java》,周志明⽼师的《深⼊理解 Java 虚拟机》,以及 JDK 的⼀ 些源码,⽐如说 String、HashMap,还有字节码⽅⾯的知识。 再后来就开始做实战项⽬ MYDB、 技术派、 PmHub,算是彻底掌握 Java 项⽬的开发流程了。

2. Java 语⾔有哪些特点?

特点
  1. 面向对象 主要是封装,继承,多态。
  2. 平台独立性 一次编译,到处运行 因此采⽤ Java 语⾔编写的程序具有很好的可移植性。
  3. 支持多线程 C++ 语⾔没有内置的多线程机制,因此必须调⽤操作系统的 API 来完成多线程程序设计,⽽ Java 却提供了封装好多线程⽀持;
  4. ⽀持 JIT 编译,也就是,它可以在程序运⾏时将字节码转换为热点机器码来提⾼程序的运⾏速度。
  5. Java具有健壮性。Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的代码并加以处理,这就简化了出错处理和恢复的任务。

思考:什么是多线程,什么是JVM ,什么是面向对象,JVM如何实现平台独立性?

3. JVM、JDK 和 JRE 有什么区别?

区别
  1. JVM:也就是 Java 虚拟机,是 Java 实现跨平台的关键所在,不同的操作系统有不同的 JVM 实现。JVM 负责将 Java 字节码转换为特定平台的机器码,并执⾏。
  2. JRE:也就是 Java 运⾏时环境,包含了运⾏ Java 程序所必需的库,以及 JVM。
  3. JDK:⼀套完整的 Java SDK,包括 JRE,编译器 javac、Java ⽂档⽣成⼯具 javadoc、Java 字节码⼯具 javap 等。 为开发者提供了开发、编译、调试 Java 程序的⼀整套环境。

简单来说,JDK 包含 JRE,JRE 包含 JVM。

image.png

4. 说说什么是跨平台?原理是什么

什么是跨平台
  1. 所谓的跨平台,是指 Java 语⾔编写的程序,⼀次编译后,可以在多个操作系统上运⾏。
  2. 原理是增加了⼀个中间件 JVM,JVM 负责将 Java 字节码转换为特定平台的机器码,并执⾏。

5. 什么是字节码?采⽤字节码的好处是什么?

什么是字节码

所谓的字节码,就是 Java 程序经过编译后产⽣的 .class ⽂件。 Java 程序从源代码到运⾏需要经过三步:

  • 编译:将源代码⽂件 .java 编译成 JVM 可以识别的字节码⽂件 .class
  • 解释:JVM 执⾏字节码⽂件,将字节码翻译成操作系统能识别的机器码
  • 执⾏:操作系统执⾏⼆进制的机器码

image.png

6. 为什么有⼈说 Java 是“编译与解释并存”的语⾔?

为什么呢

编译型语⾔是指编译器针对特定的操作系统,将源代码⼀次性翻译成可被该平台执⾏的机器码。 解释型语⾔是指解释器对源代码进⾏逐⾏解释,解释成特定平台的机器码并执⾏。 举个例⼦,我想读⼀本国外的⼩说,我有两种选择:

  • 找个翻译,等翻译将⼩说全部都翻译成汉语,⼀次性读完。
  • 找个翻译,翻译⼀段我读⼀段,慢慢把书读完。
  • 之所以有⼈说 Java 是“编译与解释并存”的语⾔,是因为 Java 程序需要先将 Java 源代码⽂件编译字节码⽂件,再解 释执⾏

image.png