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

Java基础知识总结(上)

Java基础知识总结

1. Java语言的特点

  1. 简单易学,相较于python等语言具有较好的严谨性以及报错机制;

  2. 面向对象(封装,继承,多态),Java中所有内容都是基于类进行扩展的,由类创建的实体称为对象,并且对象之间存在不同的关系,由此发展出了继承、多态等语言特性;

  3. 平台无关性( Java 虚拟机实现平台无关性),Java语言通过JVM运行字节码文件的方式解决了平台间迁移代码的问题。Java分为编译与运行两部分,编译时只将Java代码转化为.class字节码的过程(其他语言例如在安卓平台推广的Kotlin等,通过自己的编译器同样可以编译为字节码文件,满足JVM运行字节码文件的格式要求即可),然后JVM只需要运行字节码文件即可。但是在不同平台上运行的JVM是需要重新编写和编译的,但是这个步骤已经由oracle公司帮你完成了(当然也可以自己下载源码然后自己编译,并且可以修改JVM的内容,设计成你自己满意的虚拟机)

  4. 支持多线程( C++ 语言早期没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);

  5. 可靠性、安全性,Java语言提供了GC-垃圾收集器,极大的便利了程序员不必设计类似于cpp中的析构函数以及对象的释放了;

  6. 支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便);

  7. 编译与解释并存(java->.class是编译,.class->运行是解释),虚拟机在运行代码时首先由类加载器加载字节码文件(生成了Class对象),然后通过解释器一步步执行,虽然在字节码中已经比较偏向与底层了,但是由解释器转化为机器码仍然消耗时间,所以在执行效率上相较于cpp、go等还是稍显逊色。

2. JVM、JDK、JRE三者的关系

  • JVM就是Java虚拟机,是运行字节码文件的虚拟机。但是虚拟机并不是只有一种,常用的是HotSpot(oracle的)还有J9、JRockit等都是其他公司设置的,不同的虚拟机中使用的垃圾收集器-GC的逻辑、内存模型等都有区别,我们在平时使用时使用oracle提供的就可以(最常用的)。
  • JRE - Java Runtime Environment,Java运行时环境,其中包含了JVM、Java类库、java命令和一些基础组件,可以直接运行字节码文件,但是不能对Java代码进行编译。
  • JDK - Java Development Kit,包含了JRE以及javac等命令,可以进行Java文件等编译等。

3. 注释

Java中存在三种注释:单行注释、多行注释、文档注释

  • 单行注释采用//的方式进行,在本行中的所有内容在编译时都将忽略
  • 多行注释采用/* 内容 */的方式进行,在中间的部分都认为是注释,通常用于注释多行代码
  • 文档注释采用/** 内容 */的方式,一般在类上、方法上使用,其中可以html语法,并且在生成Java开发文档时将自动将注释部分作为文档中的内容

在开发过程中多写注释是一个好习惯,当代码量非常巨大的时候,往往注释可以很方便的告知使用者类、方法的具体含义,以此减少沟通成本、提高系统的开发效率

4. 标识符 和 关键字

标识符就是在Java程序中设置的各种类、方法、变量等的名字,同时还有一些标识符例如if、for等是Java已经赋予了特殊含义的标识符称为关键字。各种关键字有哪些可以在官网上查看:官网

5. 自增自减运算符(++、–)

自增、自减运算符可以用于整型数据以及浮点数据上,其中也包括char类型。

++ 位于变量名之前,则优先运算++的值,并将结果用于外部等式的运算。

若位于变量名之后,则优先进行外部等式的运算,在计算完成后变量再进行加减计算。

6. 位移运算符

位移运算法有>>> 、>><< 三种,操作都是针对二进制数,同时只对整型类型有效。

移位操作符实际上支持的类型只有intlong,编译器在对shortbytechar类型进行移位前,都会将其转换为int类型再操作

对于int类型当唯一次数大于32次时会首先对位移数向32求余,类似于a >>> 33等价于a >>> 1,对于long类型是向64求余。

7. continue、break、return的区别

三者的作用效果是不同的,continue是跳出本次循环,若循环没有满足结束条件则会继续下次循环,break是直接跳出循环,return是直接跳出方法,当return所在的方法返回值类型不为void时需要返回一个值。

8. 成员变量与局部变量

成员变量属于类,可以使用static、final关键词进行修饰,使用static关键字修饰是变量存在于方法区,当没有采用static关键字进行修饰时,变量随对象的创建一同创建,对象存在于堆内,所以变量也存在于堆内。成员变量会由虚拟机进行一次初始化为默认值的过程,因此可以不进行初始化也能使用。

局部变量属于方法,可以使用final进行修饰,局部变量在方法被调用时创建,同时局部变量也需要初始化后使用,因为调用方法并不会对局部变量进行默认的初始化。

9. 静态变量 与 常量

静态变量值的是可以直接通过类进行访问的变量,与对象无关。

当变量没有使用final进行修饰时,变量的值是可以改变的,可以通过类也可以通过对象。当使用final进行修饰后,该变量就被称为常量,因为这个变量是一个不会变化的变量,并且通过类就可以直接访问得到。

10. 静态方法

静态方法中不可以使用非静态成员,因为静态成员在调用的时候可能还有类的对象被创建,但是非静态成员变量又存储在对象实例中,一个已经存在并且被调用的方法,是无法访问一个还没有被创造出来的对象的。

11. 重载 与 重写

方法重写指得是将继承自父类的方向重新进行实现,而重载指的是同一个方法根据形参的不同设置不同的实现。

12. 可变长参数

可变长参数指的是调用方法时可以传入多个参数(参数的数量是不固定的)

并且一个方法只能有一个可变长参数,并且可变长参数必须是所有参数中的最后一点,可变长参数前面的参数在调用时不可省略。

若遇到方法重载时,其中一种使用了可变长参数,两个方法同时满足调用要求时,在运行时实际调用的应该是哪个方法呢? – 答案是 优先调用不含邮可变长参数的方法。

13. 包装类

包装类是基本数据类型封装得到的引用类型对象,可以在范型中使用,同时每种包装类型都对一定范围中的数据进行了封装例如Integer封装了-128,127。

虽然进行缓存封装,但是直接采用new关键字创建对象时还是会重写去创建一个新的对象,并不会直接使用缓存中的,若想使用缓存中的可以使用valueOf方法。

同时引用类型若存在对象比较是否相同时,一定要采用equals方法。

14. 自动拆箱、装箱

自动拆箱会在需要使用基本类型的地方自动将封装类的对象转化为基本类型,而在需要使用封装类的地方自动进行装箱。

浮点值存在精度问题,因为在计算机中存储的是二进制,无法表示无限不得小数位的,若想避免这种问题可以使用BigDecimal和BigInteget。

相关文章:

Java基础知识总结(上)

Java基础知识总结 1. Java语言的特点 简单易学&#xff0c;相较于python等语言具有较好的严谨性以及报错机制&#xff1b; 面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;Java中所有内容都是基于类进行扩展的&#xff0c;由类创建的实体…...

MySQL 2:MySQL约束

一、定义 约束&#xff08;constraint&#xff09;&#xff0c;即表中数据的限制条件。在表设计中加入约束的目的是保证表中记录的完整性和有效性。 比如user表&#xff0c;有些列&#xff08;手机号&#xff09;的值不能为空&#xff0c;有些列&#xff08;身份证号&#xff…...

C4--Vivado添加列表中不存在的FLash器件2023-02-10

以华邦SPI FLASH W25Q128JVEIQ为例进行说明。&#xff08;其他Flash添加步骤一致&#xff09; 1.本地vivado安装目录D:\Softwares\xlinx_tools\Vivado\2020.2\data\xicom下&#xff0c;找到xicom_cfgmem_part_table.csv文件&#xff0c;这个表与vivado hardware manager中的器…...

php代码审计

准备工作 了解CMS的基本信息 该CMS使用的是什么设计模式&#xff1f;该CMS每个目录大概负责的功能(视图、缓存、控制器等)。该CMS处理请求的基本流程是如何走的&#xff1f;以及在系统中使用的全局过滤函数是如何对数据进行处理的&#xff1f; 代码审计方法 敏感函数回溯 …...

接口测试入门,如何划分接口文档

1.首先最主要的就是要分析接口测试文档&#xff0c;每一个公司的测试文档都是不一样的。具体的就要根据自己公司的接口而定&#xff0c;里面缺少的内容自己需要与开发进行确认。 我认为一针对于测试而言的主要的接口测试文档应该包含的内容分为以下几个方面。 a.具体的一个业…...

数据库学习第二天

第7章 系统预定义函数 函数&#xff1a;代表一个独立的可复用的功能。 和Java中的方法有所不同&#xff0c;不同点在于&#xff1a;MySQL中的函数必须有返回值&#xff0c;参数可以有可以没有。 MySQL中函数分为&#xff1a; &#xff08;1&#xff09;系统预定义函数&…...

NODE => CORS跨域资源共享学习

1.CORS跨域资源共享 cors是Express的一个第三方中间件。通过安装和配置cors中间件&#xff0c;可以很方便地解决跨域问题 运行npm install cors 安装中间件使用const cors require(‘cors’) 导入中间件在路由之前调用 app.use&#xff08;cors&#xff08;&#xff09;&#…...

golang rabbitMQ 生产者复用channel以及生产者组分发策略

引用的是rabbitMQ官方示例的库&#xff1a;github.com/rabbitmq/amqp091-go在网络编程中我们知道tcp连接的创建、交互、销毁等相关操作的"代价"都是很高的&#xff0c;所以就要去实现如何复用这些连接&#xff0c;并要做到高效并可靠。预期效果&#xff1a;项目初始化…...

掌握了这项技能的性能测试师,90%都升职加薪了

初入职场的新人该怎么做才能让自己快速成长&#xff1f;在公司一直做着手工测试&#xff0c;如何才能提升自己&#xff0c;避免陷入“只涨年龄不涨经验”的尴尬&#xff1f;做为一名软件测试工程师&#xff0c;我们不得不去面对这些问题&#xff0c;有的人找到了答案&#xff0…...

linux中crontab定时任务导致磁盘满和云监控未报警的的坑

一个后台开发者&#xff0c;兼职运维工作中&#xff0c;配置linux中crontab定时任务&#xff0c;导致磁盘满和云监控未报警的问题的坑。 1.磁盘满 使用命令 df -h2.问题排查 2.1排查日志 命令 cat /var/log/messages日志文件的默认路径是&#xff1a;/var/log 下面是几个…...

vscode中安装python运行调试环境

在运行代码之前&#xff0c;需要到微软商店下载安装python环境&#xff0c;35m&#xff0c;都是自动的。 1、安装python 的extensions插件。 ctrlshiftx 输入 python 后点击 install 按钮。 2、新建文件夹spider文件夹。 3、在新建文件夹spider下新建文件spider.py源代码。…...

【微服务】微服务架构超强讲解,通俗易懂

微服务架构目录一、微服务架构介绍二、出现和发展三、传统开发模式和微服务的区别四、微服务的具体特征五、面向服务的架构SOA&#xff08;service oriented architecture&#xff09;和微服务的区别1、SOA喜欢重用&#xff0c;微服务喜欢重写2、SOA喜欢水平服务&#xff0c;微…...

内核中的竞态产生的原因和解决方法

产生原因&#xff1a; 由于多进程对临界资源的抢占 根本原因&#xff1a; 1、对于单核处理器而言&#xff0c;内核支持抢占就会出现竞态 2、对于多核处理器而言&#xff0c;是核与核的竞态 3、进程与中断间存在竞态 4、arm开发板不会出现中断与中断间的竞态&#xff08;目前&am…...

【微服务】Elasticsearch文档索引库操作(二)

&#x1f697;Es学习第二站~ &#x1f6a9;Es学习起始站&#xff1a;【微服务】Elasticsearch概述&环境搭建(一) &#x1f6a9;本文已收录至专栏&#xff1a;微服务探索之旅 &#x1f44d;希望您能有所收获 一.索引库操作 索引库就类似数据库表&#xff0c;mapping映射就类…...

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型

【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型 【论文原文】&#xff1a;DEGREE A Data-Efficient Generation-Based Event Extraction Mode 【作者信息】&#xff1a;I-Hung Hsu &#xff0c; Kuan-Hao Huang&#xff0c; Elizabeth Boschee &#xff…...

C++类和对象(下)

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 I do not believe in taking the right decision. I take a decision and make it right. 我不相信什么正确的决定。我都是先做决定&#xff0c;然后把…...

Java常见的六种线程池、线程池-四种拒绝策略总结

点个关注&#xff0c;必回关 一、线程池的四种拒绝策略&#xff1a; CallerRunsPolicy - 当触发拒绝策略&#xff0c;只要线程池没有关闭的话&#xff0c;则使用调用线程直接运行任务。 一般并发比较小&#xff0c;性能要求不高&#xff0c;不允许失败。 但是&#xff0c;由于…...

Node=>Express中间件分类 学习4

1.中间件分类 应用级别的中间件路由级别的中间件错误级别的中间件Express 内置的中间件第三方的中间件 通过app.use&#xff08;&#xff09;或app.get&#xff08;&#xff09;或app.post&#xff08;&#xff09;绑定到app实力上的中间件&#xff0c;叫做应用级别的中间件 …...

在阿里当外包,是一种什么工作体验?

上周和在阿里做外包的朋友一起吃饭&#xff0c;朋友吃着吃着&#xff0c;就开启了吐槽模式。 他一边喝酒一边说&#xff0c;自己现在做着这份工作&#xff0c;实在看不到前途。 看他状态不佳&#xff0c;问了才知道&#xff0c;是手上的项目太磨人。 他们现在做的项目&#…...

Vue3快速入门【二】

Vue3快速入门一、传值父传子&#xff0c;子传父v-model二、插槽2.1、匿名插槽2.2、具名插槽2.3、插槽作用域2.4、插槽作用域案例2.4.1、初始布局2.4.2、插槽使用2.4.3、点击编辑按钮获取本行数据&#xff08;插槽作用域的使用&#xff09;2.4.4、类型书写优化2.4.5、全局接口抽…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...

精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑

精益数据分析&#xff08;98/126&#xff09;&#xff1a;电商转化率优化与网站性能的底层逻辑 在电子商务领域&#xff0c;转化率与网站性能是决定商业成败的核心指标。今天&#xff0c;我们将深入解析不同类型电商平台的转化率基准&#xff0c;探讨页面加载速度对用户行为的…...

spring boot使用HttpServletResponse实现sse后端流式输出消息

1.以前只是看过SSE的相关文章&#xff0c;没有具体实践&#xff0c;这次接入AI大模型使用到了流式输出&#xff0c;涉及到给前端流式返回&#xff0c;所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...