动手动脑|课后作业

一、

public class Test{
 public static void main(String[] args){
Foo obj1=new Foo();
}
}
class Foo{
 int value;
 public Foo(int initVaule){
  vaule=initVaule;
}
}

如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法

 同一个类可以有多个构造函数,多个构造函数之间通过参数来区分,这是方法重载的一个实例。

构造函数之间可以相互调用

二、

public class aca {
public int field=100;
{
field=200;
}
public aca(int value) {
this.field=value;
}
public aca() {

}
public static void main(String args[]) {

aca obj=new aca();
System.out.println(obj.field);
obj=new aca(300);
System.out.println(obj.field);
}
}

当调用默认构造方法时,调用初始化体进行初始化字段;

当调用有参构造方法时,调用有参构造方法进行字段初始化;

三、

class Root
{
    static{
        System.out.println("Root的静态初始化块");
    }
    {
        System.out.println("Root的普通初始化块");
    }
    public Root()
    {
        System.out.println("Root的无参数的构造器");
    }
}
class Mid extends Root
{
    static{
        System.out.println("Mid的静态初始化块");
    }
    {
        System.out.println("Mid的普通初始化块");
    }
    public Mid()
    {
        System.out.println("Mid的无参数的构造器");
    }
    public Mid(String msg)
    {
        //通过this调用同一类中重载的构造器
        this();
        System.out.println("Mid的带参数构造器,其参数值:" + msg);
    }
}
class Leaf extends Mid
{
    static{
        System.out.println("Leaf的静态初始化块");
    }
    {
        System.out.println("Leaf的普通初始化块");
    }    
    public Leaf()
    {
        //通过super调用父类中有一个字符串参数的构造器
        super("Java初始化顺序演示");
        System.out.println("执行Leaf的构造器");
    }

}

public class TestStaticInitializeBlock
{
    public static void main(String[] args) 
    {
        new Leaf();
        

    }
}

结果:

1、静态初始化块只执行一次。

2、创建子类型的对象时,也会导致父类型的静态初始化块的执行

四、

静态方法只能访问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。 

五、

public class sum {
    public static int a=0;

    int c;

    public sum(int cc)

    {

    c=cc;

    a++;

    }

    public int get()

    {
    return a;
    }
}

public class cxc {
    public static void main(String[] args)

    {

    sum one=new sum(1);

    sum tow=new sum(2);

    sum three=new sum(3);

    System.out.println(one.get());

    }
}

统计创建类的个数;

原文地址:https://www.cnblogs.com/KYin/p/9825998.html