1、请输入并运行以下代码,得到什么结果?
public class Test{
public static void main(String[] args){
Foo obj1=new Foo();
Foo obj2=new Foo();
System.out.println(obj1==obj2);
}
}
class Foo
{int value=100;}
程序截图:
2、以下代码为何无法通过编译?哪儿出错了?
错误原因: 如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。
3、使用上页幻灯片中定义的类,以下代码输出的结果是什么?
请依据代码的输出结果,自行总结Java字段初始化的规律。
程序截图:
Java字段初始化规律系统会按顺序对Java字段进行初始化,如果有好几个方法都对同一个变量进行了初始化。Java会将最后一次的初始化结果赋给该变量。
4、请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。
程序截图:
静态初始化块的执行顺序:
(1)加载父类(以下序号相同,表明初始化是按代码从上到下的顺序来的)
1.为父类的静态属性分配空间并赋于初值
1.执行父类静态初始化块;
(2)加载子类
2.为子类的静态属性分配空间并赋于初值
2.执行子类的静态的内容;
(3)加载父类构造器
3.初始化父类的非静态属性并赋于初值
3.执行父类的非静态代码块;
4.执行父类的构造方法;
(4)加载子类构造器
5.初始化子类的非静态属性并赋于初值
5.执行子类的非静态代码块;
6.执行子类的构造方法.
5、静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
public class Test2 {
public static void main(String[] args)
{
Test t=new Test();
int a=t.getyear();
t.input1();
Test.input(a);
t.input(a);
}
}
class Test
{
int year = 100;
public int getyear()
{
return year;
}
public static void input(int a)
{
System.out.println("静态"+a);
}
public void input1()
{
System.out.println("实例");
}
}
程序截图:
6、使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
package demo;
public class lei {
public static void main(String[] args) {
// TODO Auto-generated method stub
lei1 a=new lei1();
lei1 b=new lei1();
b.out();
}
}
class lei1{
static int n=0;
lei1(){
n++;
}
public void out(){
System.out.println("你已经创建了"+n+"个对象!");
}
}
程序截图: