50个常见的 Java 错误及避免方法(第二部分)

2023-11-11

接上文50个常见的 Java 错误及避免方法(第一部分)

17.“Cannot Return a Value From Method Whose Result Type Is Void”

当一个void方法尝试返回值时,就会发生此Java错误,例如在以下示例中:

public static void move()

{

    System.out.println("Whatdo you want to do?");

    Scanner scan= new Scanner(System.in);

    int userMove = scan.nextInt();

    return userMove;

}

public static void usersMove(StringplayerName, int gesture)

{

    int userMove = move();

    if (userMove == -1)

    {

        break;

    }

通常,这可以通过更改方法签名匹配返回语句中的类型来修正错误。在这种情况下,void的实例可以改为int:

public static int move()

{

    System.out.println("Whatdo you want to do?");

    Scanner scan= new Scanner(System.in);

    int userMove = scan.nextInt();

    return userMove;

}

18.“Non-Static Variable … Cannot Be Referenced From a Static Context”当编译器尝试从静态方法访问非静态变量时,就会发生此错误:

public class StaticTest {

    private intcount=0;

    public staticvoid main(Stringargs[]) throws IOException {

        count++;//compiler error: non-static variable count cannotbe referenced from a static context

    }

}

要修复“Non-Static Variable … Cannot Be Referenced From a Static Context”错误,可以做这两件事:

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

  • 在静态方法中写代码创建非静态对象的实例。

19.“Non-Static Method … Cannot Be Referenced From a Static Context”

此问题发生在Java代码尝试在非静态类中调用非静态方法的情况下。 例如,以下代码:

class Sample
{
   private int age;
   public void setAge(int a)   {
      age=a;
   }
   public int getAge()   {
      return age;
   }
   public static void main(String args[])   {
       System.out.println("Age is:"+ getAge());
   }
}

将返回错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: Cannot make a staticreference to the non-static method getAge() from the type Sample

从静态方法中调用非静态方法就是声明调用非静态方法的类的实例。

20.“(array) <X> Not Initialized”

当数组被声明但未初始化时,你将得到“(array) <X> Not Initialized”的消息。数组的长度是固定的,因此每个数组都需要以所需的长度进行初始化。

以下代码就可以接受:

 
 

AClass[] array = {object1, object2}


即:

AClass[] array = new AClass[2];

...

array[0] =object1;

array[1] =object2;


而非:

 
 

AClass[] array;

...

array ={object1, object2};


21.“ArrayIndexOutOfBoundsException”

这是在代码尝试访问不在值内的数组索引时发生的运行时错误消息。以下代码将触发此异常:

String[] name = {

    "tom",

    "dick",

    "harry"

};

for (int i = 0; i <= name.length; i++) {

    System.out.print(name[i] + '\n');

}

int[] list = new int[5];

list[5] = 33; // illegal index,maximum index is 4

数组索引从零开始,结束于小于数组长度的那一个。通常,当定义数组索引的限制时,通过使用“<”而不是“<=”来修复。

22.“StringIndexOutOfBoundsException”

当代码尝试访问不在字符串范围内的字符串的一部分时,就会发生这种问题。通常,这发生在代码尝试创建字符串的子字符串,且长度与参数设置不符之时。下面是一个例子:

public class StringCharAtExample {

    public staticvoid main(String[]args) {

        Stringstr = "Java Code Geeks!";

        System.out.println("Length:" + str.length());

        //The following statement throws an exception, because

        //the request index is invalid.

        char ch = str.charAt(50);

    }

}

和数组索引一样,字符串索引从零开始。在索引字符串的时候,最后一个字符小于字符串的长度。 “StringIndexOutOfBoundsException”Java软件错误消息通常意味着索引正在尝试访问没有包含的字符。

23.“NullPointerException”

当程序尝试使用没有赋值的对象引用时,就会出现“NullPointerException”异常。

// A Java program to demonstrate thatinvoking a method

// on null causes NullPointerException

import java.io.*;

class GFG

{

    public staticvoid main(String[] args)

    {

        // Initializing String variable with null value

        Stringptr = null;

        // Checking if ptr.equals null or works fine.

        try

        {

            // This line of code throws NullPointerException

            // because ptr is null

            if (ptr.equals("gfg"))

               System.out.print("Same");

            else

               System.out.print("Not Same");

        }

        catch(NullPointerException e)

        {

            System.out.print("NullPointerException Caught");

        }

    }

}

Java程序经常在以下情况下出现异常:

  • 语句引用一个空值的对象。

  • 尝试访问一个已定义但未分配引用的类。

24.“NoClassDefFoundError”

当解释器找不到包含主方法的类的文件时,将发生“NoClassDefFoundError”异常。来自DZone的示例:

如果你编译此程序:

class A

{

  // some code

}

public class B

{

    public staticvoid main(String[]args)

    {

        A a = new A();

    }

}

生成两个.class文件:A.class和B.class。删除A.class文件并运行B.class文件,你将得到NoClassDefFoundError的消息:

Exception in thread "main"java.lang.NoClassDefFoundError:

A at MainClass.main(MainClass.java:10)

Caused by: java.lang.ClassNotFoundException: A at java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

发生这种情况的原因有:

  • 文件不在正确的目录内。

  • 类的名称必须与文件的名称相同(不包括文件扩展名)。名称分大小写。

25.“NoSuchMethodFoundError”

当Java软件尝试调用类的方法并且该方法不再有定义时,将发生此错误消息:

Error: Could not find or load main class wiki.java

当声明中有错字时,通常会出现“NoSuchMethodFoundError”Java软件错误。

26.“NoSuchProviderException”

当请求的安全提供程序不可用时,会发生“NoSuchProviderException”异常:

javax.mail.NoSuchProviderException

当试图找到为什么发生“NoSuchProviderException”时,请检查:

  • JRE配置。

  • 配置中设置的Java home。

  • 使用哪个Java环境。

  • 安全提供程序条目。

27. AccessControlException

AccessControlException表示所请求访问的系统资源,如文件系统或网络是被拒绝的,如本例中的JBossDeveloper:

ERROR Could not register mbeans java.security.

AccessControlException: WFSM000001: Permission check failed(permission "("javax.management.MBeanPermission" "org.apache.logging.log4j.core.jmx.LoggerContextAdmin#-

[org.apache.logging.log4j2:type=51634f]" "registerMBean")" incode source "(vfs:/C:/wildfly-10.0.0.Final/standalone/deployments/mySampleSecurityApp.war/WEB-INF/lib/log4j-core-2.5.jar )" of "null")

28.“ArrayStoreException”

当Java数组中转换元素的规则被破坏时,就会发生“ArrayStoreException”异常。对于放到数组中的内容一定要非常小心。例如,来自JavaScan.com的这个例子说明此程序:

/* ............... START ............... */
public class JavaArrayStoreException {
     public static void main(String...args) {
         Object[] val = new Integer[4];
         val[0] = 5.8;
     }
}
/* ............... END ............... */

可以产生以下输出:

Exception in thread "main" java.lang.ArrayStoreException: java.lang.Double

at ExceptionHandling.JavaArrayStoreException.main(JavaArrayStoreException.java:7)

当数组被初始化时,我们需要声明允许进入数组的对象的种类。 每个数组元素都需要成为相同类型的对象。

29.“Bad Magic Number”

此Java软件错误消息意味着网络上的类定义文件可能出错了。 以下是来自The Server Side的示例:

Java(TM) Plug-in:Version 1.3.1_01

Using JRE version 1.3.1_01 Java HotSpot(TM) Client VM

User home directory = C:\Documentsand Settings\Ankur

Proxy Configuration:Manual Configuration

Proxy: 192.168.11.6:80

java.lang.ClassFormatError:SalesCalculatorAppletBeanInfo (Bad magic number)

at java.lang.ClassLoader.defineClass0(Native Method)

at java.lang.ClassLoader.defineClass(Unknown Source)

at java.security.SecureClassLoader.defineClass(UnknownSource)

at sun.applet.AppletClassLoader.findClass(UnknownSource)

atsun.plugin.security.PluginClassLoader.access$201(Unknown Source)

at sun.plugin.security.PluginClassLoader$1.run(UnknownSource)

at java.security.AccessController.doPrivileged(NativeMethod)

at sun.plugin.security.PluginClassLoader.findClass(UnknownSource)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.applet.AppletClassLoader.loadClass(UnknownSource)

at java.lang.ClassLoader.loadClass(Unknown Source)

at java.beans.Introspector.instantiate(Unknown Source)

at java.beans.Introspector.findInformant(UnknownSource)

at java.beans.Introspector.(Unknown Source)

at java.beans.Introspector.getBeanInfo(Unknown Source)

at sun.beans.ole.OleBeanInfo.(Unknown Source)

at sun.beans.ole.StubInformation.getStub(Unknown Source)

at sun.plugin.ocx.TypeLibManager$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(NativeMethod)

at sun.plugin.ocx.TypeLibManager.getTypeLib(UnknownSource)

at sun.plugin.ocx.TypeLibManager.getTypeLib(UnknownSource)

at sun.plugin.ocx.ActiveXAppletViewer.statusNotification(Native Method)

at sun.plugin.ocx.ActiveXAppletViewer.notifyStatus(Unknown Source)

at sun.plugin.ocx.ActiveXAppletViewer.showAppletStatus(Unknown Source)

at sun.applet.AppletPanel.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

“bad magic number”错误消息可能发生在以下情况下:

  • 类文件的前四个字节不是十六进制数字CAFEBABE。

  • 类文件以ASCII模式而不是以二进制模式上传。

  • Java程序在编译之前运行。

30.“Broken Pipe”

此错误消息是指来自文件或网络套接字的数据流已停止工作或从另一端关闭。

Exception in thread "main"java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socketWrite0(Native Method)at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)at java.net.SocketOutputStream.write(SocketOutputStream.java:115)at java.io.DataOutputStream.write

出现broken pipe的原因通常有:

  • 耗尽磁盘暂存空间。

  • RAM可能被堵塞。

  • 数据流可能已损坏。

  • 读取管道的过程可能已经关闭。

第二部分完,敬请关注第三部分的内容。

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

50个常见的 Java 错误及避免方法(第二部分) 的相关文章

  • java--基础--26--模块化

    java 基础 26 模块化 代码 https gitee com DanShenGuiZu learnDemo tree mysql mybaties DB java model learn 1 模块化概述 无论是运行一个大型的软件系统
  • MOS管和三极管区别-对比很显然

    在电路设计当中假设我们想要对电流中止控制 那就少不了三极管的帮助 我们俗称的三极管其全称为半导体三极管 它的主要作用就是将微小的信号中止放大 MOS管与三极管有着许多相近的地方 这就使得一些新手不断无法明白两者之间的区别 这里就将为大家引见
  • uniapp 各种兼容,优化等问题记录

    对于ios自带的上下拉 进行禁用 橡皮筋回弹 1 pages json中加入如下配置 path pages my my style navigationBarTitleText 个人中心 disableScroll true 禁止滑动 en
  • xss-labs/level5

    输入 查看回显 如下所示 能够发现script被恶意替换为scr ipt 查看源代码 第一个输出点被转义了 所以没有利用价值了 第二个输出点如同刚才所言被进行了关键字的恶意替换操作 那没办法 我们只能继续尝试一下在标签内部构造一个新属性然后
  • opencv CvSolve函数深度解析

    Opencv CvSolve函数主要是用来求解线性系统Ax b的方程 X的解 solve函数跟它的算法是一样的 也是用来求解线性系统 设方程Ax b 根据有效的方程个数和未知数的个数 可以分为以下3种情况 1 rank A lt n 也就是
  • mysql故障切换 java_java.sql.SQLException: Value'0000-00-00'异常解决办法及mysql的url设置...

    一 0000 00 00错误及解决方案 在使用MySql 时 数据库中的字段类型是timestamp的 默认为0000 00 00 会发生异常 java sql SQLException Value 0000 00 00 can not b
  • 音频服务器运行失败怎么办,音频服务错误1068怎么解决 音频服务未运行win10解决方法...

    win10音频服务无法启动 提示错误1068 依赖服务或组无法启动是什么情况 怎么解决 在这里就跟着小编一起来了解一下吧 让大家解决电脑不能够出声的问题 音频服务未运行win10问题排除 一 电脑没了声音 小喇叭上有个红叉 鼠标放上去显 音
  • 【Python学习笔记2】Python网络爬虫的异常处理

    本文信息主要来源于韦玮老师的 精通python网络爬虫 仅作为个人学习笔记 通过python库函数urllib request去爬取网页时 遇到的异常主要时URL类和网页类的错误 python已提供URLError类和HTTPError类来
  • Ado.Net总结

    ADO NET总结 ADO NET 是在 NET 平台上访问数据库的组件 它是以 ODBC Open Database Connectivity 技术的方式来访问数据库的一种技术 ADO NET常用命名空间 命名空间 数据提供程序 Syst
  • 多输入多输出

    多输入多输出 MATLAB实现GRU门控循环单元多输入多输出 目录 多输入多输出 MATLAB实现GRU门控循环单元多输入多输出 预测效果 基本介绍 程序设计 往期精彩 参考资料 预测效果 基本介绍 MATLAB实现GRU门控循环单元多输入
  • spark SQL配置连接Hive Metastore 3.1.2

    Hive Metastore作为元数据管理中心 支持多种计算引擎的读取操作 例如Flink Presto Spark等 本文讲述通过spark SQL配置连接Hive Metastore 并以3 1 2版本为例 通过Spark连接Hive
  • HTML <progress> 标签

    实例 正在进行的下载
  • kali 破解压缩包密码

    一 提取加密压缩包的哈希值 zip2john 文件名 gt hash txt zip2john 文件名 能提取出文件的哈希值 然后我们通过重定向 将它写入一个文档中 二 利用工具对提取到的哈希值进行破解 john hash txt 然后就能
  • windows11安装微软商店里的ubuntu报错,已解决

    1 问题情况 安装微软商店的Ubuntu系统 安装完成后打开开始菜单的Ubuntu图标 初始化过程中卡住 点击界面下方的展开按钮有文字提示报错 报错提示内容为 Installing this may take a few minutes W
  • 京东抢购服务高并发实践

    声明 本位来自京东张开涛的微信公众号 kaitao 1234567 授权CSDN转载 如需转载请联系作者 作者 张子良 京东高级开发工程师 在京东负责抢购后端服务系统架构和开发工作 责编 钱曙光 关注架构和算法领域 寻求报道或者投稿请发邮件
  • eclipse与Mysql数据库是否连接的检验

    先去下载与Mysql数据库版本匹配的架包 然后导入到项目中 在这里我用的是Mysql8 0 Mysql8 0的驱动类名是 com mysql cj jdbc Driver 首先新建一个Demo类 然后进行数据库的连接即检验 代码如下 pac
  • Java架构直通车——基于数据库for update实现分布式锁

    文章目录 使用数据库解决超卖问题 非分布式 分为三步 原始方法 合并二 三步 使用update行锁使操作下沉到数据库 合并一 二 三步 使用方法锁 优化 使用块锁 使用数据库解决分布式超卖问题 主要原理 解决方案 解决库存超卖问题 可以另扣
  • 转帖:C++大师Lippman:我对中国程序员的忠告

    天极网特稿 记者 宋保强 C 语言的创立者 斯坦 利普曼 Stan Lippman 9月17日参加了在北京召开的微软技术大会Tech Ed2004并做了 The C Binding Integrating a Static and dyna
  • 嵌套循环基础练习题

    目录 java循环以及循环嵌套练习题 01 求10以内的偶数的和 02 求100以内的所有素数 素数 一个大于1的自然数 除了1和它本身外 不能被其他自然数整除 03 随机产生一个1 100之间的整数 看能几次猜中 要求 猜的次数不能超过7
  • CloudEvents 入门文档

    CloudEvents 入门文档 1 0 3 版本 文档来自 GitHub CloudEvents 摘要 这份非技术规范文档用来为你提供关于 CloudEvents 规范的总体概览 它补充了 CloudEvents 规范的相关背景以及在制定

随机推荐

  • midjourney最新使用方法教程指令关键词

    自ChatGPT走红以来 以 聊天 为核心的人工智能协作工具们受到了各行各业的关注 让AI写首诗 发封邮件 或是做一份计划书 这些工作已经成为AI聊天机器人的 日常需求 但似乎 人们遗忘了AI还具有创作文字以外的内容 比如 一幅画 2022
  • [完美解决]VS2012创建或打开C++浏览数据库文件时出现错误

    完美解决 VS2012创建或打开C 浏览数据库文件时出现错误 在使用VC2012的时候出现问题如下 创建或打开C 浏览数据库文件XXXXXXX stdf时发生错误 IntelliSense和浏览信息将不能用于C 项目 请确保已安装Micro
  • 全自动高清录播服务器,常态化高清录播服务器 高清全自动录播系统

    特点 支持高清视频会议终端1080P 720P下的录制 点播和直播 双流录制可到高两路1080P 60帧图像 支持把录制下来的会议或者培训内容直播给网内所有的客户端 PC和视频会议终端 支持IPhone IPAD 安卓系统等点播和直播 设计
  • BitLocker的解密

    BitLocker的解密 解密 以管理员身份运行命令提示符 然后在里面输入命令 C指的是盘符 这里以解密C为例 manage bde off C 弹出所有用法 manage bde 更多使用方法 可参考官网 https docs micro
  • win11打开应用被管理员阻止怎么办 window11管理员已阻止你运行此应用的解决方法

    大家在使用windows11系统时 是否有出现过电脑运行应用被阻止的情况呢 可能很多人的蒙着不知道如何处理这个问题 下面就和大家分享一下解决方法吧 更多Windows11安装教程 可以参考小白重装系统网 1 用鼠标右键单击开始图标 接着在出
  • TCP和UDP

    文章目录 TCP和UDP 什么是TCP 用JAVA实现一个基于TCP的简单网络通信 什么是UDP 用JAVA实现一个基于UDP的网络通信 TCP和UDP 什么是TCP TCP即传输控制协议 Transmission Control Prot
  • 【Unity学习笔记】Animation、Input类

    Animation Animation View 通过动画视图可以直接创建和修改动画片段 Animation Clips 显示动画视图 Window Animation 创建动画片段 为物体添加Animation组件 在动画视图中创建片段
  • Maven、JDK的安装以及环境配置

    Maven 项目管理工具 什么是Maven Maven是一个项目管理工具 它包含了一个对象模型 一组标准集合 一个依赖管理系统 和用来运行定义在生命周期阶段中插件目标和逻辑 核心功能 Maven的核心功能是合理叙述项目间的依赖关系 通俗点就
  • 端口转发工具 rinetd 的使用

    rinetd 可以将服务器的端口转发到另一个端口 1 安装rinetd 服务 vi etc yum repos d nux misc repo 输入以下内容报存 nux misc name Nux Misc baseurl http li
  • c++与c#的区别

    1 继承 C 支持多继承 C 类只能继承一个基类中的实现但可以实现多个接口 2 数组 声明 C 数组和声明 C 数组的语法不同 在 C 中 标记出现在数组类型的后面 3 数据类型 在C 中bool类可以与整型转换 但C 中bool 类型和其
  • 脚本ssh进入其他主机报错--bash: jps: command not found和Error: JAVA_HOME is not set and java could not be found

    文章目录 一 报错图例 二 报错原因 三 解决方案 三种 一 报错图例 二 报错原因 原因 在shell脚本写的ssh到其他节点的时候默认是不加载配置文件的 linux并不能去找到java中jps的命令和java的path路径等 三 解决方
  • 【java面试题】lock和synchronized有什么区别?

    学习目标 掌握 lock 与 synchronized 的区别 理解 ReentrantLock 的公平 非公平锁 理解 ReentrantLock 中的条件变量 lock 与 synchronized 的区别有三个层面 学习内容 1 不同
  • QT运行不出界面

    如果只出现如下一个黑色运行窗口 说明你环境配置的基本没啥问题 可以试试 项目 gt 构建设置中 gt General gt Shadow build 取消勾选 如下 如果第一种没有解决 看下构建出的release目录或者debug目录中 是
  • 自己实现图形验证码

    如果不想重复造轮子 参考上一篇文章 SpringBoot生成图形验证码 Muscleheng的博客 CSDN博客 这里不需要依赖开源组件包 完全自己实现图形验证码功能 两步完成 第一步 编写图形验证码工具 package com zhh d
  • 微信小程序 webiew缓存问题

    在微信小程序webview中嵌套H5页面 我们原本使用了localStorage用来标识用户信息的 但是后来发现在android手机上每一次杀掉小程序进程之后 localStorage的数据也会被清除 这样的话就和我们原本的意愿是相违背的
  • web 服务器安全维护,Web服务器安全攻击及防护机制详解

    Web安全分为两大类 Web服务器的安全性 Web服务器本身安全和软件配置 Web应用程序的安全性 在Web服务器上运行的Java ActiveX PHP ASP代码的安全 Web服务器面临的攻击 Web服务器攻击利用Web服务器软件和配置
  • 标定CCP协议在S32K144上的移植实战

    文章目录 目录 文章目录 前言 一 CCP是什么 二 移植步骤 1 准备工作 2 移植 3 测试验证 总结 前言 CCP协议在新能源汽车电子领域发挥着重要作用 CCP观测和标定作用对开发工程师起着重要作用 疫情宅在家无聊 把这块的知识重新梳
  • 4.3 配置Mysql与注册登录模块(下)

    目录 学习目标 学习内容 登录状态持久化 学习目标 前端页面授权 注册页面 登录状态的持久化 学习内容 实现前端页面的授权 import createRouter createWebHistory from vue router impor
  • LATEX以及宏包的下载和安装(附下载链接)

    LATEX以及宏包的下载和安装 附下载链接 TexStudio以及宏包下载和安装 LATEX以及宏包的下载和安装 附下载链接 1 环境下载 2 环境安装 2 1 MiKTeX安装 2 2 TexStudio的安装 3 配置 写作 1 环境下
  • 50个常见的 Java 错误及避免方法(第二部分)

    接上文50个常见的 Java 错误及避免方法 第一部分 17 Cannot Return a Value From Method Whose Result Type Is Void 当一个void方法尝试返回值时 就会发生此Java错误 例