当前位置: 首页 > 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、全局接口抽…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...