java反射找不到这个类

package study.ref;

import study.test.Dog;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Scanner;


public class ClassLoad {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入key");
        String key = scanner.next();
        switch (key) {
            case "1":
                Dog dog = new Dog();
                dog.hi();
                break;
            case "2":
                Class cls = Class.forName("Person");
                Object o = cls.getDeclaredConstructor().newInstance();
                Method m = cls.getMethod("hi");
                m.invoke(o);
                System.out.println("ok");
                break;
            default:
                System.out.println("do nothing..");
        }
    }
}

class Person {
    public void hi() {
        System.out.println("打招呼");
    }
}

为什么找不到这个Person类?

Class cls = Class.forName(Person.class.getCanonicalName());

Class cls = Class.forName("Person");

person的包名也要写

Class.forName(“study.ref.ClassLoad.Person”)这样写