当前位置: 首页 > news >正文

Java基础-1

Java基础

转载https://github.com/Snailclimb/JavaGuide

  1. Java SE vs Java EE:

    Java SE(Java Platform, Standard Edition): Java 平台标准版,包含支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件,**Java SE 可以用于构建桌面应用程序或简单的服务器应用程序** Java EE(Java Platform, Enterprise Edition):Java 平台企业版, Java SE 的基础上,包含了支持企业级应用程序开发和部署的标准和规范(比如 Servlet、JSP、EJB、JDBC、JPA、JTA、JavaMail、JMS),**Java EE 可以用于构建分布式、可移植、健壮、可伸缩和安全的服务端 Java 应用程序,例如 Web 应用程序** Java ME(Java Platform,Micro Edition):Java ME 是 Java 的微型版本,主要用于开发嵌入式消费电子设备的应用程序,例如手机、PDA、机顶盒、冰箱、空调等
  2. JVM vs JDK vs JRE

    JVM(Java Virtual Machine, Java 虚拟机 ):运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行” JDK(Java Development Kit):Java 开发工具包,供开发者使用,用于创建和编译 Java 程序。它包含了 JRE,以及编译器 javac 和其他工具,如 javadoc(文档生成器)、jdb(调试器)、jconsole(监控工具)、javap(反编译工具)等 JRE(Java Runtime Environment):只包含运行 Java 程序所需的环境和类库


图:JVM

图:JDK、JRE 和 JVM 的关系

  1. 什么是字节码?采用字节码的好处是什么?

    我们需要格外注意的是 .class->机器码 这一步。在这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了 JIT(Just in Time Compilation) 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言 。
  2. Oracle JDK vs OpenJDK

    非常接近 - 我们的 Oracle JDK 版本构建过程基于 OpenJDK 7 构建,只添加了几个部分,例如部署代码,其中包括 Oracle 的 Java 插件和 Java WebStart 的实现,以及一些闭源的第三方组件,如图形光栅化器,一些开源的第三方组件,如 Rhino,以及一些零碎的东西,如附加文档或第三方字体。展望未来,我们的目的是开源 Oracle JDK 的所有部分,除了我们考虑商业功能的部分 OpenJDK 是开源的,开源意味着你可以对它根据你自己的需要进行修改、优化,比如 Alibaba 基于 OpenJDK 开发了 Dragonwell8:https://github.com/alibaba/dragonwell8 OpenJDK 是商业免费的(这也是为什么通过 yum 包管理器上默认安装的 JDK 是 OpenJDK 而不是 Oracle JDK)。虽然 Oracle JDK 也是商业免费(比如 JDK 8),但并不是所有版本都是免费的。 OpenJDK 更新频率更快。Oracle JDK 一般是每 6 个月发布一个新版本,而 OpenJDK 一般是每 3 个月发布一个新版本。(现在你知道为啥 Oracle JDK 更稳定了吧,先在 OpenJDK 试试水,把大部分问题都解决掉了才在 Oracle JDK 上发布)

  1. Java 和 C++ 的区别?

    Java 和 C++ 都是面向对象的语言,都支持封装、继承和多态,但是,它们还是有挺多不相同的地方: Java 不提供指针来直接访问内存,程序内存更加安全 Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。 Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。 C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这与 Java 最初的设计思想不符)。
  2. 标识符和关键字的区别是什么?

    在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了 标识符 。简单来说, 标识符就是一个名字 。 有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方,这些特殊的标识符就是 关键字 。简单来说,关键字是被赋予特殊含义的标识符 。比如,在我们的日常生活中,如果我们想要开一家店,则要给这个店起一个名字,起的这个“名字”就叫标识符。但是我们店的名字不能叫“警察局”,因为“警察局”这个名字已经被赋予了特殊的含义,而“警察局”就是我们日常生活中的关键字。
  3. Java 语言关键字有哪些?

    Tips:所有的关键字都是小写的,在 IDE 中会以特殊颜色显示。 default 这个关键字很特殊,既属于程序控制,也属于类,方法和变量修饰符,还属于访问控制。 在程序控制中,当在 switch 中匹配不到任何情况时,可以使用 default 来编写默认匹配的情况。 在类,方法和变量修饰符中,从 JDK8 开始引入了默认方法,可以使用 default 关键字来定义一个方法的默认实现 在访问控制中,如果一个方法前没有任何修饰符,则默认会有一个修饰符 default,但是这个修饰符加上了就会报错。

⚠️ 注意:虽然 true, false, 和 null 看起来像关键字但实际上他们是字面值,同时你也不可以作为标识符来使用。

  1. 自增自减运算符

    前缀形式(例如 ++a 或 --a):先自增/自减变量的值,然后再使用该变量,例如,b = ++a 先将 a 增加 1,然后把增加后的值赋给 b。 后缀形式(例如 a++ 或 a--):先使用变量的当前值,然后再自增/自减变量的值。例如,b = a++ 先将 a 的当前值赋给 b,然后再将 a 增加 1。 为了方便记忆,可以使用下面的口诀:符号在前就先加/减,符号在后就后加/减


答案:a = 11 、b = 9 、 c = 10 、 d = 10 、 e = 10。

  1. 移位运算符

    移位运算符是最基本的运算符之一,几乎每种编程语言都包含这一运算符。移位操作中,被操作的数据被视为二进制数,移位就是将其向左或向右移动若干位的运算。 移位运算符在各种框架以及 JDK 自身的源码中使用还是挺广泛的,HashMap(JDK1.8) 中的 hash 方法的源码就用到了移位运算符:
staticfinalinthash(Objectkey){inth;// key.hashCode():返回散列值也就是hashcode// ^:按位异或// >>>:无符号右移,忽略符号位,空位都以0补齐return(key==null)?0:(h=key.hashCode())^(h>>>16);}
  1. 重载和重写有什么区别?
重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理 重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法
  1. 什么是可变长参数?
允许在调用方法时传入不定长度的参数。就比如下面这个方法就可以接受 0 个或者多个参数。可变参数只能作为函数的最后一个参数 遇到方法重载的情况怎么办呢?会优先匹配固定参数还是可变参数的方法呢?

答案是会优先匹配固定参数的方法,因为固定参数的方法匹配度更高。

publicstaticvoidmethod2(Stringarg1,String...args){//......}
http://www.jsqmd.com/news/490768/

相关文章:

  • 2025_NIPS_Scaling RL to Long Videos
  • 【Dv3Admin】FastCRUD MD编辑器操作
  • open claw安装在windows wsl中教程
  • HDOJ 课程例题记录
  • 第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案
  • openclaw+qwen(笔记,非教程)
  • 讲讲普通小轿车驾驶证报考流程及费用,西安哪家驾校好? - mypinpai
  • UE5C++Part2--几种常见的变量类型
  • 企业级RustDesk私有化部署:Docker Swarm集群方案与安全加固指南
  • (85页PPT)某著名企业贝因美IT规划咨询报告(附下载方式)
  • Simulink仿真漂移机理分析(二):相图分析
  • R轻松玩转Excel数据
  • 课程记录:Windows2
  • 高德地图混合部署实战:离线瓦片与在线API的智能切换策略
  • 西安国文驾校二轮摩托车考驾照口碑如何,值得推荐吗 - 工业品牌热点
  • 探讨专业的精密锻造公司,三邑锻造在全国排名第几? - 工业推荐榜
  • 【一篇即毕业系列】C++的引用从基础到通天
  • 仅剩72小时!生态环境部新发布的《污染预测模型R实现规范》(HJ 1308-2024)强制适配倒计时(含兼容性迁移速查表)
  • 2026 本科生论文工具盘点:9 款 AI 工具搞定初稿 / 绘图 / 排版 / AI 率
  • leetcode 1389. Create Target Array in the Given Order 按既定顺序创建目标数组-耗时100
  • 国内免费AI聊天网站大全:稳定直连与高效响应指南
  • 从零开始了解数据采集——制造业数字孪生
  • 2026年北京老人陪护企业怎么选择,北京吉至嘉家政是优选 - myqiye
  • Web原生数据库工具选型指南:SQLynx vs Navicat在云环境下的真实表现
  • 探讨创新能力强的超薄弹簧不锈钢带加工厂,哪家口碑好? - 工业设备
  • 通义千问1.5-1.8B-Chat-GPTQ-Int4应用:AIGC内容创作中的提示词优化
  • 破局与共生:制造业数字化浪潮下的机床网络推广新生态 - 品牌推荐大师
  • [DotNet] Linux 下如何编译,才能得到一个不依赖任何 so 的独立二进制文件?
  • 树莓派5实战:用NCNN跑通YOLOv5目标检测(附完整代码)
  • 集对分析法在供应链风险管理中的5个典型应用场景(含Excel模板)