有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

请在这段代码中解释java instanceof关键字

下面代码段的输出是012,但是请告诉我(b2 instanceof Toy)是如何实现的

请解释一下

interface Vessel { }  
interface Toy { }  
class Boat implements Vessel { }  
class Speedboat extends Boat implements Toy { }  
public class Tree {  
    public static void main(String[] args) 
    {  
         String s = "0";  
         Boat b = new Boat();  
         Boat b2 = new Speedboat();  
         Speedboat s2 = new Speedboat();  
         if((b instanceof Vessel) && (b2 instanceof Toy)) s += "1";  
         if((s2 instanceof Vessel) && (s2 instanceof Toy)) s += "2";  
         System.out.println(s);  
     }  
}  

共 (6) 个答案

  1. # 1 楼答案

    例如,通过线路

       s2 instanceof Vessel 
    

    它试图找出s2是否在血管线的同一层次中。如果两个比较类存在于同一层次结构中,则不一定是直接关系,而是相邻或更远的关系将被回答为true。但是如果instanceof没有直接的层次结构,那么它将返回false。 像

        interface A{..}
    
        interface B{..}
    
        class C implements A {..}
    

    然后

        C instanceof B 
    

    将返回false 及

        C instanceof A 
    

    将返回真值

  2. # 2 楼答案

    instanceof测试引用是否指向其具体类型为、扩展或实现(直接或间接)给定类型的对象

    b2引用的对象的类型为SpeedBoatSpeedBoat实现Toy。因此b2引用的对象是Toy(即,是Toy的一个实例)

    instanceof是现实生活中“是”的同义词。如果一个孩子给你看一艘快艇,问“那是玩具吗”,你会回答“是”。如果他问“是快艇吗”,你会回答是的。如果他问“它是物体吗”,你会回答是的。如果他问“是香蕉吗”,你会回答“不是”

  3. # 3 楼答案

    请注意,instanceof应谨慎使用。如果您发现自己正在编写使用instanceof的代码,那么请研究将目标代码转移到每个子类(通常是它所属的)中的新成员方法。在您的代码中,Boat和Speedboat都可以提供一个int getScore()方法,这样就不需要instanceOf

    异常处理是非常宝贵的一个方面。例如:

    try {
      .. Access the database
    } catch (Exception ex) {
      if (ex instanceof SQLException) {
        .. Process the details of the database exception to log more detail
      } else {
        throw ex;
    

    }

  4. # 4 楼答案

    b2Speedboat的实例,该类实现了Toy。当Speedboat扩展Boat时,可以将它分配给类型层次结构中更高的类型(Boat b2 = new Speedboat();),但由于它仍然是Speedboat(try b2.getClass())的实例,b2 instanceof Toy仍将返回true

  5. # 5 楼答案

    我相信this post会帮助你清楚地理解

    摘自What is the 'instanceof' operator used for?

    instanceof keyword is a binary operator used to test if an object (instance) is a subtype of a given Type.

    正如邮报所解释的,由于Toy是由快艇实现的,因此instanceof操作符在该条件下返回true

    另外,本教程的official oracle documentationinstanceof解释为:

    The instanceof operator compares an object to a specified type. You can use it to test if an object is an instance of a class, an instance of a subclass, or an instance of a class that implements a particular interface.

  6. # 6 楼答案

    您可以将对象分配给其层次结构中任何类型的变量,但是instanceof在求值时将始终检查对象本身b2引用了Speedboat对象,该对象实现了Toy,因此b2 instanceof Toy是真的