Java基础知识总结(上)
Java基础知识总结
1. Java语言的特点
-
简单易学,相较于python等语言具有较好的严谨性以及报错机制;
-
面向对象(封装,继承,多态),Java中所有内容都是基于类进行扩展的,由类创建的实体称为对象,并且对象之间存在不同的关系,由此发展出了继承、多态等语言特性;
-
平台无关性( Java 虚拟机实现平台无关性),Java语言通过JVM运行字节码文件的方式解决了平台间迁移代码的问题。Java分为编译与运行两部分,编译时只将Java代码转化为
.class字节码的过程(其他语言例如在安卓平台推广的Kotlin等,通过自己的编译器同样可以编译为字节码文件,满足JVM运行字节码文件的格式要求即可),然后JVM只需要运行字节码文件即可。但是在不同平台上运行的JVM是需要重新编写和编译的,但是这个步骤已经由oracle公司帮你完成了(当然也可以自己下载源码然后自己编译,并且可以修改JVM的内容,设计成你自己满意的虚拟机) -
支持多线程( C++ 语言早期没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);
-
可靠性、安全性,Java语言提供了GC-垃圾收集器,极大的便利了程序员不必设计类似于cpp中的析构函数以及对象的释放了;
-
支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便);
-
编译与解释并存(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. 位移运算符
位移运算法有>>> 、>> 和 << 三种,操作都是针对二进制数,同时只对整型类型有效。
移位操作符实际上支持的类型只有int和long,编译器在对short、byte、char类型进行移位前,都会将其转换为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语言的特点 简单易学,相较于python等语言具有较好的严谨性以及报错机制; 面向对象(封装,继承,多态),Java中所有内容都是基于类进行扩展的,由类创建的实体…...
MySQL 2:MySQL约束
一、定义 约束(constraint),即表中数据的限制条件。在表设计中加入约束的目的是保证表中记录的完整性和有效性。 比如user表,有些列(手机号)的值不能为空,有些列(身份证号ÿ…...
C4--Vivado添加列表中不存在的FLash器件2023-02-10
以华邦SPI FLASH W25Q128JVEIQ为例进行说明。(其他Flash添加步骤一致) 1.本地vivado安装目录D:\Softwares\xlinx_tools\Vivado\2020.2\data\xicom下,找到xicom_cfgmem_part_table.csv文件,这个表与vivado hardware manager中的器…...
php代码审计
准备工作 了解CMS的基本信息 该CMS使用的是什么设计模式?该CMS每个目录大概负责的功能(视图、缓存、控制器等)。该CMS处理请求的基本流程是如何走的?以及在系统中使用的全局过滤函数是如何对数据进行处理的? 代码审计方法 敏感函数回溯 …...
接口测试入门,如何划分接口文档
1.首先最主要的就是要分析接口测试文档,每一个公司的测试文档都是不一样的。具体的就要根据自己公司的接口而定,里面缺少的内容自己需要与开发进行确认。 我认为一针对于测试而言的主要的接口测试文档应该包含的内容分为以下几个方面。 a.具体的一个业…...
数据库学习第二天
第7章 系统预定义函数 函数:代表一个独立的可复用的功能。 和Java中的方法有所不同,不同点在于:MySQL中的函数必须有返回值,参数可以有可以没有。 MySQL中函数分为: (1)系统预定义函数&…...
NODE => CORS跨域资源共享学习
1.CORS跨域资源共享 cors是Express的一个第三方中间件。通过安装和配置cors中间件,可以很方便地解决跨域问题 运行npm install cors 安装中间件使用const cors require(‘cors’) 导入中间件在路由之前调用 app.use(cors()&#…...
golang rabbitMQ 生产者复用channel以及生产者组分发策略
引用的是rabbitMQ官方示例的库:github.com/rabbitmq/amqp091-go在网络编程中我们知道tcp连接的创建、交互、销毁等相关操作的"代价"都是很高的,所以就要去实现如何复用这些连接,并要做到高效并可靠。预期效果:项目初始化…...
掌握了这项技能的性能测试师,90%都升职加薪了
初入职场的新人该怎么做才能让自己快速成长?在公司一直做着手工测试,如何才能提升自己,避免陷入“只涨年龄不涨经验”的尴尬?做为一名软件测试工程师,我们不得不去面对这些问题,有的人找到了答案࿰…...
linux中crontab定时任务导致磁盘满和云监控未报警的的坑
一个后台开发者,兼职运维工作中,配置linux中crontab定时任务,导致磁盘满和云监控未报警的问题的坑。 1.磁盘满 使用命令 df -h2.问题排查 2.1排查日志 命令 cat /var/log/messages日志文件的默认路径是:/var/log 下面是几个…...
vscode中安装python运行调试环境
在运行代码之前,需要到微软商店下载安装python环境,35m,都是自动的。 1、安装python 的extensions插件。 ctrlshiftx 输入 python 后点击 install 按钮。 2、新建文件夹spider文件夹。 3、在新建文件夹spider下新建文件spider.py源代码。…...
【微服务】微服务架构超强讲解,通俗易懂
微服务架构目录一、微服务架构介绍二、出现和发展三、传统开发模式和微服务的区别四、微服务的具体特征五、面向服务的架构SOA(service oriented architecture)和微服务的区别1、SOA喜欢重用,微服务喜欢重写2、SOA喜欢水平服务,微…...
内核中的竞态产生的原因和解决方法
产生原因: 由于多进程对临界资源的抢占 根本原因: 1、对于单核处理器而言,内核支持抢占就会出现竞态 2、对于多核处理器而言,是核与核的竞态 3、进程与中断间存在竞态 4、arm开发板不会出现中断与中断间的竞态(目前&am…...
【微服务】Elasticsearch文档索引库操作(二)
🚗Es学习第二站~ 🚩Es学习起始站:【微服务】Elasticsearch概述&环境搭建(一) 🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 一.索引库操作 索引库就类似数据库表,mapping映射就类…...
【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型
【论文速递】NAACL2022-DEGREE: 一种基于生成的数据高效事件抽取模型 【论文原文】:DEGREE A Data-Efficient Generation-Based Event Extraction Mode 【作者信息】:I-Hung Hsu , Kuan-Hao Huang, Elizabeth Boschee ÿ…...
C++类和对象(下)
✨个人主页: Yohifo 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 I do not believe in taking the right decision. I take a decision and make it right. 我不相信什么正确的决定。我都是先做决定,然后把…...
Java常见的六种线程池、线程池-四种拒绝策略总结
点个关注,必回关 一、线程池的四种拒绝策略: CallerRunsPolicy - 当触发拒绝策略,只要线程池没有关闭的话,则使用调用线程直接运行任务。 一般并发比较小,性能要求不高,不允许失败。 但是,由于…...
Node=>Express中间件分类 学习4
1.中间件分类 应用级别的中间件路由级别的中间件错误级别的中间件Express 内置的中间件第三方的中间件 通过app.use()或app.get()或app.post()绑定到app实力上的中间件,叫做应用级别的中间件 …...
在阿里当外包,是一种什么工作体验?
上周和在阿里做外包的朋友一起吃饭,朋友吃着吃着,就开启了吐槽模式。 他一边喝酒一边说,自己现在做着这份工作,实在看不到前途。 看他状态不佳,问了才知道,是手上的项目太磨人。 他们现在做的项目&#…...
Vue3快速入门【二】
Vue3快速入门一、传值父传子,子传父v-model二、插槽2.1、匿名插槽2.2、具名插槽2.3、插槽作用域2.4、插槽作用域案例2.4.1、初始布局2.4.2、插槽使用2.4.3、点击编辑按钮获取本行数据(插槽作用域的使用)2.4.4、类型书写优化2.4.5、全局接口抽…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
