java开发不会找错怎么办_Java开发中常见错误及规避技巧

2023-11-12

原标题:Java开发中常见错误及规避技巧

在开发Java软件时可能会遇到许多类型的错误,但大多数可以避免。我们列举了50个最常见的Java软件错误,其中包含代码示例和教程,以帮助您解决常见的编码问题。

编译器错误

编译器错误消息在Java软件代码在编译器执行时产生。需要重点记住的是,一个编译器可能为一个错误抛出多个错误消息。所以修复第一个错误并重编译,就能修复很多的问题。

1.“…可预料的”

当编码出现遗漏时,就会发生这类错误。可能是缺失了一个括号或者分号。

1840d0964f962bcb7c7e3b5d4f4dbedf.png

这种错误消息常常不会准确的定位到错误发生的位置。为了找到错误,建议:

确保所有的左括号有对应匹配的右括号。

(使用IDE,译者注)在代码行前的提示中检查。这种Java软件错误不要由编译器来关注,应该把更后面的工作交给它。

有时候一个字符,比如一个左括号不应该写在Java代码的开始处。这样造成的结果是开发者不会写右括号去凑成一对。

2.“未封闭的String表达式”

“未封闭的String表达式”错误消息发生在Sting表达式结束时没有引号标记,错误消息将在发生错误的同一行提示出来。一个String表达式在源码中是一个值。

b9dea6109f9e8b93758f17e9609a0214.png

通常情况下,错误发生在:

String表达式结束时没有使用引号标记。这种错误只要在String表达式结束是使用引号就能简单的改正

String表达式超过一行时。长的String表达式可以被拆分成多个表达式,然后用"+"连接起来。

引号是String表达式中的元素又没有使用下划线“”进行转义。

3.“非法的表达式开头”

出现“非法表达式开头”错误的原因有很多。但它最终归类于一个不太有用的错误消息之一。有些开发者说这是由糟糕的代码造成的。

通常,创建表达式是用于生成新值或为变量赋值。编译器期望找到一个表达式,但找不到它,因为语法不符合预期。在下面这些语句中可以找到此错误。

0755b1fa1596dab57480337ef60c06a3.png

4.“找不到符号”

这是一个非常常见的问题,因为Java中的所有标识符都需要在使用之前进行声明。当编译代码时,编译器并不理解标识符的含义。

在你遇到“找不到符号”消息时可能有很多种原因:

标识符声明时的拼写可能与代码中使用时的拼写不同。

该变量从未被声明。

该变量使用的位置与其声明的作用域不同。

类并未被导入。

5.“公共类XXX应该在文件中出现”

“公共类XXX应该在文件中出现”这个消息出现在类XXX和Java程序文件名不一致时。源代码只有在类名和Java文件名一样时才会被编译。

d0600325be9a879e53ac32e6466a1cd0.png

要修复这种情况:

类名和文件名一样。

确保这两个名字的大小写一致。

6.“不兼容类型”

“不兼容的类型”是在赋值语句中尝试将变量与类型表达式匹配时触发的逻辑错误。通常是在代码尝试将文本字符写入到整数中时出现,反之亦然。这不是Java语法错误。

5477e7d14ebede72d4ca5751718362ed.png

当编译器给出“不兼容的类型”消息时,确实没有一个简单的修复方案:

有可以转换类型的函数。

开发人员可能需要按照代码的预期修改之。

7.“无效的方法声明;需求返回类型”

此错误表示方法签名中没有明确说明方法的返回类型。

88a8adb6af2931bebea2174f932306fb.png

有几种方式会触发“无效的方法声明;需求返回类型“错误:

忘记说明返回类型

如果方法没有返回值,那么需要用“void”表示方法签名中的返回类型。

构造函数名称不需要说明返回类型。但是,如果构造函数名称中出现错误,那么编译器会将构造函数视为没有指定类型的方法。

8.“类Y中的方法X不能应用于给定类型”

此错误消息是Java中最有用的错误消息之一。它解释了方法签名是如何调用错误参数的。

44c64268b9262cc7129736811602f379.png

方法在被调用时期望获取在方法声明中定义的某些参数。检查方法声明、谨慎调用方法,以确保声明和调用的参数是兼容的。

9.“缺少返回语句”

当一个方法缺少返回语句时,会发生“缺少返回语句”错误。每一个有返回值的方法(非void类型)必须有一句字面上的语句用以返回返回值,以便在方法外调用该值。

486f328ab9e42e9d9c45d5da29f8b3a2.png

下面列举了一些编译器抛出“缺少返回语句”的消息的原因:

返回语句被错误地省略了

一个方法没有返回任何值,但是在方法签名中没有声明为void类型

10.“精度可能丢失”

当将超过一个变量可以保存的信息分配给该变量时,会发生“精度可能丢失”问题。如果发生这种情况,超出的信息将会被扔掉。如果这样做没问题,那么代码需要将变量显式地声明为新类型。

下面情况会发生“精度可能丢失”错误:

将一个实数赋值给一个整型变量。

将一个双精度浮点数赋值给一个整型变量。

11.“解析时到达文件末尾”

这个错误信息经常发生在Java程序缺少“}”符号时。通常在代码末加上“}”符号能很快解决这个问题。

44334ce69bd7f8eeea0f982874302766.png

上述代码的运行结果是下列错误:

代码编写工具和适当的代码缩进可以更容易地找到这些不对的大括号。

这个示例展示了缺少的大括号如何造成“解析时到达文件结尾”的错误消息。

12.“语句不可达”

“语句不可达”发生在当语句被放在一个不会被执行的位置时候。通常是在break语句或return语句后面。

0d323c2c4b4cc6422160b7fdf1a68c5e.png

通常简单地移动return语句就能解决这个错误。

13.“变量x可能未被初始化”

这个问题发生在当方法内局部变量在声明时没有被初始化的时候。当一个变量未被初始化但是出现在if语句中的时候会发生该错误。

4c1f158841de5d4fbe7e29b3362f4ba7.png

14.“操作符...不能应用于x”

这个情况发生于当操作符应用于没有定义其使用方法的类型上。

当Java代码尝试使用string类型进行数学计算时会经常出现这个问题。为了解决它,string需要被转化为integer或float。

15.“不能转换的类型”

“不能转换的类型”错误发生在Java代码尝试进行非法转换的时候。

28347e332c18f52fed3e27de51496f37.png

例如,boolean不能转换为int。

16.“缺少返回值”

当返回语句返回一个错误的类型时,你就会收到“缺少返回值”消息。例如下列代码:

2d6b512d60548923bf91ef6739c17f32.png

返回下列错误信息:

239129e479ebf2f25e5d233e5c656965.png

通常,那些返回语句没有返回任何东西。

17.“返回类型为void的方法不能返回一个值”

当一个返回类型为void的方法尝试返回任何值的时候就会发生这个Java错误,例如下面的例子:

44d7b371a8a0668028629fc1b287af7d.png

通常改变方法签名,使之和返回语句的返回类型相配就能解决这个问题。在上述例子中,void可以改为int:

8001a20851a12eaf4d5e9800f1af9473.png

18.“非静态变量...不能在静态上下文中被引用”

当编译器尝试在一个静态方法中访问一个非静态变量时会发生该错误。

07724302c90bffc178747df13480eaa3.png

为了解决“非静态变量...不能在静态上下文中被引用”的错误,有下述两种方法:

在签名中将变量声明为静态变量。

在静态方法中创建一个非静态对象的示例

19.“非静态方法...不能在静态上下文中被引用”

这个情况发生在Java代码尝试在非静态类中调用非静态方法的时候。例如下述代码:

5061597a447752f60a8f6f59d240f8fb.png

将会返回下述错误:

b71369b270ead846e708dd724bc3fb4e.png

为了在静态方法中调用非静态方法,可以声明一个类的实例来调用这个非静态方法。

20.“(array)NotInitialized”(数组未初始化)

当数组已声明但未初始化时,你将得到“(array)未初始化”的消息。数组的长度是固定的,因此每个数组都需要按照实际长度进行初始化。

以下代码是可以接受的:

下面也是可以的:

但是这个不行:

接下来的内容

现在我们已经讨论了编译器错误,下次我们将深入讨论各种可能出现的运行时异常,这些异常会浪费你一整天时间。就像本部分,它们将包含代码块、解释和相关链接,以帮助您尽快修复代码。

文章来源:开源中国

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java开发不会找错怎么办_Java开发中常见错误及规避技巧 的相关文章

  • linux的inode暴增

    author skate time 2012 04 26 linux的inode暴增 今天刚到公司 接收到一个报警短信 一个数据库的inode使用率达到99 root DBtmp df h Filesystem Size Used Avai
  • 我 JS 写的好好的,为什么要用那么复杂的 TS

    今年前端面试有个很有意思的现象 最经典的 JavaScript 基础类面试题 不在被面试官宠幸 原因很简单 现在市场经济收紧 公司的项目决策中往往切割掉了边角试错成本 而 TypeScript 无疑更适合构建大项目和管理 就像 Java 和
  • 彻底理解embedding

    本文转载自https blog csdn net weixin 42078618 article details 84553940 版权问题请联系博主删除 首先 我们有一个one hot编码的概念 假设 我们中文 一共只有10个字 只是假设
  • 毕业设计记录-Pytorch学习-自己手写数字识别

    今天用之前的模型训练手写数字数据集 训练了50轮 效果如下 然后我就准备用自己手写的数字来检验看看 模型的准确率 自己找的一些数字图片 但是经过测试全部预测成3 很不解 搞了好几个小时 到最后无意间看到他的数据集的时候才知道哪出了问题 这是
  • Linux网络服务部署yum仓库

    目录 1 Yum概述 2 Yum实现过程 3 Yum配置文件 3 1yum主配置文件 etc yum conf 3 2仓库设置文件 etc yum repos d repo 4 yum命令详解 5 源地址 6 搭建仓库的方式 6 1搭建本地
  • MVC,MVP和MVVM架构解析

    文章目录 关于架构 框架和设计模式三者的说明 一 MVC 1 概念 2 结构 3 模式 4 优缺点 5 适用场景 二 MVP 1 概念 2 结构 3 与MVC对比 4 优缺点 5 适用场景 三 MVVM 1 结构 2 解析 3 MVVM架构
  • Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 如上图所示 首先java源代码文件 java后缀 会被java编译器编译为字节码文件 class后缀 然后再让类加载器加载各个类的字节码文件 加载完毕后 交由JVM执行引擎执行 在整个执行过程中 JVM会用一
  • spdlog日志库说明文档(超详细)

    spdlog日志库说明文档 超详细 spdlog是一个开源 快速 只有头文件的C 11日志库 code地址在https github com gabime spdlog 基础示例在https github com gabime spdlog
  • 技术点集(面试)

    怎么使用 ConcurrentHashMap 才能是线程安全的 package util import java util Map import java util concurrent ConcurrentHashMap public c
  • java session id 生成_Java通过sessionId获取Session

    Servlet2 1之后不支持SessionContext里面getSession String id 方法 但是 我们可以通过HttpSessionListener监听器和全局静态map自己实现一个SessionContext MySes
  • 我说CMMI

    一 我说CMMI之二 CMMI里有什么 CMMI划分为三个分支 适用于供方 乙方的模型 CMMI DEV 主要是针对开发类组织的 CMMI SVC 主要是针对服务类组织的 适用于需方 甲方的模型 CMMI ACQ 主要是针对采购类组织的 C
  • 排查 Linux cup 飙升问题

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 Java 执行过程 一 使用 top 命令 二 使用ps命令查看cpu占比高的PID 三 将对应的TID转换为16进制 四 使用jdk自带的命令jstack
  • 使用ffmpeg解析H265视频编码

    使用 ffmpeg 解析 H265 视频编码的方法如下 下载并安装 ffmpeg 如果您的计算机上已经安装了 ffmpeg 则可以跳过此步骤 打开命令行窗口 Windows 用户可以在开始菜单中搜索 命令提示符 输入以下命令来解析 H265
  • it项目管理(6)

    1 教材练习题6 a b 路径1 A B E H K 长度 2 2 2 2 2 10 天 路径2 A B E I J K 长度 2 2 2 5 1 2 14 天 路径3 A C F H K 长度 2 3 3 2 2 12 天 路径4 A C
  • 如何用Python获取网页指定内容

    文章目录 1 抓取网页源代码 2 抓取一个网页源代码中的某标签内容 3 抓取多个网页子标签的内容 Python用做数据处理还是相当不错的 如果你想要做爬虫 Python是很好的选择 它有很多已经写好的类包 只要调用 即可完成很多复杂的功能
  • 服务器性能问题排查

    服务器性能问题一般有两种 高内存占用 高CPU占用 比如应用程序高内存占用 可能是因为文件读写 频繁的IO 内存频繁GC 进一步占用了内存和CPU 比如应用程序高CPU占用 可能是因为大任务计算 死循环 卡死 不断超时或者重试 所以需要具体
  • 基于SpringBoot开发的疫情信息管理系统

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 疫情信息管理系统 java项目
  • 学习网络编程No.6【将服务器日志和守护进程化】

    引言 北京时间 2023 9 1 21 15 下午刚更新完博客 同理再接再厉 这样整天不需要干什么 除了玩手机的日子不多了 马上就要开学 每天需要签到签退的日子就要来临 烦躁 照我预料下学期我们学校应该会开一门Java的专业课 现在这种线下
  • ESP32-CAM摄像头开发

    1 硬件接线 参考博客 https blog csdn net wangyilong153 article details 124366728 ops request misc 257B 2522request 255Fid 2522 25

随机推荐

  • ply文件格式详细说明

    典型的 PLY 文件结构 头部 顶点列表 面片列表 其他元素列表 头部是一系列以回车结尾的文本行 用来描述文件的剩余部分 头部包含一个对每个元素类型的描述 包括元素名 如 边 这个元素在工程里有多少 以及一 个与这个元素关联的不同属性的列表
  • 假设检验2

    为研究东 中 西部各省市规模以上的企业发展状况 我们收集了各城市企业的主要经济指标 包括 总资产贡献率 资产负债率 流动资产周转次数 工业成本费用利润率 产品销售率 我们用变量 类别 定义了各类城市 其中1为东部城市 2为中部城市 3为西部
  • IV转换电路 IV放大 跨阻放大器 光电信号放大器 原理图及PCB设计分析

    IV转换电路 IV放大 跨阻放大器 光电信号放大器 原理图及PCB设计分析 目录 IV转换电路 IV放大 跨阻放大器 光电信号放大器 原理图及PCB设计分析 基本原理 芯片选型 原理图 3D PCB 具体讲解 模块原理图 PDF 原理图库
  • C# winform流程图项目(功能完整,中文注释,附下载链接)绘制各种流程图形,保存,步骤记录,删除,连接断开,直线折线,属性调节

    C winform流程图项目 功能完整 中文注释 附下载链接 绘制各种流程图形 保存 步骤记录 删除 连接断开 直线折线 属性调节 点我下载项目源码 主要功能如下 1 鼠标点击工具箱后在画布点击拖出图形 2 选中直线节点靠近图形节点自动连接
  • 14年macmini装双硬盘_廉颇老矣,还能战否?2014 Mac Mini Late 加装HP EX920固态硬盘

    廉颇老矣 还能战否 2014 Mac Mini Late 加装HP EX920固态硬盘 2019 03 13 13 49 17 15点赞 53收藏 25评论 小编注 此篇文章来自即可瓜分10万金币 周边好礼达标就有 邀新任务奖励无上限 点击
  • (七)Mybatis当中#{}和${}的区别详解

    这篇文章主要讲述Mybatis当中 和 的区别 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 和 的区别 key 获取参数的值 预编译到SQL中 安全 key 获取参数的值 拼接到SQL中 有SQL注
  • 【FPGA】十三、Vivado MIG IP核实现DDR3控制器(1)

    文章目录 前言 一 DDR3基础知识 二 MIG IP核的配置 三 DDR3 IP核用户端接口时序 1 DDR3 IP核接口说明 2 DDR3 IP核读写时序 写命令时序 写数据时序 读数据时序 总结 前言 我们在进行FPGA开发应用当中
  • 利用Opencv提供的imencode和imdecode进行图像视频传输(发送端支持Linux和Windows双系统)

    关于网络图像传输 网上大多数都是基于像素访问进行传输 传输的大小是图像的分辨率以及他的通道数 一般普通摄像头拍摄到图像大小的分辨率是640480 也就是说单通道灰度图像 一次要传输的数据量大小是640480 307200个字节 如果是彩色3
  • k8s服务无法访问

    无法访问k8s服务问题分析过程 1 查看pod是否正常 2 查看service是否正常 3 查看endpoints是否绑定 4 检查配置文件 从过程3可以看出问题出在endpoints的绑定上面 通过仔细检测配置文件发现是pod的配置中ap
  • STM32HAL库-移植mbedtls开源库示例(一)

    目录 概述 一 使用方法 二 STM32CubeMx配置 三 Examples 四 运行结果 五 总结 概述 本篇文章介绍如何使用STM32HAL库 移植mbedtls开源库支持mqtt证书加密示例 GitHub https github
  • 剑指 Offer 43. 1~n整数中1出现的次数 思路整理

    题目描述 输入一个整数 n 求1 n这n个整数的十进制表示中1出现的次数 例如 输入12 1 12这些整数中包含1 的数字有1 10 11和12 1一共出现了5次 原题链接 https leetcode cn com problems 1n
  • 【腾讯云 Cloud Studio 实战训练营】用于编写、运行和调试代码的云 IDE泰裤辣

    文章目录 一 引言 二 什么是腾讯云 Cloud Studio 三 Cloud Studio优点和功能 四 Cloud Studio初体验 注册篇 五 Cloud Studio实战演练 实战篇 1 初始化工作空间 2 安装 antd mob
  • kaggle资源

    2019 03 07 这里记录几个认为比较好的kaggle kernel 有些是数据分析 有些是针对算法 1 COMPREHENSIVE DATA EXPLORATION WITH PYTHON 这个kernel通过对变量分析 他的数据集都
  • (Java)leetcode-23 Merge k Sorted Lists(合并K个排序链表)

    题目描述 合并 k 个排序链表 返回合并后的排序链表 请分析和描述算法的复杂度 示例 输入 1 gt 4 gt 5 1 gt 3 gt 4 2 gt 6 输出 1 gt 1 gt 2 gt 3 gt 4 gt 4 gt 5 gt 6 思路1
  • Vue项目点击侧边栏展开与折叠功能

    注 带这个符号必须要有的 路由配置 path App name App component gt import App vue 首页App vue
  • 交叉编译(全志)

    文章目录 一 交叉编译概念 二 香橙派交叉编译 3 带WiringPi库的交叉编译 一 交叉编译概念 交叉编译 就是 在一种平台上编译 编译出来的程序 是放到别的平台上运行即编译的环境 和运行的环境不一样 属于交叉的 例 在进行嵌入式开发时
  • 程序员或IT从业者笔记软件大观

    苹果 橘子 梨 好多啊 呵呵 哦不对 我要说的 不是种种水果 而是各式各样的笔记软件 你会不会陷入选择恐惧症呢 不过道理是差不多的 那就是 青苹果 红苹果 或者烂苹果 在选择的过程中 除了传统的Word WPS 其它的你可能也都会尝一尝 好
  • 云原生架构体系

    云原生 Cloud Native 的概念在国内提及的越来越多 但大部分人对云原生的认识仅限于容器 微服务 DevOps等内容 把容器 微服务 DevOps就等同于云原生 这显然是不对的 CNCF从其自身的角度定义了云原生技术 云原生技术使企
  • Windows下安装Android Studio

    一 下载Android Studio 官网地址 http www android studio org 个人也推荐使用官网推荐的 可以省去一定的步骤跟麻烦 二 安装Android Studio 这里选择下路径 当然也可以不用进行修改 因为我
  • java开发不会找错怎么办_Java开发中常见错误及规避技巧

    原标题 Java开发中常见错误及规避技巧 在开发Java软件时可能会遇到许多类型的错误 但大多数可以避免 我们列举了50个最常见的Java软件错误 其中包含代码示例和教程 以帮助您解决常见的编码问题 编译器错误 编译器错误消息在Java软件