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.java,Test2.Java,Test3.Java
原文:http://www.cnblogs.com/qingqing2015/p/4888326.html