(1)代码
package class20191014;
import java.util.Scanner;
public class ClassHomework {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(true) {
System.out.println("请选择您要执行的功能:");
System.out.println("1.创建一个类的对象");
System.out.println("2.查询类的对象的个数");
int choose=in.nextInt();
if(choose==1) {
new A();
}
if(choose==2) {
System.out.println("您共创建了"+A.sum+"个类的对象!");
}
}
}
}class A{
static int sum=0;
A(){
sum++;
}
}
(2)运行结果
二、动手动脑
1.
答:该类的构造方法程序员已经给出的其固定的格式,该类继承自其父类的构造方法被覆盖了,所以在实例化该类的变量时,应该像该构造方法中传入一个int类型的参数。
2.
结果为:100 300
该结果说明了类的对象生成时,JAVA字段初始化是从前到后的,后边的字段会覆盖掉前边的字段,如声明field为其赋值的100会覆盖掉之前的200,新实例化一个新的对象时,构造方法在声明语句后面,300覆盖掉了100.
3.
总结:静态初始化块在该类被声明时就跟着类运行了,且只会运行依次,而类中的普通初始化块则是在类实例化时开始运行,而类的实例化时会先运行其父类,如果其父类还有父类则运行其父类的父类,依次类推。
4.
方法:可以向静态方法中传入一个该类的对象的引用,然后再该静态方法中调用该引用的非静态方法或字段。
5.
反编译之前的静态方法调用非静态字段代码: