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; // 这是可以的
}
}
public class Hello {
private void func(){};
public static void main(String[] args) {
// func(); 这是不允许的
Hello h = new Hello();
h.func; // 这是可以的
}
}
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方法根本就不可能访问得到.你上面的代码是在静态方法里面实例化了一个对象,然后调用这个实例的方法,当然没有问题了
1,类的构造函数是可以重载的,你的类Flower有好几个构造函数(这样设计是为了不同初始的需要),还有两点你要明白的就是,1,构造函数之间是可以相互调用的,2,this是对当前对象的一个引用(与C++里面的一样);所以你问的this("hi", 47)不是对当前对象的初始化,并且调用的构造函数是Flower(String s, int petals) {},2,不是的,3,呵呵,你学习很仔细呀,public static void main(String[] args),是Application程序的程序入口,这个方法是供操作系统调用的,而且这个形式是APPLICATION程序的固有入口形式。
祝你成功!