[javase学习笔记]-6.5 类类型參数与匿名对象

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

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

class Car
{
	int num;//这是轮胎数属性
	String color;//这是颜色属性
	String brand;//这是品牌性

	void start()//启动行为
	{
		System.out.println("小汽车已启动");
	}
	void run()//这就是执行行为
	{
		System.out.println(num+"..."+color+"..."+brand);
	}
}

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

对于我们刚開始学习的人,我们肯定会用这种操作:

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";
		//定义第三辆甚至很多其它时,仅仅能这样不断的写代码
	}
}

我们能够说说,上面的代码确实非常烂了,我们做了非常多同样的操作,假设我们要定义非常多同样的车时,代码的复用性确实太差了.

那么我们该怎么做呢,非常显然,我们必需要提高代码的复用性,也就是说我们能够把同样功能的代码封装起来以反复使用,那么就可这样做:

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";
	}
}

从上面的代码我们非常easy就实现了同样车辆的组装,提高了代码的复用性,同一时候我们注意到,封装的功能的參数是一个类类型的形式參数,它指向的是一个Car类型的对象.

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

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

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

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

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

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

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

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

对于上面这样的情况,我们能够简写为例如以下一句代码:

new Car().run;

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

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

我们看一段代码:

class CarDemo
{
	public static void main(String[] args)
	{
		new Car().num = 5;
		new Car().color = "green";
		new Car().run();
	}
}

我们看一下结果:

对于这三句语句,每运行一名,在堆内存中都会创建新的空间,而不是仅仅创建一个对象.当运行以下的一句语句时,前面的语句已经被释放了,所以上面的前两句代码没有意义.可是最后一句会被运行,由于该对象对方法仅仅进行了一次调用.

匿名对象的另外一种使用方法:

匿名对象能够作为实际參数进行传递.

比方前面我们的方法assemble(Car car),我们能够这样使用:

assemble(new Car());
时间: 2024-11-29 09:20:26

[javase学习笔记]-6.5 类类型參数与匿名对象的相关文章

[javase学习笔记]-6.6 基本数据类型參数与引用数据类型參数的传递过程

这一节基本数据类型參数和引用数据类型參数的传递过程. 数据类型參数和引用參数我们在前面章节中都已涉及到了,那么我们来看看以下的两段代码: //基本数据类型參数传递 class Demo { public static void main(String[] args) { int x = 3; change(x);//调用方法 System.out.println("x = " + x);// } public static void change(int x) { x = 4; } }

【web开发学习笔记】Structs2 Result学习笔记(三)带參数的结果集

Result学习笔记(三)带參数的结果集 第一部分:代码 //前端 <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>Insert title here</title> </head> <body> <ol> <li><a href="

[javase学习笔记]-6.2 类与对象的关系

这一节我们来看一下类与对象之间的关系. 我们学习java语言,目的就是用java语言对现实生活中的事物进行描写叙述.那么我们如何来描写叙述呢.这就引出了类,我们在实际实现时,是通过类的形式来体现的. 那么对于现实生活中的事物怎样描写叙述呢? 我们在现实生活中对于事物描写叙述通常仅仅关注两个方面,一个是属性,还有一个就是行为. 那么非常自然.计算机的描写叙述就产生出详细的对象. 比方我们要描写叙述一个小汽车.那么我们要怎么描写叙述呢?通过上面关注两个方面,我们非常轻松的从两个方面进行下面描写叙述:

springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需求 表现层实现 list绑定 需求 表现层实现 map绑定 本文主要介绍注解开发的集合类型參数绑定,包含数组绑定,list绑定以及map绑定 数组绑定 需求 商品批量删除,用户在页面选择多个商品.批量删除. 表现层实现 关键:将页面选择(多选)的商品id,传到controller方法的形參,方法形參使用数组接收页面请求的多个商

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

Linux 程序设计学习笔记----Linux下文件类型和属性管理

转载请注明出处:http://blog.csdn.net/suool/article/details/38318225 部分内容整理自网络,在此感谢各位大神. Linux文件类型和权限 数据表示 文件属性存储结构体Inode的成员变量i_mode存储着该文件的文件类型和权限信息.该变量为short int类型. 这个16位变量的各个位功能划分为: 第0-8位为权限位,为别对应拥有者(user),同组其他用户(group)和其他用户(other)的读R写W和执行X权限. 第9-11位是权限修饰位,

Go语言学习笔记(二) [变量、类型、关键字]

日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号. 2.Go 同其他语言不同的地方在于变量的类型在变量名的后面.例如:不是,int a,而是 a int.当定义了一个变量,它默认赋值为其类型的 null 值.这意味着,在 var a int后,a 的 值为 0.而 var s string,意味着 s 被赋值为零长度字符串,也就是 "". 3.Go语言的变量声明和赋值 在Go中使

Lua学习笔记4:类及集成的实现

-- Lua中类的实现 -------------------------------- 基类 ---------------------------- classBase = {x = 0,y = 0} -- x,y为类的成员变量 classBase.__index = classBase -- 这句是重定义元表的索引,必须要有 --模拟构造体,一般名称为new() function classBase:new(x,y) local self = {}     -- 初始化对象自身 setme

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件