一 instanceof运算符java
二代码示例spa
1 public class InstanceofTest 2 { 3 public static void main(String[] args) 4 { 5 // 声明hello时使用Object类,则hello的编译类型是Object, 6 // Object是全部类的父类, 但hello变量的实际类型是String 7 Object hello = "Hello"; 8 // String与Object类存在继承关系,能够进行instanceof运算。返回true。 9 System.out.println("字符串是不是Object类的实例:" 10 + (hello instanceof Object)); 11 System.out.println("字符串是不是String类的实例:" 12 + (hello instanceof String)); // 返回true。 13 // Math与Object类存在继承关系,能够进行instanceof运算。返回false。 14 System.out.println("字符串是不是Math类的实例:" 15 + (hello instanceof Math)); 16 // String实现了Comparable接口,因此返回true。 17 System.out.println("字符串是不是Comparable接口的实例:" 18 + (hello instanceof Comparable)); 19 String a = "Hello"; 20 // // String类与Math类没有继承关系,因此下面代码编译没法经过 21 // System.out.println("字符串是不是Math类的实例:" 22 // + (a instanceof Math)); 23 } 24 }
运行结果.net
字符串是不是Object类的实例:truecode
字符串是不是String类的实例:trueorm
字符串是不是Math类的实例:false对象
字符串是不是Comparable接口的实例:trueblog
三应用场景继承
下面我来模拟一个简单的应用场景,加深记忆并与同窗们分享交流接口
1 import java.text.SimpleDateFormat; 2 import java.util.Date; 3 4 public class Test{ 5 6 public static void main(String[] args) { 7 Object object = new Date(); 8 print(object); 9 } 10 11 public static void print(Object object) { 12 Date date = (Date) object; 13 String format = "yyyy-MM-dd HH:mm:ss"; 14 String result = new SimpleDateFormat(format).format(date); 15 System.out.println(result); 16 } 17 }
场景分析:没法保证传入print方法的实参必定为Date对象,若是传入的不是由Date或其子类建立的对象,那么以上代码就会引起“java.lang.ClassCastException”异常,这时咱们可使用instanceof运算符,用于强制类型转换以前检查对象的真实类型以免类型转换异常,从而提升代码健壮性。字符串
1 import java.text.SimpleDateFormat; 2 import java.util.Date; 3 4 public class Test{ 5 6 public static void main(String[] args) { 7 Object object = new String(); 8 print(object); 9 } 10 11 public static void print(Object object) { 12 if (object instanceof Date) { 13 Date date = (Date) object; 14 String format = "yyyy-MM-dd HH:mm:ss"; 15 String result = new SimpleDateFormat(format).format(date); 16 System.out.println(result); 17 }else { 18 System.out.println("请传入由Date类或其子类建立的对象。"); 19 } 20 } 21 }