编译不报错运行报错都叫异常吗
1. 程序编译时没错运行时有错是怎么回事
程序编译没有错误,只是表明语法检查没有问题了,但是程序的逻辑是否合理、运行是否正确,则不一定。很多情况都会导致这样的问题,比方说数组越界,访问非法指针等,你没有给出源代码,也没有提供相关错误信息,所以到底是什么原因,在这里也不好确定。如果程序不长的话,建议对程序进行调试,监测程序的运行状态,这样容易找出问题。
2. 为什么我写的C语言程序编译时没错,运行时有错误
建议你下断点,然后反复调试运行,肯定能找出问题所在。
我一遇到次类问题,都是这样解决的。
3. java闂棰 ~~姹傛暀楂樻坠 13) 浠ヤ笅鍏充簬寮傚父镄勮存硶锛岄敊璇镄勬槸
阃夋嫨D
鎴戝湪杩椤彧璇翠笅 erroer 鍜孍xception镄勫尯鍒
error 鏄阌栾 , 杩欎釜阌栾鏄鐢变簬java铏氭嫙链哄紩璧风殑 鏄绋嫔簭锻樻棤娉曢氲繃镟存敼浠g爜瑙e喅镄,镓浠ヨ繖绉嶉敊璇鎴戜滑涓嶉渶瑕佹姏鍑哄纾甯
Exception 杩椤氨鏄鎴戜滑镓璇寸殑寮傚父 鎴戜滑鐭ラ亾 java 鍒嗕负2姝 绗涓 缂栬疟 濡傛灉缂栬疟娌℃湁阃氲繃,闾e彨锅
璇娉曢敊璇 缂栬疟阃氲繃 钥屽湪绗浜屾ヨ繍琛岀殑镞跺欎骇鐢熺殑阌栾(姝ら敊璇涓嶆槸涓婇溃璇寸殑error)鍙锅氩纾甯 .
钥屽纾甯哥殑瑙e喅鏂规堟湁澶氶吨
甯歌佺殑链 1 鍦ㄦ柟娉旷惧悕澶勬姏鍑哄纾甯
2 鍦ㄩ渶瑕佹墤鎹夊纾甯哥殑鍦版柟鐢╰ry catch璇鍙ユ潵鎹曟崏
java璇瑷閲囧彇浜嗕竴涓缁熶竴镄勫纾甯稿勭悊链哄埗銆
浠涔堟槸寮傚父锛熻繍琛屾椂鍙戠敓镄勫彲琚鎹曡幏鍜屽勭悊镄勯敊璇銆
鍦╦ava璇瑷涓锛孍xception鏄镓链夊纾甯哥殑鐖剁被銆备换浣曞纾甯搁兘镓╁𪾢浜嶦xception绫汇侲xception灏辩浉褰扑簬涓涓阌栾绫诲瀷銆傚傛灉瑕佸畾涔変竴涓鏂扮殑阌栾绫诲瀷灏辨墿灞曚竴涓鏂扮殑Exception瀛愮被銆傞噰鐢ㄥ纾甯哥殑濂藉勮缮鍦ㄤ簬鍙浠ョ簿纭镄勫畾浣嶅埌瀵艰嚧绋嫔簭鍑洪敊镄婧愪唬镰浣岖疆,骞惰幏寰楄︾粏镄勯敊璇淇℃伅銆
Java寮傚父澶勭悊阃氲繃浜斾釜鍏抽敭瀛楁潵瀹炵幇锛宼ry,catch,throw ,throws, finally銆傚叿浣撶殑寮傚父澶勭悊缁撴瀯鐢眛ry钬.catch钬.finally鍧楁潵瀹炵幇銆伥ry鍧楀瓨鏀惧彲鑳藉嚭鐜板纾甯哥殑java璇鍙ワ纴catch鐢ㄦ潵鎹曡幏鍙戠敓镄勫纾甯革纴骞跺瑰纾甯歌繘琛屽勭悊銆侳inally鍧楃敤𨱒ユ竻闄ょ▼搴忎腑链閲婃斁镄勮祫婧愩备笉绠$悊try鍧楃殑浠g爜濡备綍杩斿洖锛宖inally鍧楅兘镐绘槸琚镓ц屻
Java寮傚父鍒嗕负涓ゅぇ绫:checked 寮傚父鍜寀nChecked 寮傚父銆傛墍链夌户镓縥ava.lang.Exception 镄勫纾甯搁兘灞炰簬checked寮傚父銆傛墍链夌户镓縥ava.lang.RuntimeException镄勫纾甯搁兘灞炰簬unChecked寮傚父銆
褰扑竴涓鏂规硶铡昏皟鐢ㄤ竴涓鍙鑳芥姏鍑篶hecked寮傚父镄勬柟娉曪纴蹇呴’阃氲繃try钬catch鍧楀瑰纾甯歌繘琛屾崟銮疯繘琛屽勭悊鎴栬呴吨鏂版姏鍑恒
4. 为什么我这个程序编译不报错,运行报错
这个是运行时错误,编译器在编译时无法检查此类错误,因为很多情况下值并不是固定的,编译器无法判断值是否合法,你这种情况就是数组下标越界,再仔细检查一下代码
5. Java中数组向下转型,编译没问题,运行却报错
异常提示不可以直接转,换这样写String[] as = Arrays.asList(a).toArray(new String[0]);
楼主你首先异常那里概念没有弄清,在java中分为运行时异常runtime Exception,以及一般的Exception,如图
你这个就属于运行时异常,编译是不会报错的,编译不报错不代表没有错误,你写个int a =1;int b = 0; 输出 a/b编译也不会出粗,但是运行就报除数不为0异常了。
6. Java之运行时异常与编译时异常区别
Java中用2种方法处理异常:
1.在发生异常的地方直接处理;
2.将异常抛给调用者,让调用者处理。
Java常见的异常:
(1)编译时异常:Java.lang.Exception
(2)运行期异常:Java.lang.RuntimeException
Java.lang.Exception和Java.lang.Error继承自Java.lang.Throwable;
Java.lang.RuntimeException继承自Java.lang.Exception.
编译时异常: 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
运行期异常: 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。
7. java异常和错误的区别
异常与错误:
异常:
在Java中程序的错误哗虚主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错握局误,现在有一个机会来修改它。Java中使用异常类来表示异常,不同的异常类代表了不同的异常。但是在Java中所有的异常都有一个基类,叫做Exception。
错误:
它指的是一个合理的应用程序不能截获的严重的问题。大多数都是反常的情况。错误是VM的一个故障(虽然它可以是任何系统级的服务)。所以,错误是很难处理的,一般的开发人员(当然不是你)是无法处理这些错误的,比如内存溢出。 和异常一样,在Java中用错误类来表示错误,不同的错误类代表了不同的错误。 但是在Java中所有的错误都有一个基类,叫做Error。
综上,我们可以知道异常和错误最本质的区别就是异常能被开发人员处理而错误时系统本来自带的,一般无法处理也不需要我们程序员来处理。
1.一个异常是在一个程序执行过程中出现的一个事件,它中断了正常指令的运行
2.错误,偏离了可接受的代码行为的一个动作或实例
异常的结构分类:
1、运行时异常(未检查异常)
2、编译时异常(已检查异常段芦让)
在Java中异常Exception和错误Error有个共同的父类Throwable。
Error Exception
runtimeException几个子类
1、 java.lang.
数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
2、java.lang.ArithmeticException
算术条件异常。譬如:整数除零等。
3、java.lang.NullPointerException
空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的
属性、计算null对象的长度、使用throw语句抛出null等等
4、java.lang.ClassNotFoundException
找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出
该异常。
对异常的处理:
try{}catch{}
try{}catch{}finally{}无论有无异常finally代码块都会被执行
try{}finally{}也是可以组合使用的但是catch{}finally{}不可以
注意:在继承关系中,子类覆盖父类的方法,抛出异常的范围不能比父类更宽泛
异常的使用
在异常的使用这一部分主要是演示代码,都是我们平常写代码的过程中会遇到的(当然只是一小部分),抛砖引玉吗!
例1. 这个例子主要通过两个方法对比来演示一下有了异常以后代码的执行流程。
代码如下
public static void testException1() {
int[] ints = new int[] { 1, 2, 3, 4 };
System.out.println(异常出现前);
try {
System.out.println(ints[4]);
System.out.println(我还有幸执行到吗);// 发生异常以后,后面的代码不能被执行
} catch (IndexOutOfBoundsException e) {
System.out.println(数组越界错误);
}
System.out.println(异常出现后);
}
/*output:
异常出现前
数组越界错误
常出现后
*/
8. 编译错误和运行时异常怎么区分
编译错误 一般都是语法错误
运行时错误一般都是比如数组索引指向空值 4/0 这类错误
请参考
9. Java什么情况下强转型 编译不报错,运行会报错
向下强制转型——把一个父类(或祖先类)引用强制转换成一个子类(或孙类)引用,是不会发生编译错误的。
但如果这个父类(或祖先类)引用实际引用(指向)的对象,不是一个子类(或孙类)对象,运行时就会抛出异常。
举例来说,如果鸟类和狗类都是动物类的子类。
如果有一个动物类的引用a引用了一个鸟类对象,则此时将a强制转换成狗类引用,就不会报编译错误,但运行时会抛出类型转换异常。
因为a这个装动物的笼子,实际上关的是一只鸟,而需要的动物是一只狗。