java常见错误以及可能原因集锦,java错误类型与解决方法

  java常见错误以及可能原因集锦,java错误类型与解决方法

  如何解决写爬虫IP受阻的问题?立即使用。

  常见java错误:

  1.空指针错误

  在java数组的使用中,有时需要比较字符串数组中的元素。那么当元素不为空时,程序就会正常运行;但是,一旦被比较的元素为空,程序就会出现空指针错误。

  解决方法:增加保护,判断元素何时不为空。

  公共静态void main(Sring[] args){

  string[]sums= adfafA ;

  for(int I=0;isums.lengthi ){

  if(sums[]!=空和[i]。等于(sr)){

  system . out . println( element found sums[I]);

  打破;

  }

  }

  }2.数据的精度范围和类型转换

  Java中有四种基本的数据类型:

  整数:-1 2 3 4.

  浮点型:浮点1.3f3.2 3.5D(未指明类型,默认最高精度)

  类型:Unicode编码,2个字节。

  布尔型:真,假

  四种基本类型数据的精度范围是不同的,并且是逐步提高的。

  如果在使用数据类型时不注意精度范围,就会出现数据溢出,导致计算错误。

  在这四种基本类型中,整数、浮点和字符数据可以相互转换。

  转换规则如下:

  隐形转换:低精度的数据值在赋值给高精度的值时可以自动转换。(低电平到高电平)

  强制转换:大范围的数据值,(高级到低级)

  运算自动提升规则:运算过程中,自动转换为精度高的数据类型。

  3.使用三个周期

  for循环:是一个次数有限的循环。在循环之前,指定循环次数。

  For(表情;表情;表情){

  环状体

  }break语句:执行后,立即跳出循环,停止执行后面的语句,结束所有循环。

  Continue语句:执行后,立即跳出当前word循环,重新判断条件是否继续。

  While循环语句:适用于循环次数未知的情况。

  While(条件表达式){

  句子

  };do-While循环:也是未知次数的循环。至少做一次再判断。如果while为真,则继续循环,否则,结束循环。

  做{

  句子

  }while(条件表达式);4.多次复制字符串。

  测试无法发现的一个错误是生成不可变对象的多个副本。不可变对象是不可变的,所以不需要复制它。最常用的不可变对象是String。

  如果必须更改String对象的内容,应该使用StringBuffer。以下代码将正常工作:

  String s=新字符串( Text here );不过这段代码性能差,没必要这么复杂。您也可以用以下方式重写上述代码:

  String temp= Text here

  String s=新字符串(temp);但是这段代码包含了额外的字符串,这并不是完全必要的。更好的代码是:

  String s= Text here5.没有返回对象的克隆。

  封装是面向对象编程的一个重要概念。可惜Java为意外破包提供了方便。Java允许返回私有数据的引用。以下代码揭示了这一点:

  导入Java . awt . dimension;

  /* * *示例类。x和y值不应该是负数。*/

  公共类示例{

  私有维度d=新维度(0,0);

  公共示例(){ }

  /***设置高度和宽度。高度和宽度都必须是非负的,否则会引发异常。*/

  公共同步void setValues (int height,int width)引发IllegalArgumentException{

  if(高度0 宽度0)

  抛出新的IllegalArgumentException();

  d.height=高度;

  d.width=宽度;

  }

  公共同步维度getValues(){

  //不对不对!打破封装

  返回d;

  }

  }Example类保证其存储的高度和宽度值从不为负。试图使用setValues()方法设置负值会触发异常。不幸的是,由于getValues()返回的是对D的引用,而不是D的副本,因此您可以编写如下破坏性代码:

  Example ex=new Example()。

  维度d=ex . get values();

  d . height=-5;

  d . width=-10;现在,示例对象有一个负值!如果getValues()的调用者从来不设置返回的Dimension对象的宽度和高度值,那么仅仅通过测试是不可能检测出这样的错误的。

  不幸的是,随着时间的推移,客户代码可能会改变返回的Dimension对象的值。这时,追踪错误的根源是枯燥和费时的,尤其是在多线程环境中。

  更好的方法是让getValues()返回一个副本:

  公共同步维度getValues(){

  返回新维度(d.x,d . y);

  }6.复制错误的数据

  有时候程序员知道要返回一个副本,却不小心复制错了数据。由于只完成了部分数据复制工作,下面的代码偏离了程序员的意图:

  导入Java . awt . dimension;

  /***示例类。高度和宽度值不应*为

  没有。*/

  公共类示例{

  static final public int TOTAL _ VALUES=10;

  私有维度[] d=新维度[TOTAL _ VALUES];

  公共示例(){ }

  /***设置高度和宽度。高度和宽度都必须是非负的,否则将抛出异常。*/

  公共同步void setValues (int index,int height,int width)抛出IllegalArgumentException{

  if(高度0 宽度0)

  抛出新的IllegalArgumentException();

  if (d[index]==null)

  d[index]=新维度();

  d[索引]。身高=身高;

  d[索引]。宽度=宽度;

  }

  公共同步维度[] getValues()

  抛出CloneNotSupportedException{

  返回(Dimension[])d . clone();

  }

  }这里的问题是getValues()方法只克隆数组,不克隆数组中包含的Dimension对象。因此,尽管调用方不能更改内部数组以使其元素指向不同的维度对象,但调用方可以更改内部数组元素(即维度对象)的内容。getValues()方法的一个更好的版本是:

  公共同步维度[] getValues()引发CloneNotSupportedException{

  Dimension[]copy=(Dimension[])d . clone();

  for(int I=0;我

  //注意:维度是不可克隆的。

  如果(d!=空)

  复制[i]=新维度(d[i])。高度,d[i]。宽度);

  }

  返回副本;

  }克隆原子数据的多维数组时也会犯类似的错误。原子包括int,float等。简单克隆int类型的一维数组是正确的,如下所示:

  公共void存储(int[] data)引发CloneNotSupportedException{

  this . data=(int[])data . clone();

  //好的

  }复制int类型的二维数组比较复杂。没有Java int类型的二维数组,所以int类型的二维数组实际上是类型为int[]的一维数组。简单地克隆一个int[][]类型的数组会犯和上面例子中第一个版本的getValues()方法一样的错误,所以应该避免。以下示例演示了克隆int二维数组的错误和正确方法:

  public void wrong store(int[][]data)引发CloneNotSupportedException{

  this . data=(int[][])data . clone();//不OK!

  }

  public void right store(int[][]data){

  //好吧!

  this . data=(int[][])data . clone();

  for(int I=0;我

  如果(数据!=空)

  this.data[i]=(int[])data[i]。clone();

  }

  }更多java知识请关注java基础教程部分。以下是几个常见java错误的详细信息。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: