Java语言基础(上)

Java 语言的特点

  • 面对对象:Java 中所有的数据和方法都封装在对象
  • 跨平台性:Java 通过 Java 虚拟机,可以在不同的操作系统上运行相同的程序
  • 自动内存管理:Java 提供垃圾回收机制,不需要手动管理内存
  • 强类型语言:Java 编译器在编译时会进行类型检查
  • 多线程支持:Java 语言支持多线程
  • 异常处理:Java 使用异常处理机制来处理运行时错误

JVM JDK JRE

  • JVMJava 虚拟机,使 Java 程序在不同平台运行,JVM 将 Java 程序编译后的字节码文件,然后解释成机器码执行。
  • JDKJava 开发工具包,包括 JRE、开发工具和 Java 类库
  • JRE:JRE 是 Java 运行时环境,包括 JVM 和基本类库,没有开发工具

什么是跨平台性?原理是什么?

  • 跨平台性:程序一次编译,不需要修改,就可以在不同的系统运行
  • 原理:JVM 将 Java 程序编译后的字节码文件解释成机器码执行,JVM 针对不同的系统有不同的实现

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

  • 字节码是 Java 程序编译后生成的.class 文件,在 JVM 上运行
  • 好处:
    • 实现 Java 程序的平台无关性
    • 生成字节码文件的编译过程比直接解释执行速度快
    • 字节码相比于机器码,更容易维护和调试

Java 和 C++ 的区别?

  • 面对对象:Java 是面对对象的语言;C++ 支持面对对象,也有面对过程编程
  • 内存管理:Java 使用垃圾回收机制自动管理内存;C++ 需要手动管理内存
  • 跨平台性:Java 具有跨平台性;C++ 移植性差
  • 异常处理:Java 使用异常处理机制,强制处理异常情况;C++ 不强制

注释?

  • 单行注释
  • 多行注释
  • 文档注释

关键字

  • 基本类型:int; long; short; byte; char; float; double; boolean
  • 程序控制:break; contine; return; instanceof; default
  • 访问控制:private; protected; public
  • 类、方法:abstract; class; extends; final; implements; interface; native; new; static; synchronized; transient; volatile
  • 错误处理:try-catch; throw; throws
  • 包相关:import; package
  • 变量引用:super; this; void

关键字 instanceof

  • 检验是否是类对象

类型转换

  • 子类到父类的转换(向上转型):通常用来实现多态性,通过父类引用来调用子类对象的方法,实现方法的动态绑定
  • 父类到子类的转换(向下转型):强制类型转换,可能出现 ClassCastException 异常,需要使用 instanceof 关键字

关键字 this 和 super

  • this: 引用当前对象
  • super:引用父类对象

关键字 final finally finalize?

  • final:用来修饰不可变的实体,例如类、方法、变量等
  • finally:用于定义在异常处理中,无论是否发生异常,finall 中的代码一定会执行;通常用于释放资源
  • finalize:Object 类的方法,用于对象被垃圾回收前进行释放资源
    但由于 JVM 的垃圾回收是不确定的。finalize 不一定能有效回收对象资源;
    推荐使用 try-with-resource 方法

自增自减运算符

  • 前缀:先加减,后返回值 ++i
  • 后缀:先返回值,然后加减 i++

continue、break 和 return 区别?

  • contine:跳出当前循环,进行下一次循环
  • break:跳出整个循环体
  • return结束方法,并返回值

变量按照数据类型的分类?

  • 基本数据类型
    • 数值型:byte; int; short; long
    • 浮点型:float; double
    • 字符型:char
    • 布尔型:boolean
  • 引用数据类型
    • 类:class
    • 接口:interface
    • 数组:array

讲讲数组的声明?

要使用 Java 数组,分为两个步骤:声明数组分配内存

  • 数组声明后在栈内存中保存数组的名称
  • 然后在堆内存中分配数组所需要的内存
数据类型 数组名[] = null; //声明一维数组
数据名 = new 数据类型[长度]; //分配内存给数组
int array[] = null;
array = new int[5];

变量按照声明位置的分类?

  • 类变量:定义在中,使用 static 修饰,类变量在内存中只有一份
  • 实例变量:定义在中,属于类对象
  • 局部变量:定义在方法代码块

成员变量和局部变量?

  • 成员变量
    • 也称实例变量
    • 定义在类中方法体外,作用域是整个,存储在堆内存
    • 默认值
    • 可以用访问权限控制修饰符修饰
  • 局部变量
    • 定义在方法或代码块中,作用域是所在的方法或代码块中,存储在栈内存
    • 必须显式赋值
    • 只能在方法或代码块中使用,不需要访问修饰符

静态变量?

  • 也称类变量
  • 是指在类中使用 static 关键字定义的变量,属于,不属于类的任何一个对象
  • 在类加载的时候就被初始化了,存储在静态存储区,不在堆内存中
  • 在整个程序执行期间只有一份拷贝,被所有实例对象共享使用

字符型常量和字符串常量的区别?

  • 数据类型不同:
    • 字符型常量是 char 类型,表示单个字符
    • 字符串常量是 String 类型,表示多个字符组成的字符串
  • 表示形式不同:
    • 字符型常量用单引号引起来
    • 字符串常量是双引号引来的 0 个或者若干字符
  • 占内存空间不同:
    • 字符型常量占 2 个字节
    • 字符串常量占若干个字节
  • 比较方式不同:
    • 字符型常量可以使用==运算符进行比较,比较两个字符的 Unicode 编码
    • 字符串常量使用则是比较两个字符串对象的引用地址,通常使用 equal() 方法比较两个字符串的内容是否相同

方法的返回值?方法的类型?

  • 返回值:方法体执行后产生的结果
  • 方法的类型:按照是否有形参及返回值可以组合为四种

静态方法为什么不能调用非静态成员?

  • 静态方法属于在类加载的时候就会初始化,可以直接通过类名直接访问
  • 非静态成员属于实例对象,只有在对象实例化后才存在,需要通过类的对象去访问
  • 所以,非静态成员不存在时,静态方法去内存调用,属于非法操作

静态方法和实例方法?

  • 静态方法属于,通常使用类名.方法名方式访问
  • 实例方法属于对象,通过对象.方法名访问
  • 静态方法,只能调用静态成员,不能访问实例方法

重写和重载?

  • 重写:子类继承父类,重新实现父类的方法,方法名、参数列表和返回值必须和父类的方法相同
  • 重载:重载就是方法名称相同,但参数的类型和参数的个数不同。通过传递参数的个数和类型的不同可以完成不同功能的方法调用

基本类型和包装类型?

  • 基本类型: Java 中最基本的数据类型,包括 boolean,byte,int,long,short,float,double,char
  • 包装类型:将基本类型包装成一个对象的类,包括 Boolean,Byte,Integer,Long,Short,Float,Double,Character

基本类型和包装类型的不同?

  • 包装类型是引用类型,需要使用 new 创建对象,且包装类型不可变;而基本类型是值类型,不需要创建对象
  • 基本类型有默认值,成员变量的包装类型不赋值就是 null
  • 在泛型、反射中,只能使用包装类型,不能使用基本类型

自动装箱与拆箱?

  • 自动装箱:将基本类型值转换为对应的包装类型实例 valueOf()
    Integer i = 10; //等价于 Integer i = Integer.valueof(i);
  • 自动拆箱:将包装类型实例转换为对应的基本类型值 intValue()
    int n = i;//等价于 int n = i.intValue();

包装类型的缓存机制?

  • 类初始化时,提前为常见范围内的数创建了一个缓存数组
  • 例如 Integer 类型,Java 会在缓存数组中创建 -128~127 的所有整数的对象
    如果通过 valueOf() 方法传入这个范围内的整数,就会直接返回缓存中的对象,而不是创建一个新的对象
    这样就避免了频繁创建和销毁对象,提高了程序的性能
  • 对于超出缓存范围的数值,valueOf() 方法依然会创建新的对象

为什么浮点数会有精度丢失的风险?

  • 浮点数在计算机中是通过二进制小数来表示的
  • 但有一些小数无法准确用有限个二进制位来表示,这种情况就会出现精度丢失的问题

如何解决浮点数运算的精度丢失?

  • 使用 BigDecimal 类
  • 在比较浮点数是否相等时,避免直接使用 “==” 运算符

超过 long 整型的数据如何表示?

  • 使用 BigInteger 类

对象实例和对象引用有什么不同?

  • 对象实例:是一个具体的实体,在内存中有对应的存储空间。对象实例通常是根据来创建的,一个类可以 new 关键字创建多个对象实例
  • 对象引用:是一个指针,指向内存中实际的对象实例。存储的是对象在内存中地址
  • 对象实例的声明周期由 JVM 垃圾回收机制管理,对象引用声明周期由程序控制

对象的相等和引用相等的区别?

  • 对象的相等:内存中存放的内容是否相等
  • 引用相等:指向的内存地址是否相等

构造方法有哪些特点?是否可以被 override?

构造方法是一种特殊的方法,用于创建和初始化对象,具有以下特点:

  • 构造方法的名字必须和类名相同
  • 没有返回值类型
  • 如果没有显示定义构造方法,Java 会默认提供一个无参的构造方法
  • 构造方法在对象被创建的时候自动调用,不能手动调用
  • 不能被重写,如果子类需要增加属性或方法,可以使用 super() 来调用父类的构造方法,在子类的构造方法中添加新的代码

JavaBean?

  • JavaBean 是一种特殊的 Java 类,遵循一定的规范,可以被多种工具和框架使用
  • JavaBean 主要用于简化 Java 对象的创建和管理,同时提供标准化的方式来访问 Java 对象的属性

JavaBean 要求

  • 所有的属性都是私有
  • 有一个无参的构造方法
  • 有 get 和 set 方法

深拷贝 浅拷贝 引用拷贝?

  • 深拷贝
    将被复制对象完全复制一份,即在内存中重新开辟一个地址存放新对象,并且新对象和原对象没有任何关系
    修改新对象不会影响原对象

  • 浅拷贝
    拷贝对象和原对象的引用类型引用同一个对象,即在内存中开辟新空间存储一个新对象,并且这个新对象与原对象共享内存中的属性值
    即修改一个对象的属性值,另一个对象的属性值也会发生改变

  • 引用拷贝
    将被复制对象的引用地址直接复制给一个新的对象,指向同一个内存空间
    修改其中一个对象的属性值,另一个对象的属性值也会发生改变
    image-20230316163736669

Object 类的方法?

  • getClass():返回当前运行时对象的 Class 对象
  • hashCode():返回对象的哈希码
  • equals():比较对象的内存地址是否相等
  • clone():创建并返回当前对象的一份拷贝
  • toString():返回对象的字符串表示
  • notify():唤醒一个在对象监视器上等待的线程
  • notifyAll():唤醒对象监视器上等待的所有线程
  • wait()暂停线程的执行
  • finalize():实例被垃圾回收器回收时触发的操作

==和 equals() 的区别?

  • ==运算符:用于比较两个对象引用是否指向同一个对象
    如果两个对象的物理地址相同,则相同
  • equals() :用于比较两个对象的内容是否相等
    默认情况下,比较的是两个对象的物理地址,但可以通过重写来比较两个对象的内容是否相同
    在重写 equals 方法时,通常还需要重写 hashCode() 方法

接口和抽象类

接口的方法不可以有实现,并且是绝对的抽象方法。抽象类可以有实例方法用来实现默认行为
接口用来定义契约行为,也可作为两个系统间的契约进行交互
而抽象类主要用来为子类定义默认行为,也就是说所有的继承子类都需要运行相同的功能

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

矩阵的除法

B/A 如果矩阵A可逆,那么 证明: A/AB 如果矩阵A和B都可逆,那么 证明:

Ubuntu系统使用apt-get管理软件工具

记录一下使用Ubuntu系统的apt-get管理软件工具 先查看一下系统的版本,可以看到这里使用的是Ubuntu20.04版本,版本代号focal rootmyw:~# uname -a Linux myw 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/L…

GEE:基于 Landsat 计算的 kNDVI 应用 APP

作者:CSDN @ _养乐多_ 本文记录了在Google Earth Engine(GEE)平台中,使用 Landsat 遥感数据计算 kNDVI 的应用 APP 链接,并介绍该 APP 的使用方法和步骤。该APP可以为用户展示 NDVI 和 kNDVI 的遥感影像,进行对比分析。该 APP 在 Google Earth Engine(GEE)平台中实现。…

2022年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 有n个按名称排序的商品,使用对分查找法搜索任何一商品,最多查找次数为5次,则n的值可能为?()(2分) A.5 B.15 C.30 D.35 答案:C 答案解析:对分查找最多查找次数m与个数之间n的…

@JSONField或@JsonProperty注解使用

一、需求 使用JSONField或JsonProperty注解,来解决bean与json字段不一致问题,或者字段定义不符合前端所需要的标准,最近在项目中发现实体类属性中,同时使用了JSONField和JsonProperty注解,用于重新声明属性key。有时候…

百度王颖:百度文库以AI创作能力突破语言边界,促进思想碰撞和文化融通

1月9日,2023年世界互联网大会乌镇峰会“网络传播与文明交流互鉴论坛”召开。百度副总裁、互娱和垂类平台负责人王颖出席并发表“以技术搭建跨文化交流桥梁”主题演讲。她表示,在大模型的加持下,百度各个产品都在重构,通过技术助力…

收集不同富文本编辑器的使用(vue3版本)

文章目录 一、ueditor(百度富文本编辑器)安装使用并二次封装组件 二、KindEditor下载文件新建组件及使用 一、ueditor(百度富文本编辑器) 参考 ueditor 和 vue-ueditor-wrap 这里直接使用 封装好的vue组件 vue-ueditor-wrap vue3版…

深度学习 python opencv 动物识别与检测 计算机竞赛

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

海康Visionmaster-通讯管理:ModBus 通信发送非整型 数据的方法

Modbus 通信发送数据只能为 Int 类型,如下图所示: 可以发送 Int 和 Float 数据,如下图所示 通信设备配置如下: 发送事件配置如下: 通信管理界面显示有问题,显示为 Int 类型存在一定误导;可以…

Powerpoint不小心被覆盖?PPT误删文件如何恢复?

PowerPoint不小心删除了,这可能是众多学生和工作人员最头痛的事情了。PPT被覆盖或误删可能意味着几个小时的努力付之东流。那么PPT覆盖的文档要如何救回来呢?小编将会在本篇文章中为大家分享几个解决方案,使PPT文档覆盖还原操作成为可能&…

iOS代码混淆和加固技术详解

目录 摘要: 本文介绍了iOS开发中常用的代码混淆和加固技术,包括数据加密、应用加壳和代码混淆。其中,重点讨论了代码混淆的实现方法和注意事项,并推荐了一些相关的工具和库。 引言 代码混淆和加固 数据加密 应用加壳 代码混…

建设大型综合运维平台,对接集成多厂商网管系统

当前,云计算、大数据、人工智能等IT技术迅猛发展,企业的信息化步入了一个崭新的时代,企业规模不断壮大,业务不断拓展,企业信息化依赖的网络结构和IT技术越来越复杂。因建设时期等原因,企业网络中分布着不同…

家庭安全计划 挑战赛| 溺水预防

溺水预防 从了解到行动 家庭安全计划 | 少年急救官 地震避险逃生该怎么做? 起火了该如何应对? 哪些行为容易导致溺水? 家庭风险隐患有哪些? 家庭逃生演练四步骤你会吗? 国际救助儿童会(英国&#xff…

2022最新版-李宏毅机器学习深度学习课程-P50 BERT的预训练和微调

模型输入无标签文本(Text without annotation),通过消耗大量计算资源预训练(Pre-train)得到一个可以读懂文本的模型,在遇到有监督的任务是微调(Fine-tune)即可。 最具代表性是BERT&…

百度智能云正式上线Python SDK版本并全面开源!

文章目录 1. SDK的优势2. 千帆SDK:快速落地LLM应用3. 如何快速上手千帆SDK3.1 SDK快速启动3.2 SDK进阶指引3.3 通过Langchain接入千帆SDK 4. 开源社区 百度智能云千帆大模型平台再次升级!在原有API基础上,百度智能云正式上线Python SDK&#…

数据结构-图的遍历

广度优先遍历(BFS) 树的遍历:不存在“回路”,搜索相邻的结点时,不可能搜到已经访问过的结点 图的遍历:搜索相邻的顶点时,有可能搜到已经访问过的顶点 要点: 找到与一个顶点相邻的所…

[100天算法】-颜色分类(day 69)

题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意: 不能使…

在 Arduino IDE 2.0 中安装 ESP32 板(Windows、Mac OS X、Linux)

有一个新的 Arduino IDE——Arduino IDE 2.0(测试版)。在本教程中,您将学习如何在 Arduino IDE 2.0 中安装 ESP32 板并将代码上传到板。本教程与 Windows、Mac OS X 和 Linux 操作系统兼容。 据 Arduino 网站称:“ Arduino IDE 2.…

CCLink转Modbus TCP网关_MODBUS报文配置

兴达易控CCLink转Modbus TCP网关是一种功能强大的设备,可实现两个不同通信协议之间的无缝对接。它能够将CCLink协议转换为Modbus TCP协议,并通过报文配置实现灵活的通信设置。兴达易控CCLink转Modbus TCP网关可以轻松实现CCLink和Modbus TCP之间的数据转…

如何在 Idea 中修改文件的字符集(如:UTF-8)

以 IntelliJ IDEA 2023.2 (Ultimate Edition) 为例,如下: 点击左上角【IntelliJ IDEA】->【Settings…】,如下图: 从弹出页面的左侧导航中找到【Editor】->【File Encodings】,并将 Global Encoding、Project E…