首页编程java编程为什么java编译报错 每次运行java项目都会出现此报错的原因是什么

为什么java编译报错 每次运行java项目都会出现此报错的原因是什么

编程之家2023-10-1385次浏览

本篇文章给大家谈谈为什么java编译报错,以及每次运行java项目都会出现此报错的原因是什么对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

为什么java编译报错 每次运行java项目都会出现此报错的原因是什么

java问题:为什么报错

1.为什么会报错?

分析:

方法:JDK源码调试。由于JDK源码的局部变量不好跟踪,我采用把源码复制过来进行跟踪的方式。

为什么java编译报错 每次运行java项目都会出现此报错的原因是什么

看报错信息:

java.lang.StringIndexOutOfBoundsException: String index out of range: 2

at java.lang.String.charAt(String.java:686)

为什么java编译报错 每次运行java项目都会出现此报错的原因是什么

at java.util.regex.Matcher.appendReplacement(Matcher.java:703)

at java.util.regex.Matcher.replaceFirst(Matcher.java:861)

at java.lang.String.replaceFirst(String.java:2146)

at test.Test.main(Test.java:11)

主要是在charAt这里出的数组越界错误。

而是由appendReplacement这里调用charAt引起的。

下面分析appendReplacement源码:

去掉一些

与出错无关的代码,简体下此源码。如下:

public static void appendReplacement(StringBuffer sb, String replacement){

int cursor= 0;

StringBuffer result= new StringBuffer();

while(cursor< replacement.length()){

char nextChar= replacement.charAt(cursor);

if(nextChar=='\\'){

cursor++;

nextChar= replacement.charAt(cursor);

result.append(nextChar);

cursor++;

} else{

result.append(nextChar);

cursor++;

}

}

}

这里的sb为(new StringBuffer("\\"),replacement为D:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\MMS\\Resource\\

replacement太长,我简化的e\\

下面看:

他会把字符串的每个字符截取e,\

第一个e没问题

第二个\时进入

if(nextChar=='\\'){

cursor++;//为2了

nextChar= replacement.charAt(cursor);//相当于e\.charAt(2),当然出错,所以此时应该考虑把\\换为\\\\

result.append(nextChar);

cursor++;

}

D:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\MMS\\Resource\\\\这样就不出错了

2.如果去掉最后的反斜线倒是不报错了,可是为什么用于替换的字符串被改变了?

解决方法见上

Java程序编译通过,为什么运行有误

java讲究的是一次编译处处运行,也就是提高了程序的一致性。java的程序之所在不同的操作系统上的运行结果是一样的,是因为java虚拟机。

所以要运行java都要装一个叫jdk的东西,里面有java的虚拟机。这个虚拟机就是来解释我们写的代码。通过这个虚拟机,就实现了代码的移植。

我们写好的程序,通过虚拟机,编译成class文件,然后在运行。但是我们只需要编译一次即可。

每次运行java项目都会出现此报错的原因是什么

【主回答】

运行时因为你使用的是工具,应该是你这个工具里面同时包含了多个不同的工程项目,这并不表示是你当前这个工程代码有错,可以将其从工程列表中先暂时关闭,而可能是其它工程存在问题。

检查下你其它工程是否有错,如果其它工程暂时不用,如果不需要再提醒,将上面的“始终运行而不询问”勾上即可。

java 中写出的类为什么编译不报错但是不能运行,代码没错啊

//看楼主问为什么能编译但不能运行,说明楼主应该是Java的初学者吧,Java程序其实编译和运行是两回事,没有必然联系的。刚才你的问题,在下面有注释的,这样就可以运行了,记得把类修改为test.java哦。运行下面

import java.util.*;

//这里不能用car,重新起一个名字,因为和下面的class Car冲突了。

public class test{

private static Scanner input;

public static void main(String args[]){

input= new Scanner(System.in);

System.out.println("请输入车主姓名,车速,方向盘角度");

Car car=new Car(input.next(),input.nextFloat(),input.nextFloat());

System.out.println("车主姓名为:"+car.getOwnerName());

System.out.println("当前车速为:"+car.getCurSpeed());

System.out.println("当前方向盘角度为:"+car.getCurDirInDegree());

System.out.println("修改车速");

System.out.println("新的车速为:");

car.changeSpeed(input.nextFloat());

System.out.println("在调用changeSpeed(80)后,车速为"+car.getCurSpeed());

car.stop();

System.out.println("在调用stop()后,车速为"+car.getCurSpeed());

}

}

class Car{

private String ownerName;//车主姓名

private float curSpeed;//当前车速

private float curDirInDegree;//当前方向盘转向角度

public Car(String ownerName){

this.ownerName=ownerName;

}

public Car(String ownerName, float speed, float dirInDegree){

this(ownerName);

curSpeed=speed;

curDirInDegree=dirInDegree;

}

public String getOwnerName(){//提供对车主姓名的访问

return ownerName;

}

public float getCurDirInDegree(){//提供对当前方向盘转向角度的访问

return curDirInDegree;

}

public float getCurSpeed(){//提供对当前车速的访问

return curSpeed;

}

public void changeSpeed(float curSpeed){//提供改变当前的车速

this.curSpeed=curSpeed;

}

public void stop(){//提供停车

curSpeed= 0;

}

}

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

现在java比较流行什么软件,开发java用什么软件web项目java程序的作用是什么?java项目是什么意思哦,是软件还是WEB