第三次java课动手动脑与课后作业

1.课后作业

问题:

 原码:

Test.java:

package test3;

public class Test {

public static void main(String[] args) {
Ch c[]=new Ch[10];
for(int i=0;i<10;i++)
{
c[i]=new Ch();
System.out.println(c[i].gettime());
}
}

}

Ch.java

package test3;

public class Ch {
private static int time=0;
public Ch()
{
time++;
}
public int gettime()
{
return time;
}
}

截图:

 说明:

声明为类的静态字段可以保证time的不会随着对象的声明而改变,构造函数中让time+1,表示创建了一个对象.

2.

动手动脑:

1)问题:

当为类Foo写了构造函数之后,系统将不会再生成默认的构造函数,由于Foo已有含参数int initValue,而主函数调用时有是无参,所以会发生错误.

2)

 

package text2;

public class test {

public static void main(String[] args) {
ob ob1=new ob();
System.out.println(ob1.value);

}

}

package text2;

public class ob {
public int value=100;
{
value=200;
}
public ob()
{
value=300;
}
}

测试结果:

 说明:构造函数中的优先级最高,其次是初始化块,最后是定义时.

3)

原码:

package text2;

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 test
{
public static void main(String[] args)
{
new Leaf();

}
}

运行结果:

 说明:首先从父类开始执行静态初始化块,随后从父类开始执行普通初始化块和构造函数.

4)

 原码:

package text2;

public class test
{
public static void main(String[] args)
{
ob c=new ob();
c.shuchu();

}
}

package text2;

public class ob {
private int a=1;
private static int b=2;
public static void shuchu()
{
System.out.println("实例a="+new ob().a);
System.out.println("静态b="+b);
}
}

输出结果:

猜你喜欢

转载自www.cnblogs.com/sicilya/p/11692505.html