java自学01:Java基础知识

简介: java学习记录

面向对象和⾯向过程的区别

⾯向过程 : ⾯向过程性能⽐⾯向对象⾼。 因为类调⽤时需要实例化,开销⽐较⼤,⽐较消耗资
源,所以当性能是最重要的考量因素的时候,⽐如单⽚机、嵌⼊式开发、 Linux/Unix 等⼀般采
⽤⾯向过程开发。但是, ⾯向过程没有⾯向对象易维护、易复⽤、易扩展。
⾯向对象 : ⾯向对象易维护、易复⽤、易扩展。 因为⾯向对象有封装、继承、多态性的特性,
所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是, ⾯向对象性能⽐⾯向过
程低。

Java 语⾔有哪些特点?

  1. 简单易学;
  2. ⾯向对象(封装,继承,多态);
  3. 平台⽆关性( Java 虚拟机实现平台⽆关性);
  4. 可靠性;
  5. 安全性;
  6. ⽀持多线程( C++ 语⾔没有内置的多线程机制,因此必须调⽤操作系统的多线程功能来进⾏多
    线程程序设计,⽽ Java 语⾔却提供了多线程⽀持);7. ⽀持⽹络编程并且很⽅便( Java 语⾔诞⽣本身就是为简化⽹络编程设计的,因此 Java 语⾔不
    仅⽀持⽹络编程⽽且很⽅便);
  7. 编译与解释并存;

关于 JVM JDK 和 JRE 最详细通俗的解答

JVM

Java 虚拟机(JVM)是运⾏ Java 字节码的虚拟机。 JVM 有针对不同系统的特定实现(Windows,
Linux, macOS),⽬的是使⽤相同的字节码,它们都会给出相同的结果。
什么是字节码?采⽤字节码的好处是什么?
在 Java 中, JVM 可以理解的代码就叫做 字节码 (即扩展名为 .class 的⽂件),它不⾯向任
何特定的处理器,只⾯向虚拟机。 Java 语⾔通过字节码的⽅式,在⼀定程度上解决了传统解释型语
⾔执⾏效率低的问题,同时⼜保留了解释型语⾔可移植的特点。所以 Java 程序运⾏时⽐较⾼效,
⽽且,由于字节码并不针对⼀种特定的机器,因此, Java 程序⽆须重新编译便可在多种不同操作系
统的计算机上运⾏。
Java 程序从源代码到运⾏⼀般有下⾯ 3 步
我们需要格外注意的是 .classi>机器码 这⼀步。在这⼀步 JVM 类加载器⾸先加载字节码⽂件,然后
通过解释器逐⾏解释执⾏,这种⽅式的执⾏速度会相对⽐较慢。⽽且,有些⽅法和代码块是经常需要被
调⽤的(也就是所谓的热点代码),所以后⾯引进了 JIT 编译器,⽽ JIT 属于运⾏时编译。当 JIT 编
译器完成第⼀次编译后,其会将字节码对应的机器码保存下来,下次可以直接使⽤。⽽我们知道,机器
码的运⾏效率肯定是⾼于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的
语⾔。
HotSpot 采⽤了惰性评估(Lazy Evaluation)的做法,根据⼆⼋定律,消耗⼤部分系统资源的只有那
⼀⼩部分的代码(热点代码),⽽这也就是 JIT 所需要编译的部分。 JVM 会根据代码每次被执⾏的
情况收集信息并相应地做出⼀些优化,因此执⾏的次数越多,它的速度就越快。 JDK 9 引⼊了⼀种
新的编译模式 AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免了
JIT 预热等各⽅⾯的开销。 JDK ⽀持分层编译和 AOT 协作使⽤。但是 , AOT 编译器的编译质量是
肯定⽐不上 JIT 编译器的。

总结:

Java 虚拟机(JVM)是运⾏ Java 字节码的虚拟机。 JVM 有针对不同系统的特定实现(Windows,
Linux, macOS),⽬的是使⽤相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实
现是 Java 语⾔“⼀次编译,随处可以运⾏”的关键所在。
JDK 和 JRE
我们需要格外注意的是 .classi>机器码 这⼀步。在这⼀步 JVM 类加载器⾸先加载字节码⽂件,然后
通过解释器逐⾏解释执⾏,这种⽅式的执⾏速度会相对⽐较慢。⽽且,有些⽅法和代码块是经常需要被
调⽤的(也就是所谓的热点代码),所以后⾯引进了 JIT 编译器,⽽ JIT 属于运⾏时编译。当 JIT 编
译器完成第⼀次编译后,其会将字节码对应的机器码保存下来,下次可以直接使⽤。⽽我们知道,机器
码的运⾏效率肯定是⾼于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的
语⾔。
HotSpot 采⽤了惰性评估(Lazy Evaluation)的做法,根据⼆⼋定律,消耗⼤部分系统资源的只有那
⼀⼩部分的代码(热点代码),⽽这也就是 JIT 所需要编译的部分。 JVM 会根据代码每次被执⾏的
情况收集信息并相应地做出⼀些优化,因此执⾏的次数越多,它的速度就越快。 JDK 9 引⼊了⼀种
新的编译模式 AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免了
JIT 预热等各⽅⾯的开销。 JDK ⽀持分层编译和 AOT 协作使⽤。但是 , AOT 编译器的编译质量是
肯定⽐不上 JIT 编译器的。
总结:
Java 虚拟机(JVM)是运⾏ Java 字节码的虚拟机。 JVM 有针对不同系统的特定实现(Windows,
Linux, macOS),⽬的是使⽤相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实
现是 Java 语⾔“⼀次编译,随处可以运⾏”的关键所在。

JDK 和 JRE

Oracle JDK 和 OpenJDK 的对⽐
可能在看这个问题之前很多⼈和我⼀样并没有接触和使⽤过 OpenJDK 。那么 Oracle 和 OpenJDK 之间
是否存在重⼤差异?下⾯我通过收集到的⼀些资料,为你解答这个被很多⼈忽视的问题。
对于 Java 7,没什么关键的地⽅。 OpenJDK 项⽬主要基于 Sun 捐赠的 HotSpot 源代码。此外,
OpenJDK 被选为 Java 7 的参考实现,由 Oracle ⼯程师维护。关于 JVM, JDK, JRE 和 OpenJDK 之间
的区别, Oracle 博客帖⼦在 2012 年有⼀个更详细的答案:
问: OpenJDK 存储库中的源代码与⽤于构建 Oracle JDK 的代码之间有什么区别?
答:⾮常接近 - 我们的 Oracle JDK 版本构建过程基于 OpenJDK 7 构建,只添加了⼏个部分,例
如部署代码,其中包括 Oracle 的 Java 插件和 Java WebStart 的实现,以及⼀些封闭的源代码派
对组件,如图形光栅化器,⼀些开源的第三⽅组件,如 Rhino,以及⼀些零碎的东⻄,如附加⽂档
或第三⽅字体。展望未来,我们的⽬的是开源 Oracle JDK 的所有部分,除了我们考虑商业功能的
部分。

总结:

  1. Oracle JDK ⼤概每 6 个⽉发⼀次主要版本,⽽ OpenJDK 版本⼤概每三个⽉发布⼀次。但这不
    是固定的,我觉得了解这个没啥⽤处。详情参⻅: https://blogs.oracle.com/java-platform-g
    roup/update-and-faq-on-the-java-se-release-cadence。
  2. OpenJDK 是⼀个参考模型并且是完全开源的,⽽ Oracle JDK 是 OpenJDK 的⼀个实现,并不是
    完全开源的;
  3. Oracle JDK ⽐ OpenJDK 更稳定。 OpenJDK 和 Oracle JDK 的代码⼏乎相同,但 Oracle JDK 有
    更多的类和⼀些错误修复。因此,如果您想开发企业/商业软件,我建议您选择 Oracle JDK,因
    为它经过了彻底的测试和稳定。某些情况下,有些⼈提到在使⽤ OpenJDK 可能会遇到了许多应
    ⽤程序崩溃的问题,但是,只需切换到 Oracle JDK 就可以解决问题;
  4. 在响应性和 JVM 性能⽅⾯, Oracle JDK 与 OpenJDK 相⽐提供了更好的性能;
  5. Oracle JDK 不会为即将发布的版本提供⻓期⽀持,⽤户每次都必须通过更新到最新版本获得⽀
    持来获取最新版本;
  6. Oracle JDK 根据⼆进制代码许可协议获得许可,⽽ OpenJDK 根据 GPL v2 许可获得许可。

Java 和 C++的区别?

我知道很多⼈没学过 C++,但是⾯试官就是没事喜欢拿咱们 Java 和 C++ ⽐呀!没办法!!!就算没
学过 C++,也要记下来!
都是⾯向对象的语⾔,都⽀持封装、继承和多态
Java 不提供指针来直接访问内存,程序内存更加安全
Java 的类是单继承的, C++ ⽀持多重继承;虽然 Java 的类不可以多继承,但是接⼝可以多继
承。Java 有⾃动内存管理机制,不需要程序员⼿动释放⽆⽤内存
在 C 语⾔中,字符串或字符数组最后都会有⼀个额外的字符‘\0’来表示结束。但是, Java 语⾔
中没有结束符这⼀概念。

什么是 Java 程序的主类 应⽤程序和⼩程序的主类有何不同?

⼀个程序中可以有多个类,但只能有⼀个类是主类。在 Java 应⽤程序中,这个主类是指包含
main()⽅法的类。⽽在 Java ⼩程序中,这个主类是⼀个继承⾃系统类 JApplet 或 Applet 的⼦
类。应⽤程序的主类不⼀定要求是 public 类,但⼩程序的主类要求必须是 public 类。主类是 Java
程序执⾏的⼊⼝点。

Java 应⽤程序与⼩程序之间有哪些差别?

简单说应⽤程序是从主线程启动(也就是 main() ⽅法)。 applet ⼩程序没有 main() ⽅法,主要
是嵌在浏览器⻚⾯上运⾏(调⽤ init() 或者 run() 来启动),嵌⼊浏览器这点跟 flash 的⼩游戏类
似。

字符型常量和字符串常量的区别?

  1. 形式上: 字符常量是单引号引起的⼀个字符; 字符串常量是双引号引起的若⼲个字符
  2. 含义上: 字符常量相当于⼀个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表⼀个地
    址值(该字符串在内存中存放位置)
  3. 占内存⼤⼩ 字符常量只占 2 个字节; 字符串常量占若⼲个字节 (注意: char 在 Java 中占两
    个字节)
相关文章
|
21天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
17天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2563 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
15天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
13天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
17天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1556 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
19天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
826 14
|
14天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
621 7
|
7天前
|
Docker 容器
Docker操作 (五)
Docker操作 (五)
170 69
|
7天前
|
Docker 容器
Docker操作 (三)
Docker操作 (三)
167 69
|
19天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
628 52
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界