疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java类类型参数与匿名对象


 

   

  这一节我们来说说类类型参数和匿名对象.

  我们继续用之前的小汽车类吧

  [java]

  class Car

  {

  int num;//这是轮胎数属性

  String color;//这是颜色属性

  String brand;//这是品牌性

  void start()//启动行为

  {

  System.out.println("小汽车已启动");

  }

  void run()//这就是运行行为

  {

  System.out.println(num+"..."+color+"..."+brand);

  }

  }

  对于我们的Car类,如果我们要创建多个相同的小汽车我们应该怎么做呢?

  对于我们初学者,我们肯定会用这样的操作:

  [java]

  class CarDemo

  {

  public static void main(String[] args)

  {

  //定义第一辆车

  Car myCar1 = new Car();

  myCar1.num = 4;

  myCar1.color = "red";

  myCar1.brand = "BWM";

  //定义第二辆车

  Car myCar2 = new Car();

  myCar1.num = 4;

  myCar1.color = "red";

  myCar1.brand = "BWM";

  //定义第三辆甚至更多时,只能这样不断的写代码

  }

  }

  我们可以说说,上面的代码确实很烂了,我们做了很多相同的操作,如果我们要定义很多相同的车时,代

  码的复用性确实太差了.

  那么我们该怎么做呢,很显然,我们必须要提高代码的复用性,也就是说我们可以把相同功能的代码封装

  起来以重复使用,那么就可这样做:

  [java]

  class CarDemo

  {

  public static void main(String[] args)

  {

  //定义第一辆车

  Car myCar1 = new Car();

  assemble(myCar1);

  System.out.println("myCar1是一辆"+myCar1.color+"颜色的"+myCar1.brand+"品牌的小汽

  车,它有"+myCar1.num+"个轮子");

  //定义第二辆车

  Car myCar2 = new Car();

  assemble(myCar2);

  System.out.println("myCar2是一辆"+myCar2.color+"颜色的"+myCar2.brand+"品牌的小汽

  车,它有"+myCar2.num+"个轮子");

  //定义第三辆可以直接复用assemble(Car car)这个组装功能即可

  }

  //我们可以封闭一个汽车组装的功能,然后调用这个功能就可以

  public static void assemble(Car car)//类类型的参数一定要指向对象,要么就是null

  {

  car.num = 4;

  car.color = "red";

  car.brand = "BWM";

  }

  }

  从上面的代码我们很容易就实现了相同车辆的组装,提高了代码的复用性,同时我们注意到,封装的功能

  的参数是一个类类型的形式参数,它指向的是一个Car类型的对象.

  我们来看一下上面代码的结果:

  我们从结果上看到确实实现了我们想要实现的相同汽车.

  我们再简单来看一下比较特殊的情况,就是匿名对象.

  匿名对象顾名思义就是没有名字的对象

  [java]

  new Car();//匿名对象,其实就是定义对象的简写格式

  那么匿名对象一般怎么用呢?

  我们先看一例子,比如我们要创建一辆车,并运行run方法,那么我们会这样做:

  [java]

  Car c = new Car();//这个是有名对象

  c.run();

  对于上面这种情况,我们可以简写为如下一句代码:

  [java]

  new Car().run;

  那么我们就看到匿名对象的第一种用法:

  当对象对方法仅进行一次调用的时候,就可以简化成匿名对象.

  我们看一段代码:

  [java]

  class CarDemo

  {

  public static void main(String[] args)

  {

  new Car().num = 5;

  new Car().color = "green";

  new Car().run();

  }

  }

  我们看一下结果:

  对于这三句语句,每执行一名,在堆内存中都会创建新的空间,而不是只创建一个对象.当执行下面的一

  句语句时,前面的语句已经被释放了,所以上面的前两句代码没有意义.但是最后一句会被执行,因为该

  对象对方法只进行了一次调用.

  匿名对象的第二种用法:

  匿名对象可以作为实际参数进行传递.

  比如前面我们的方法assemble(Car car),我们可以这样使用:

  [java]

  assemble(new Car());