第三次上课 PPT 课后测试

第一个:

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

public class Example {
    public static void main(String args[])
    {
        InitiallizeBlockClass obj=new InitiallizeBlockClass();
        System.out.println(obj.field);
        
        obj=new InitiallizeBlockClass(300);
        System.out.println(obj.field);
    }
}

输出结果:

Java字段初始化规律:若一个之前后被赋值两次,那么前一次的赋值会被第二次所覆盖。

 

第二个:

class people
{
    public String species;
    {
        species="Human";
    }
}

class man extends people
{
    
}

public class Example {
    public static void main(String args[])
    {
        man m=new man();
        System.out.println(m.species);
    }
}

People为父类,man为子类,子类中并未进行定义,但是可以输出结果,而且结果是在父类中定义的结果。所以当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行,成立。

 

第三个:

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();
        

    }
}

输出结果:

静态初始化块的执行顺序:先执行static的赋值,之后再从上到下,依次进行各个类的赋值。

 

第四个:

class Employee
{
    String name;
    long salary;
    static void information(Employee e)
    {
        System.out.println("姓名为:"+e.name);
        System.out.println("薪水为:"+e.salary);
    }
}

public class Example {
    public static void main(String args[])
    {
        Employee e=new Employee();
        e.name="Hui";
        e.salary=5000;
        e.information(e);
    }
}

输出结果:

静态方法中只允许访问静态数据,在静态方法中访问类的实例成员的话,就先实例化类,得到一个实例变量,将要使用的类作为参数传递给静态方法。

 

posted @ 2015-10-17 23:43  YangLna  阅读(507)  评论(0编辑  收藏  举报