从头认识java-6.1 聚合(aggregation)

我们来说一下复用类最简单的方法:聚合(aggregation)

其实说白了,就是建立了一个类,然后在其他地方引用来使用。

package com.ray.ch05;

public class Test {
	public static void main(String[] args) {
	}
}

package com.ray.ch05;
public class Test2{
	public static void main(String[] args) {
		new Test();
	}
}

建立了Test这个类,我们可以在程序的任何地方new出来,就好像在Test2里面new一样,这样其实就是最简单的聚合复用。

但是,我们在复用的时候需要注意一点,就是对象的初始化问题。

我们修改一下上面的代码:

package com.ray.ch05;

public class Test {
	public void say() {//增加了一个公共方法
		System.out.println("method say");
	}

	public static void main(String[] args) {
	}
}

package com.ray.ch05;

public class Test2 {
	private Test test;//引用Test

	private void runSay() {
		test.say();
	}

	public static void main(String[] args) {
		new Test2().runSay();
	}
}

运行输出:

Exception in thread "main" java.lang.NullPointerException
at com.ray.ch05.Test2.runSay(Test2.java:7)
at com.ray.ch05.Test2.main(Test2.java:11)

空指针错误,因为我们在Test2里面没有实例化对象test,而默认的编译器只是初始化为null,因此会有运行时错误。

因此,我们必须注意对象的初始化,因为它们不像基础类型那样,编译器默认赋值。这个是编译器的优化策略。

所以,我们Test2上面的代码必须把Test这个类的对象实例化出来

package com.ray.ch05;

public class Test2 {
	private Test test=new Test();

	private void runSay() {
		test.say();
	}

	public static void main(String[] args) {
		new Test2().runSay();
	}
}

重新运行输出:

method say

总结:这一章节主要讨论了聚合语法的复用类,以及它的一些注意点。

这一章节就到这里,谢谢。

-----------------------------------

目录

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-10 15:05:12

从头认识java-6.1 聚合(aggregation)的相关文章

[Java]#从头学Java# Java大整数相加

重操旧业,再温Java,写了个大整数相乘先回顾回顾基本知识.算法.效率什么的都没怎么考虑,就纯粹实现功能而已. 先上代码: 1 package com.tacyeh.common; 2 3 public class MyMath { 4 5 public static String BigNumSum(String... n) { 6 int length = n.length; 7 StringBuilder result = new StringBuilder(); 8 //这里判断其实不需

UML的关联(Association), 聚合(Aggregation), 组合(Composition)区别

转载:http://blog.csdn.net/ocean181/article/details/6117369 三者描述对象的附属[也就是依赖]关系: 关联<聚合<组合, 依赖关系是逐渐加强的. inheritance: "a kind of": 猫是一种动物,说明猫从动物继承: association: 两者之间存在某种关联即可,很弱的关系,如student and course, 每个学生可以选不同的课,每门课上有不同学生: aggregation: "co

Elasticsearch5.0 Java Api(七) -- 聚合查询

测试聚合查询功能 1 package com.juyun.test; 2 3 import java.net.InetAddress; 4 import java.util.List; 5 6 import org.elasticsearch.action.search.SearchResponse; 7 import org.elasticsearch.client.Client; 8 import org.elasticsearch.common.settings.Settings; 9 i

从头学Java【3】——之命名方法

1.命名法 对于变量.数组.方法/函数.类和对象,如何规范地进行命名至关重要,尤其是当程序规模扩大,变量数量激增的情况下.比较著名的命名规则: (1)匈牙利命名法 这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的,C语言中常用此种命名法.标识符的名字以一个或者多个小写字母开头作为前缀:前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途.例如:lpszStr, 表示指向一个以'\0'结尾的字符串(sz)的长指针(lp)变量. (2

国外java开源网站聚合

sourceforge http://www.sourceforge.netjava.net http://www.java.net www.eclipse.org www.opensource.org http://strutstestcase.sourceforge.net (StrutsTestCase是基于Junit的一个方便测试struts框架的测试框架) Lomboz [www.objectlearn.com] (J2EE plugin for Eclipse)htmlArea [s

从头学Java【4】——之重载及构造方法

1.方法的重载:实现相同功能使用相同方法名: 2.构造方法: 作用:定义对象时给对象的各个属性赋初值: 特点: (1)构造方法名与类名相同:没有返回值和返回类型: (2)给对象属性赋初值时,是通过参数传递实现: (3)构造方法是在创造对象时,跟在new后面执行,不能通过对象或者类来调用构造方法: (4)如果定义类时既给字段进行了赋初值, 也有构造方法, 在创建对象时是先给成员变量赋初值,再执行构造方法的方法体: (5)如果程序员没有定义构造方法,系统会默认一个无参数的构造方法: (6)当程序员定

从头学Java【3】——几个重要的关键字汇总

几个重要的关键字汇总(a表示怎么用?b表示什么时候使用?c表示注意事项) (1)abstract关键字 a.可以修饰类.方法 修饰类时:不能实例化对象:必须被子类继承: 修饰方法时:没有方法体:必须写在抽象类中:必须被子类重写,若子类不重写,也声明为抽象类: b.一般现实中不存在的事物使用抽象类:父类方法,各子类实现方式各不相同时,则此方法在父类中声明为抽象方法; c.不能与这些关键字一起使用:private.static.final:不能修饰构造方法: (2)static关键字 a.可以修饰成

BTrace工具简介

What is Btrace? Java进程诊断分析工具 安全的工具 无侵入性 不修改应用任何应用数据 限制跟踪行为,没能有循环 依赖组件 使用OjbectWeb ASM组件来完成字节码层面上的跟踪分析 开源组件 项目主页:http://btrace.dev.java.net GPLv2 + CLASSPATH Exception VisualVM 插件和开发时插件 BTrace应用较为广泛的原因应该是其安全性和无侵入性,已经热交互技术,使得我们无需启动Agent的情况下动态跟踪分析,其安全性不

java中依赖、关联、聚合

在学习面向对象设计对象关系时,依赖.关联.聚合和组合这四种关系之间区别比较容易混淆.特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境.特定情景等. 依赖(Dependency)关系是类与类之间的联接.依赖关系表示一个类依赖于另一个类的定义.例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House类的定义,因为Person类引用了Car和House.与关联不同的是,Person类里并没有Car和House类型的属性,Car和Hous

Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别

在C++中,类与类之间的关系大概有四种,分别为继承,关联,聚合,和组合.其中继承我们大家应该都比较熟悉,因为是C++的三大特性继承Inheritance,封装Encapsulation,和多态Polymorphism之一. 继承Inheritance:是指一个类(子类)来继承另一个类(基类),并增加自己的功能,可以通过重写基类中的函数来实现.可以将继承理解成“IS A”的关系,比如A cat "IS A" animal, or A car "IS A" vehicl