【java基础】总结一

目录

特点

JavaSE和JavaEE

JVM,JDK,JRE

字节码

编译语言和解释语言

AOT介绍

不同jdk

java语法

变量

静态方法

静态方法和实例方法

重载和重写

可变长参数

特点

简单,面向对象(封装、继承、多态),平台无关(java虚拟机实现),多线程支持,可靠性(异常处理+自动内存处理),安全性(多重防护机制),高效性,网络编程支持,编译和解释共存。

很多语言通过docker也可以实现跨平台

java生态优势

JavaSE和JavaEE

Java 平台标准版,构建桌面应用程序或简单的服务器应用程序。

Java 平台企业版=JavaSE+企业级规范( Servlet、JSP、EJB、JDBC、JPA、JTA、JavaMail、JMS)等,构建Web 应用程序。

JVM,JDK,JRE

JVM:java虚拟机

JVM可以专属,常用的是HotSpot VM

JDK:java开发工具包(JRE,javac,调试器jdb,监控工具反编译等等)

JRE=JVM+java基础类库(常用功能,api通信数据结构等)

jdk9开始:模块系统(JDK 被重新组织成 94 个模块)+ jlink 工具(可以根据自己的需求,创建一个更小的 runtime的JRE) 代替了JDK

字节码

字节码(即扩展名为 .class 的文件),面向JVM

JIT编译器--运行时编译,Java 是编译与解释共存的语言

编译语言和解释语言

Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。

AOT介绍

jdk9引入新的编译模式 AOT(Ahead of Time Compilation) ,直接像其他语言一样一步到位,程序被执行前就将其编译成机器码。无法支持 Java 的一些动态特性,如反射、动态代理、动态加载、JNI(Java Native Interface)等,很多框架和库(如 Spring、CGLIB)都用到了这些特性。

AOT 的主要优势在于启动时间、内存占用和打包体积。AOT 更适合当下的云原生场景,对微服务架构的支持也比较友好。

JIT 的主要优势在于具备更高的极限处理能力,可以降低请求的最大延迟。

不同jdk

Oracle JDK 使用 BCL/OTN 协议获得许可,而 OpenJDK 根据 GPL v2 许可获得许可

java语法

所有的关键字都是小写的。

两种浮点数类型的包装类 Float,Double 并没有实现缓存机制。

所有整型包装类对象之间值的比较,全部使用 equals 方法比较

缓存中的可以使用==比较

浮点数运算精度丢失

大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal 来做的。

变量

成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。

成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。

成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。

成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。

默认值有两种设置方式:手动和自动,根据第一点,没有手动赋值一定要自动赋值。成员变量在运行时可借助反射等方法手动赋值,而局部变量不行。

静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。

注意 char 在 Java 中占两个字节。

静态方法

不能调用静态成员

  • 静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。而非静态成员属于实例对象,只有在对象实例化之后才存在,需要通过类的实例对象去访问。
  • 在类的非静态成员不存在的时候静态方法就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作。

静态方法和实例方法

在外部调用静态方法时,可以使用 类名.方法名 的方式,也可以使用 对象.方法名 的方式,而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象 。

一般建议使用 类名.方法名 的方式来调用静态方法。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),不允许访问实例成员(即实例成员变量和实例方法),而实例方法不存在这个限制。

重载和重写

重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。

重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写。

可变长参数

java5开始

Java 的可变参数编译后实际会被转换成一个数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue内置指令和自定义指令

常见的指令: v-bind : 单向绑定解析表达式, 可简写为 :xxx v-model : 双向数据绑定 v-for : 遍历数组/对象/字符串 v-on : 绑定事件监听, 可简…

redis linux 安装

下载解压 https://download.redis.io/releases/ tar -zvxf ----redis-7.4.1编译 进入目录下 # redis 依赖c yum install gcc-cmake可能会有问题,所以记得换源# 安装到 /usr/local/redis make PREFIX/usr/local/redis installcd src ./redis-serverredis.confi…

使用ACF插件向WooCommerce商城产品添加自定义字段

WooCommerce网站的一个常见请求是需要在单个产品页面上包含额外的字段输入,并在前端输出它们。我将解释如何使用出色的ACF高级自定义字段插件(免费版)来实现这一点。 需要编写一些代码,但不用担心,一切都非常简单。此…

3.task1 suimove helloword 上链

1.创建项目 sui move new hello_world 2.代码部分 module hello_move::hello {use std::ascii::{String, string};use sui::object::{Self,UID};use sui::transfer::transfer;use sui::tx_context::{TxContext, sender};public struct Hello has key{id:UID,say: String}fun …

CSS回顾-基础知识详解

一、引言 在前端开发领域,CSS 曾是构建网页视觉效果的关键,与 HTML、JavaScript 一起打造精彩的网络世界。但随着组件库的大量涌现,我们亲手书写 CSS 样式的情况越来越少,CSS 基础知识也逐渐被我们遗忘。 现在,这种遗…

从0开始机器学习--Day27--主成分分析方法

主成分分析方法(Principal components analysis) 在降维算法中,比较普遍的是使用主成分分析方法(PCA) PCA算法简单示例 如图,假设我们有一个二维的特征,想要将其降为一维,简单的方法是寻找一条直线&#…

电子工牌独立双通道定向拾音方案(有视频演示)

现在一些行业的客服人员在面对客户都要求使用电子工牌分别记录客服和顾客的声音,我们利用双麦克风阵列双波束拾音的方案设计了一个电子工牌方案.可以有效分别记录客服和顾客的声音. 方案思路: 我们采用了一个双麦阵列波束拾音的模块A-59,此模块可以利用2个麦克风组成阵列进行双…

Qt Quazip压缩解压实例

qt 中Quazip封装了zip压缩解压操作类,windows编译出dll,lib 最简单的使用示例如下:

小程序19-微信小程序的样式和组件介绍

在小程序中不能使用 HTML 标签,也就没有 DOM 和 BOM,CSS 也仅支持部分选择器 小程序提供了 WXML 进行页面结构的编写,WXSS 进行页面的样式编写 WXML 提供了 view、text、image、navigator等标签构建页面结构,小程序中标签称为组件…

HCIP-HarmonyOS Application Developer 习题(二十二)

1、用户将手机导航迁移至智能手表之后,智能手表如果需要获取手机传过来的数据,从下列哪个方法中获取? A、onCompleteContinuation() B、onStartContinuation() C、onRestoreData() D、onSaveData() 答案:C 分析:FA发起迁移后&am…

动态规划-背包问题——[模版]完全背包问题

1.题目解析 题目来源 [模版]完全背包_牛客题霸_牛客 测试用例 2.算法原理 1.状态表示 与01背包相同,这里的完全背包也是需要一个二维dp表来表示最大价值,具体如下 求最大价值dp[i][j]:在[1,i]区间选择物品,此时总体积不大于j时的最大价值 求…

高效分支管理规范

一、目的 通过标准化的流程和最佳实践,确保代码组织清晰、版本控制高效、变更管理有序,从而提高软件开发的质量、效率和可维护性,支持团队协作和持续集成/持续部署流程,最终实现项目的长期成功和发展 二、分支命名规范 简洁明了…

前后端分离练习(云客项目)

这几天学习了一点前端的开发,后面通过这个小项目来整理开发的过程,参考的是动力节点的动力云客这个项目,大家有兴趣可以去看一下视频,我更多的是学习了它的前端开发,后端我是用自己的方式来的,那么开始今天…

linux001.在Oracle VM VirtualBox中ubuntu虚拟系统扩容

1.打开终端切换到virtualBox安装目录 2.输入命令扩容 如上终端中的代码解释: D:\Program Files\Oracle\VirtualBox>.\VBoxManage modifyhd D:\ubuntu18.04\Ubuntu18.04\Ubuntu18.04.vdi --resize 40960如上代码说明:D:\Program Files\Oracle\Virtual…

小版本大不同 | Navicat 17 新增 TiDB 功能

近日,Navicat 17 迎来了小版本更新。此次版本新增了对 PingCap 公司的 TiDB 开源分布式关系型数据库的支持,进一步拓展了 Navicat 的兼容边界。即日起,Navicat 17 所有用户可免费升级至最新版本,通过 Navicat 工具实现 TiDB 数据库…

Flutter:key的作用原理(LocalKey ,GlobalKey)

第一段代码实现的内容:创建了3个块,随机3个颜色,每次点击按钮时,把第一个块删除 import dart:math; import package:flutter/material.dart; import package:flutter_one/demo.dart;void main() {runApp(const App()); }class App…

10款PDF翻译工具的探索之旅:我的使用经历与工具特色!!

在如今的时代,PDF文件已经成为我们工作、学习和生活中不可或缺的一部分。但是,当遇到一些非母语或陌生语言的PDF文档时,这要怎么办呀!这时候翻译工具就显得尤为重要了。这也是我所遇到过的难题,现在我将与大家分享几款…

L11.【LeetCode笔记】有效的括号

目录 1.题目 2.分析 理解题意 解决方法 草稿代码 ​编辑 逐一排错 1.当字符串为"["时,分析代码 2.当字符串为"()]"时,分析代码 正确代码(isValid函数部分) 提交结果 3.代码优化 1.题目 https://leetcode.cn/problems/valid-parentheses/descri…

创建vue插件,发布npm

开发步骤:1.创建一个vue项目,2.开发一个组件。 3.注册成插件。 4.vite和package.json配置。5.发布到npm 1.创建一个vue项目 npm create vuelatest 生成了vue项目之后,得到了以下结构。 在src下创建个plugins目录。用于存放开发的…

Android OpenGL ES详解——实例化

目录 一、实例化 1、背景 2、概念 实例化、实例数量 gl_InstanceID 应用举例 二、实例化数组 1、概念 2、应用举例 三、应用举例——小行星带 1、不使用实例化 2、使用实例化 四、总结 一、实例化 1、背景 假如你有一个有许多模型的场景,而这些模型的…