java报错的提示有什么 java中的throw到底有什么用
大家好,关于java报错的提示有什么很多朋友都还不太明白,今天小编就来为大家分享关于java中的throw到底有什么用的知识,希望对各位有所帮助!
java问题:为什么报错
1.为什么会报错?
分析:
方法:JDK源码调试。由于JDK源码的局部变量不好跟踪,我采用把源码复制过来进行跟踪的方式。
看报错信息:
java.lang.StringIndexOutOfBoundsException: String index out of range: 2
at java.lang.String.charAt(String.java:686)
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程序为什么会报错了还能运行
你不妨将Circ这个类中,除了main方法之外的所有方法都删了,这样你会得到提示,要求你实现所有抽象方法,
这时你按系统提示的解决方法:添加如下三个方法:
public float getAtea(float r){
throw new UnsupportedOperationException("Not supported yet.");
}
public float getCircum(float r){
throw new UnsupportedOperationException("Not supported yet.");
}
public void draw(){
throw new UnsupportedOperationException("Not supported yet.");
}
显然你没有实现所有的方法,可程序依然有错
再一细看
public float getArea(float r){
float area= Calculate.PI*r*r;
return area;
}
public float getCirccum(float r){
float circum=Calculate.PI*2*r;
return circum;
}
你的方法错了....
float getAtea(float r);
public float getArea(float r){
float area= Calculate.PI*r*r;
return area;
}
楼主现在明白了。。。
就是类没有实现你所继承的接口的方法,你在类中写的两个方法都不是继承自接口的
java中的throw到底有什么用
throw在java中是关于异常的操作。
首先异常在java中的意思是一些可以导致程序出问题的因素,比如书写错误,逻辑错误或者是api的应用错误等等,为了防止程序的崩溃就要预先检测这些因素,所以java使用了异常这个机制。
在java中异常是靠"抛出"也就是英语的"throw"来使用的,意思是如果发现到什么异常的时候就把错误信息"抛出"。
所以如果没有throw,发生异常,只能由java的最后一道防线jvm去处理,性质不一样。
扩展资料:注意事项
throw代表动作,表示抛出一个异常的动作,throws代表一种状态,代表方法可能有异常抛出。throw用在方法实现中,而throws用在方法声明中,throw只能用于抛出一种异常,而throws可以抛出多个异常。
throw关键字用来在程序中明确的抛出异常,相反,throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。
文章到此结束,如果本次分享的java报错的提示有什么和java中的throw到底有什么用的问题解决了您的问题,那么我们由衷的感到高兴!