类与对象课后思考

1.请输入并运行以下代码,得到什么结果?

public class Test1 {
    public static void main(String[]args){
        Foo obj1=new Foo();
        Foo obj2=new Foo();
        System.out.println(obj1==obj2);
    }
}
class Foo
{
    int value=100;
}

运行结果:

当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等 当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。 引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同,此代码内两个变量保存的对象地址不同,所以会出现false.

2.以下代码为何无法通过编译?哪儿出错了?

public class Test2 {
    public static void main(String[]args){
        Foo obj1=new Foo();
    }
}
class Foo
{
    int value;
    public Foo(int initValue) {
    }
    value=initValue;
}

Foo obj1=new Foo()在此处调用的时候没有参数。

(3)使用上页幻灯片中定义的类,以下代码输出结果是什么?

public class Test2 {
	public static void main(String[]args){
		InitializeBlockClass obj=new InitializeBlockClass();
		System.out.println(obj.field);
		obj=new InitializeBlockClass(300);
		System.out.println(obj.field);}
}
class InitializeBlockClass{
{
	field=200;
}
public int field=100;
public InitializeBlockClass(int value){
	this.field=value;
}
public  InitializeBlockClass(){
}
}

输出结果为:

Java进行初始化的地方有两个,初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块(以上程序为实例初始化块)。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。

执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

当有两个构造函数时依据参数个数进行引用

请依据代码的输出结果,自行总结Java字段初始化的规律。

Java进行初始化的地方有两个,初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块(以上程序为实例初始化块)。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。当有两个构造函数时依据参数个数进行引用

4.请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

静态初始化块只执行一次。 创建子类型的对象时,也会导致父类型的静态初始化块的执行。

5.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)? 请编写代码验证你的想法。

public class Test1{
    int value1= 2;//实例变量
    static int  value2= 3;//类的静态变量
   public static void print()//静态方法
  {   
        System.out.println("实例变量value1 = " + new Test1().value1);
        //在静态方法中访问类的实例变量需首先进行类的实例化
        System.out.println("静态变量value2= " + value2);
        //在静态方法中可直接访问类的静态变量
    }
     public static void main(String[] args) 
     {
         Test1 test = new Test1();
        Test1.print ();
         System.out.println("结果是 :实例变量 = " + test.value1);//访问实例成员
    }
    }

  

 从上面代码可知,先new创建一个对象,通过对象去调用成员方法和变量,

 6.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。

package Test1;

public class Test1{
	public static void main(String[]args){
		Sum s=new Sum();
		Sum s2=new Sum();	
		Sum s3=new Sum();	
	}
}
class Sum{
	static int i=0;
	Sum()
	{i++;
	System.out.println("你已经创建了"+i+"个对象");}
}

实验结果:

原文地址:https://www.cnblogs.com/1998lu/p/5983736.html