我这段非常简单的Java代码用,为什么提示Persion_Name和Persion_Name()

public class Demo4
{
public static void main(String[] args)
{
Person_Name p1=new Person_Name();
p1.speak();

class Person_Name{
public void speak()
{
System.out.println("我是一个好人");
}
}

}

}
CMD编译 找不到符号提示Persion_Name和Persion_Name()
图片说明

 public class Demo4 {
    public static void main(String[] args) {
        Person_Name p1 = new Demo4.Person_Name();  //当内部类 是静态
        Person_Name p2 = new Person_Name();  //当内部类 是静态
        p1.speak();
    }
    static class Person_Name {
        public void speak() {
            System.out.println("我是一个好人");
        }
    }
}
 package hello;

public class Demo4 {
    public static void main(String[] args) {
        Person_Name p1 = new Demo4().new Person_Name();  //当内部类 非静态
        p1.speak();
    }
    class Person_Name {
        public void speak() {
            System.out.println("我是一个好人");
        }
    }
}

你需要百度下:内部类

person_name这个类不应该写在main中,直接写在demo4中。就是说你括号有问题