class Pet {} class Dog extends Pet {} class Pug extends Dog {} class Cat extends Pet {} class Rodent extends Pet {} class Gerbil extends Rodent {} class Hamster extends Rodent {} class Main { static HashMap<Integer, Class<? extends Pet>> map = new HashMap<Integer, Class<? extends Pet>>(); static { map.put(Pet.class.getName().length(), Pet.class); map.put(Dog.class.getName().length(), Dog.class); map.put(Pug.class.getName().length(), Pug.class); map.put(Cat.class.getName().length(), Cat.class); map.put(Rodent.class.getName().length(), Rodent.class); map.put(Gerbil.class.getName().length(), Gerbil.class); map.put(Hamster.class.getName().length(), Hamster.class); } public static void main(String[] args) { for ( Integer i : map.keySet() ) System.out.println(map.get(i).getName()); }} The code below will print three lines.运行结果,为什么
时间: 2024-04-19 11:30:28 浏览: 76
Class属性Extends和Implements的区别示例介绍
5星 · 资源好评率100%
运行结果会打印出三行,具体为什么会打印三行可以通过以下步骤来解释:
1. 首先,通过静态代码块中的`map`初始化,将每个类的名称长度作为键,对应的类作为值存储在`map`中。
2. 在`main`方法中,通过循环遍历`map`的键集合。
3. 在每次循环中,通过`map.get(i)`获取对应键的值,即对应的类。
4. 使用`getName()`方法获取类的名称,并通过`System.out.println`打印出来。
根据提供的代码,每个类都有一个不同的名称长度,并且按照长度的顺序添加到`map`中。由于`map`的键是唯一的,所以在遍历键集合时,每个类只会被打印一次。
因此,最终结果将打印出三行,每行为一个类的名称。
阅读全文