首页 > 代码库 > 类和对象

类和对象

 

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=http://www.mamicode.com/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+"个对象!");
}
}

程序截图:技术分享

 

类和对象