标签:
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.
以下代码为何无法通过编译?哪儿出错了?
public class Test{
public static void main(String[] args){
Foo obj1=new Foo();
}
}
class Foo {
int value;
public Foo(int initvalue){
value =initvalue;
}
}
原因:类提供了构造方法,所以用系统默认的不行。
3.使用上页幻灯片中定义的类,以下代码输出结果是什么?依据代码的输出结果,总结Java字段初始化的规律。
 
(1)执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
(2)执行类的构造函数,当有多个构造函数时,要通过参数区分。
4.当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。请自行编写示例代码验证以上结论。
//当多个类之间有继承关系时,创建子类对象会导致
//父类初始化块的执行。
package demo;
class Class1
{
static
{
System.out.println("类1的静态初始化块");
}
}
class Class2 extends Class1
{
static
{
System.out.println("类2的静态初始化块");
}
}
class Class3 extends Class2
{
static
{
System.out.println("类3的静态初始化块");
}
}
public class GFS
{
public static void main(String[] args)
{
new Class3();
}
}
结果截图:

5.请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。
 
(1)静态初始化块只执行一次。
(2)创建子类型的对象时,也会导致父类型的静态初始化块的执行。
6.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?请编写代码验证你的想法。
public class Test{
    int a = 2;//实例变量
    static int  b = 3;//类的静态变量
    public static void variable()//静态方法
    {   
        System.out.println("实例变量a = " + new Test().a);
        //在静态方法中访问类的实例变量需首先进行类的实例化
        
        System.out.println("静态变量b = " + b);
        //在静态方法中可直接访问类的静态变量
    }
     public static void main(String[] args) 
     {
         Test.variable();
         Test test = new Test();
         System.out.println("结果是 :实例变量 = " + test.a);//访问实例成员
    }
    }
7.神奇代码。
public class StrangeIntegerBehavior
{
public static void main(String[] args)
{
Integer i1=100;
Integer j1=100;
System.out.println(i1==j1);
Integer i2=129;
Integer j2=129;
System.out.println(i2==j2);
}

8.使用类的静态字段和构造函数,跟踪某个类已创建的对象个数。
代码:
package demo;
public class Search {
	static int i;
	public Search()
	{  
		i++;  //每创建一个类的对象i加1
	}  
	static int getNum()
	{  
		return i;  
	}  
	public static void main(String[] args){   
		Search s1 = new Search();
		Search s2 = new Search(); 
		System.out.println("已创建对象个数:"+Search.getNum());
	}
}
标签:
原文地址:http://www.cnblogs.com/kt97458/p/4888311.html