课后作业
姓名:苏月 班级:信1405-1班 学号20142956
在学习了类和对象这一章节,我发现我更加懂得了java这门课程的一些基础性的问题,仿佛一切在我面前都明了了。
在这一章节中,有许多的动手动脑的问题,如:
以下代码为何无法通过编译?哪儿出错了?
从中我们可以看出:如果编程中自己定义了一个自定义,那么编译软件就不会启动默认自定义。而这个程序中Foo就出现了这样的问题。
在java的初始化过程中,最好不要出现初始化块,保证一个字段只初始化一次,而且在你构造了一个函数的同时,如果你调用了这个函数生成了一个实例时InitializeBlockClass obj=new InitializeBlockClass();其obj调用的是初始化的值,而obj = new InitializeBlockClass(300);却是自己输入的值。
2、class Date{
Static{
System.out.println(“100”);
}
{
System.out.println(“200”);
}
Public Date()
{
System.out.println(“Date的无参数构造器”);
}
}
class Cat extends Date{
static{
System.out.println("300");
}
{
System.out.println("400");
}
public Mid()
{
System.out.println("cat的无参数的构造器");
}
public Mid(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.println("Mid的带参数构造器,其参数值:" + msg);
}
}
class Leaf extends Cat{
static{
System.out.println("500");
}
{
System.out.println("600");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("Java初始化顺序演示");
System.out.println("执行Leaf的构造器");
}
}
public class TestStaticInitializeBlock
{
public static void main(String[] args)
{
new Leaf();
}
}
4、静态初始化的顺序:
如果是多个父类关联关系一个子类继承,静态的初始化只执行一次,而且在创建子类型的对象时,也会导致父类静态的初始化块的执行。
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();
}
}
5、packagedemo;
public class Tongji{
private staticint n;
Public Tongji(){
n++;//new一个对象的时候给n加1;
Public staticint getNum(){
return n;//返回n的值
}
Public static void main()
{
Tongji t1 = new Tongji();
Tongji t2 = new Tongji();
Tongji T3 = new Tongji();//创建对象;
System.out.println(“共有对象的个数:”+Tongji.getNum())}}