1: this(petals) 和 this("hi", 47) 都是构造函数2: 构造函数在实例化(就是生成类的一个对象)的过程中会被调用, 调用哪个就看你是通过哪个 new 的; 例如 Hello2 x = new Hello2();调用的是无参的构造函数3: 因为你是通过 x 这个引用调用 print() 所以可以调用
public class Hello {
  private void func(){};
  public static void main(String[] args) {
      // func(); 这是不允许的
      Hello h = new Hello();
      h.func; // 这是可以的 
  }
}

解决方案 »

  1.   

    1:代码this(),代码的是调用构造子,他是构造函数的从载的意思,this("a"),就是调用参数为String的构造子
    2:不是,如你调用Test s=new Test(),那么他调用没有参数的构造子,Test a=new Test("s"),调用参数为一个String的构造子.因为在构造子Flower(String s, int petals)中调用了另外的构造子,相当与方法调用一样,所以可以打印出其他的东西.
    3:里面提到说不能在Static方法里面调用非Static的方法指的是:
    public class Test{
         String  a="AAA";
         void static ff(){
             System.out.println(a);
         }
    }
    你不能这么写,因为static属于整个类,而不是某一个实例,当一个static方法执行时,根本就不知道还有没其他实例存在,所以不能调用属于实例的数据,并且static的数据实在整个类的代码第一次调入内存是存在的,而某一个实例的数据是执行完构造子以后才分配的,所以static方法根本就不可能访问得到.你上面的代码是在静态方法里面实例化了一个对象,然后调用这个实例的方法,当然没有问题了
      

  2.   

    呵呵,你的问题很基础,下面是你的问题的答案:
    1,类的构造函数是可以重载的,你的类Flower有好几个构造函数(这样设计是为了不同初始的需要),还有两点你要明白的就是,1,构造函数之间是可以相互调用的,2,this是对当前对象的一个引用(与C++里面的一样);所以你问的this("hi", 47)不是对当前对象的初始化,并且调用的构造函数是Flower(String s, int petals) {},2,不是的,3,呵呵,你学习很仔细呀,public static void main(String[] args),是Application程序的程序入口,这个方法是供操作系统调用的,而且这个形式是APPLICATION程序的固有入口形式。
    祝你成功!