课堂练习及动手动脑

1.对象变量也可以使用“==”判断两变量值是否相等吗?

   不能,当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等

当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。

引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。

2.进行试验

3如何比较两个对象的“内容”是否一样?

4.代码无法通过编译,哪里出问题了?

类提供了一个自定义的构造方法,导致系统不再提供默认的构造方法

错误地点:Foo obj1=new Foo();

          public Foo(int initValue)

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

Java中任何对象初始化时,属性字段都有默认值,,如一般的char/string,初始化为null,其他数值型初始化为零,但是方法中的“局部变量”不会被初始化,j就是不确定的值,另外Java中不允许重复定义。

6.当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

请自行编写示例代码验证以上结论。

class InitializeBlockClass{

public int field=100;

public InitializeBlockClass(int value){

this.field=value;

}

public InitializeBlockClass(){

}

}

class InitializeBlockClassNext{

public int field1=100;

public InitializeBlockClassNext(int value){

this.field1=value;

}

public InitializeBlockClassNext(){

}

}

class InitializeBlockClassBack{

{

field2=200;

}

public int field2=100;

public InitializeBlockClassBack(int value){

this.field2=value;

}

public InitializeBlockClassBack(){

}

}

public class Parent {

public static void main(String[] args) {

// TODO 自动生成的方法存根

          InitializeBlockClass obj=new InitializeBlockClass();

          {

           obj.field=200;

          }

          System.out.println(obj.field);

          obj=new InitializeBlockClass(300);

          System.out.println(obj.field);

          InitializeBlockClassNext obj1=new InitializeBlockClassNext();

          System.out.println(obj1.field1);

          obj1=new InitializeBlockClassNext(500);

          System.out.println(obj1.field1);

          InitializeBlockClassBack obj2=new InitializeBlockClassBack();

          System.out.println(obj2.field2);

          obj2=new InitializeBlockClassBack(600);

          System.out.println(obj2.field2);

}

}

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

静态初始化执行顺序:

静态代码块内容先执行(父先后子),接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

8.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

 class StaticDemo{

         static int x;

         int y;

         static public int getX(){

          return x;

         }

         static void setX(int newX) {

// TODO 自动生成的方法存根

x=newX;

         

}

         public int getY(){

          return y;

         }

         public void setY(int newY){

          y=newY;

         }

}

public class ShowDemo {

public static void main(String[] args) {

// TODO 自动生成的方法存根

System.out.println("静态变量x="+StaticDemo.getX());

//System.out.println("实例变量y="+StaticDemo.getY());

         //实例变量是声明对象初始化才能进行调用,

StaticDemo a=new StaticDemo();

StaticDemo b=new StaticDemo();

a.setX(1);

a.setY(2);

b.setX(3);

b.setY(4);

System.out.println("静态变量a.x="+a.getX());

System.out.println("静态变量a.y="+a.getY());

System.out.println("静态变量b.x="+b.getX());

System.out.println("静态变量b.y="+b.getY());

}

}

9.不使用Eclipse,直接使用命令行运行Test1.javaTest2.JavaTest3.Java

原文地址:https://www.cnblogs.com/qingqing2015/p/4888326.html