当前位置:首页 > 开发 > 编程语言 > Java > 正文

JAVA异常 ,相等, equals()方法默认比较内容详解

发表于: 2014-06-28   作者:百合不是茶   来源:转载   浏览次数:
摘要: Throwable 异常:可以补救,可恢复的错误 Exception类 错误:不可恢复的问题 Error类 常见的异常 AWTException swing组件的异常 ClassNotFoundException 找不到类的异常 IOException IO流出现异常 NoSuchFieldException 没有匹配的属性 NoSuchMethodException 没有
Throwable
异常:可以补救,可恢复的错误 Exception类
错误:不可恢复的问题  Error类

常见的异常
AWTException swing组件的异常
ClassNotFoundException 找不到类的异常
IOException IO流出现异常
NoSuchFieldException	没有匹配的属性
NoSuchMethodException  没有匹配的方法

SQLException  访问数据库的异常

RuntimeException 运行时异常
	ClassCastException 类型转换异常,在强制转型的时候会出现
	NullPointerException 空指针异常
			Student stu;
			stu.study();
			
	IndexOutOfBoundsException:下标超出边界
			数组,二维数组,ArrayList,字符串,向量
			
	
异常的分类:
强制检测异常(强制捕获)
非强制检测异常(运行时异常)


自定义异常方法
public void guessNum2(int num) throws Exception{
	
	throw new Exception("异常信息");
	
}


如何强制检测异常:
处理方式一:
	try{
		//首选方案
	}catch(Exception ef){
		//备选方案
	}
处理方式二:
	在调用这个方法的方法上throws 

	
	
运行时异常:
	不需要强制检测,在需要的时候也可以检测
	
	
**********************************************************
如何查看程序错误:
程序的执行
	顺序(按照代码顺序一行一行执行)
	分支(if..else,switch...case...,try...catch...)
	循环(for   while   do...while...)

 

自定义抛出异常:

public class Demo {

	public static void main(String args[]) {

		// guessNum(10000);
		int num = 10;

		// guessNum2(num);

		guessNum3(num);

	}

	public static void guessNum(int num) {
		if (num < 0 || num >= 100) {
			System.out.println("不符合要求!!");
		} else {
			System.out.println("您猜的是:" + num);

		}

	}

	// 抛出强制检测异常,必须在定义方法的时候throws
	public static void guessNum2(int num) throws Exception {
		if (num < 0 || num >= 100) {
			// 创建一个异常对象
			Exception ex = new Exception("不符合要求!!");
			// 抛出异常对象
			throw ex;
		}
		System.out.println("您猜的是:" + num);

	}

	// 抛出运行时异常,在定义方法的时候不需要throws
	public static void guessNum3(int num) {
		if (num < 0 || num >= 100) {
			// 创建一个运行时异常对象
			RuntimeException ex = new RuntimeException("不符合要求!!");
			// 抛出异常对象
			throw ex;
		}
		System.out.println("您猜的是:" + num);

	}

}

 

运行结果:
您猜的是:10

 

 

学会使用try-catch-finally来处理异常:

/*使用try-catch 
 
*/  
  
public class TryCatchTest {  
  
   
  
public static void main(String[] args) {  
  
int number,value;  
  
try{  
  
number = 0;  
  
value = 3/number;  
  
//可能会抛出ArithmeticException异常,使用catch老捕获这个异常  
  
}catch(ArithmeticException e){  
  
e.printStackTrace();  
  
System.out.println("错误:被0整除");  
  
}  
  
}  
  
}  
  

 

equals()方法;

==
	比较的是两个变量是不是引用的同一个地址
	
	
equals:
	所有类都包含一个equals()方法,是从Object中继承来的
equals的返回值是true还是false取决于如何重写

equals的重写的基本原则
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。 
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。 
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。 
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。 
对于任何非空引用值 x,x.equals(null) 都应返回 false。 

 

public class Student {

	private static String name;

	public Student(String name) {
		this.name = name;
	}

	// 重写equals的方法
	public boolean equals(Student obj) {
		return Student.name.equals(obj.name);
	}
	
}

 

public class Democracy {
	
	public static void main(String[] args) {

		String s1 = "abc";
		String s2 = "abc";
		String s3 = new String("abc");
		String s4 = new String("abc");

		Integer t1 = 100;
		Integer t2 = new Integer(100);

		System.out.println(s1 == s2);
		System.out.println(s2 == s3);
		System.out.println(s3 == s4);
		System.out.println(t1.equals(t2));
		System.out.println("----------------------------------");
		System.out.println(s1.equals(s2));
		System.out.println(s2.equals(s3));
		System.out.println(s3.equals(s4));

		 int a = 100;
		 int b = 100;
		 System.out.println(a == b);
		System.out.println("----------------------------------");
		Student stu1 = new Student("abc");
		Student stu2 = new Student("abc");
		System.out.println(stu1.equals(stu2));

	}


}

 

运行结果:
true
false
false
true
----------------------------------
true
true
true
true
----------------------------------
true

 

 

 

JAVA异常 ,相等, equals()方法默认比较内容详解

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要
Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要
在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型,其余的都是
在Java中,boolean、byte、short、int、long、char、float、double这八种是基本数据类型,其余的都是
关于C#中==和Equals()之间的区别很容易混淆,现参考他人解释加上自己的理解,如有不当之处还望给位
.Net中具有Contains方法(或ContainsXXXX方法)的类很多,大多为集合类,请看下图: 这些方法归根结
首先,int hashCode();是为了支持哈希表类的如HashMap,HashTable之类的底层使用了哈希表的类。 Jav
Equality Operator == : http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21
Equality Operator == : http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21
Equality Operator == : http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号