编译错误和运行时出现异常
Ⅰ java编译过程没有错误为什么运行过程后出现出现错误或无法加载主类
java中的错误一般分为编译错误或者运行时的错误或异常
编译错误一般指的是语法上的错误,比如引用未付值的变量,语句后少了分号等等通过编译器可以检查出来的错误
运行时的错误或异常,是指编译器无法检查出来在程序中却又不能正确执行的代码,比如两个变量相除,除数为0,或者是你引用了null值等等,面向对象的语言中万物皆对象,运行时的各种异常或错误也是java的类的一部分,你可以参见j2se的api,在java.lang这个包下的Throwable就是所有异常和错误的父类,你可以看一看
java在运行出错时,通常都会在控制台上打印出错信息,比如
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:6)
那个java.lang.NullPointerException就是异常的名称,你就可以去API中查看此异常,就知道这个异常是什么意思了,第二行Test.java:6的意思就是Test.java这个文件第6行报的错误
无法加载主类,你是怎么判断的,如果你是用命令行启动,一般情况下看看检查你的class_path设置的对不对,你运行的class文件有没有,运行的class文件中有没有main方法,还有就是引用的其他class文件或jar包在不在classpath的路径下
祝你好运!
Ⅱ 编译时异常和运行时异常有什么区别啊
Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception 。 Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的严重错误 ,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。 Exception :表示可恢复的例外,这是可捕捉到的。 Java 提供了两类主要的异常 :runtime exception 和 checked exception 。 checked 异常也就是我们经常遇到的 IO 异常,以及 SQL 异常都是这种异常。 对于这种异常, JAVA 编译器强制要求我们必需对出现的这些异常进行 catch 。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆 catch 块去处理可能的异常。 但是另外一种异常: runtime exception ,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机 接管。比如:我们从来没有人去处理过 NullPointerException 异常,它就是运行时异常,并且这种异常还是最常见的异常之一。 出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由 Thread.run() 抛出 ,如果是单线程就被 main() 抛出 。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是 Exception 的子类,也有一般异常的特点,是可以被 Catch 块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。 如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。 在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常 ,或者是通过对异常的处理显式的控制程序退出。 异常处理的目标之一就是为了把程序从异常中恢复出来 。
Ⅲ java什么时候是编译出错,什么时候会报异常呢
编译错时因为你写的语法不正确,报异常有时候是程序自身的错误 大部分是你程序逻辑有错误
Ⅳ 为什么编译没有错误,运行却有错误
编译没有错误是因为你的程序语法没有错误.
而运行时则有可能出现逻辑错误.
比如说C#里最常见的"未将对象引用设置到对象的实例",就是说一个对象并没有实力化,或者没有值就去引用了.
再比如连接数据库,语法正确,但是运行时却因为SQL未启动或者连接字符串拼写错误而发生异常.
Ⅳ Java编程中 常见的异常有哪几种
相信作为程序员的我们在对程序进行编译过程中经常会遇到错误,或者在运行过程中出现错误,在这里主要跟大家谈谈经常遇到的一些异常与错误,以及解决办法。
异常是指程序在编译或运行过程出现的错误。
在java.lang包中Throwable包含了所有的异常。
Error (错误) 和Exception(异常)
(1)Error(错误)
一旦发生无法修复,但可以避免发生。
常见错误类:
IOError:I/O错误,当发生严重的I/O错误时,抛出此错误。
VirtualMachineError:虚拟机错误,当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。
StackOverflowError:栈内存满了,当应用程序递归太深而发生堆栈溢出时,抛出该错误。
OutofMemoryError:堆内存满了,因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该异常。
以上是一些常见的错误,在Error类中还有一些别的错误(参照文件Java.lang.Throwable.Error).
(2)Exception(异常)
一旦发生,可以捕获并处理,不会导致程序终止,有时可以避免有时无法避免。
异常的分类:
1.编译时异常(需要强制处理) 2.运行时异常(不需要强制处理)
常见的异常有:
IOException:输入输出流异常
FileNotFoundException:文件找不到的异常
ClassNotFoundException:类找不到的异常
DataFormatException:数据格式化异常
NoSuchFieldException:没有匹配的属性异常
NoSuchMethodException:没有匹配的方法异常
SQLException:数据库操作异常
TimeoutException:执行超时异常
常见的运行时异常:
RuntimeException:运行时异常
NullPointerException:空指针异常
:数组越界异
ClassCastException:类型转换异常
IllegalArgumentException:非法的参数异常
InputMismatchException:输入不匹配
以上是常见的一些异常,另外还有别的异常,参见文件:Java.lang.Throwable.Exception
既然我们常常会遇到一些异常,那我们如何来处理这些异常就是一个急需解决的事情。
(1) 如何处理编译时异常?
方法一:将需要处理的代码块放在一个try...catch...中
try{
//需要处理异常的代码
}catch(XXXException ef){
ef.printStackTrace();
}
我们方法一就是要将我们不确定的代码放入try......catch中,先进行try一下,如果没有异常,则不会触发catch,没有输出,一旦出现异常,那么catch就会工作,在catch中捕获异常信息,根据异常信息进行补救措施。
如以下代码:

从结果可以看出,我们在输入数据的时候出现错误,这样通过自定义异常能够让我们更直接快速的找到运行或编译时的异常。
在上述中我们分别提到了三种throw,分别是Throwable,Throws以及throw,那么到底三者有什么区别?
Throwable:是指在在Java.lang包中的一个类,其包含了所有的异常和错误,其中类Error和Exception 是它
的子类。
Thows:是指在解决编译时异常,将方法中异常抛给上一级,在方法后面要加Throw Exception来进行抛。
throw:是指在自定义异常时,如果方法出现异常,那么将作为引用方法的对象抛出。即抛出异常。
希望对您有所帮助!~
Ⅵ 运行时异常与一般异常有何异同
1.定义不同,运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等。一般异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。
2.处理方法不同,运行时异常是不检查异常,程序中可以选择捕获处理,也可以不处理。对于一般异常,JAVA编译器强制要求用户必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。
3.发生原因不同,运行时异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

(6)编译错误和运行时出现异常扩展阅读:
两种异常同属于Exception父类。
不同点:
(1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等。
(2)一般异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。
