持有对象指的是Java中保存对象的方式,这次我们主要谈论是Java中的容器类。
Java内的容器类可以划分为两种:
①Collection。一个独立的元素序列,这些元素都服从一条或多条规则。常用的有List,Set,Queue,Stack等等。
②Map。一组成对的“键值对”对象,允许我们使用键来查找值。
Collection 接口概括了序列概念,关于List,Set等这些类的基本方法,在平时开发中经常用到对于其包含的基本方法就不一一介绍了,另外值得提一下的是 java.util包中的Arrays和Collections类中包含了很多实用的方法,例如:Arrays.asList()方法接受一个数组,或者 是用都好分隔的元素列表,并将其转换为List对象。
关于Arrays.asList()方法只是对它所产生的List类型做出理想的假设,并不会检测你声明类型,进行转型,通过下面这个例子可以看出这一点:
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; class Snow{} class Powder extends Snow{} class Light extends Powder{} class Heavy extends Powder{} class Crusty extends Snow{} class Slush extends Snow{} public class AsListInference { public static void main(String[] args) { List<Snow> snow1 = Arrays.asList(new Crusty(), new Slush(), new Powder()); // List<Snow> snow2 = Arrays.asList(new Light(), new Heavy()); List<Snow> snow3 = new ArrayList<Snow>(); Collections.addAll(snow3, new Light(), new Heavy()); List<Snow> snow4 = Arrays.<Snow>asList(new Light(), new Heavy()); } }
其中snow2与snow5注释掉了,
snow2报错为:Type mismatch: cannot convert from List<Powder> to List<Snow>
当 试图创建snow2是只有Powder类型,所以会创建List<Powder>而不是List<Snow>,如果 asList()方法参数中含有不同类,则试图生成最上层的基类,或者Object的List。也可以像snow4中,告诉编译器生成Snow类型的 List。
在使用容器类时我们经常使用到迭代器。迭代器是一个对象,它的工作室遍历并选择序列中的对象,而客户端程序员不必知道该序列的底层结构。所以我们可以看出迭代器的真正优势在于:能够将遍历序列的操作与底层序列的结构分离,统一了我们对容器的访问方式。
如果我们编写了一个方法,其接受一个Collection的参数,我们有两种方式(1)通过继承AbstractCollection
public class CollectionSequence extends AbstractCollection<Snow>{ private Snow[] snows = {new Snow(), new Snow(), new Snow()}; public Iterator<Snow> iterator(){ return new Iterator<Snow>() { private int index = 0; @Override public void remove() { throw new UnsupportedOperationException(); } @Override public Snow next() { return snows[index++]; } @Override public boolean hasNext() { return index < snows.length; } }; } @Override public int size() { return snows.length; } }
(2)通过实现collection接口中的方法
class SnowSequence{ protected Snow[] snows = {new Snow(), new Snow(), new Snow()}; } public class NonCollectionSequence extends SnowSequence{ public Iterator<Snow> iterator(){ return new Iterator<Snow>() { private int index = 0; @Override public void remove() { throw new UnsupportedOperationException(); } @Override public Snow next() { return snows[index++]; } @Override public boolean hasNext() { return index < snows.length; } }; } }
可以看出我们可以通过继承AbstractCollection很容易实现,但此时必须强制的实现iterator()和size()方法,而且此时可以 使用foreach结构,如果我们的类已经继承了其他的类就必须通过第二种方式实现了。这里面用到了我们前面提到的匿名内部类。
相关推荐
第11章的主题是“持有对象”,这一章主要探讨了如何在Java中创建和管理对象,包括对象的引用、对象的生命周期、类与对象的关系,以及如何通过集合来存储和操作对象。以下是对这些知识点的详细解释: 1. **对象引用*...
在Java编程中,容器是用来存储和管理对象的类或接口,它们使得我们可以在程序中方便地组织和操作数据。在Java中,常见的容器主要分为三类:List、Set和Map,这些都是Java集合框架的重要组成部分。 首先,我们来看...
这一章的主题"第十一章 持有对象"可能探讨的是如何在程序中有效地管理和控制对象的生命周期,特别是在Java、C++或者.NET等面向对象编程语言中的应用场景。持有对象涉及到的关键知识点包括引用计数、智能指针、垃圾...
持有对象(也称为引用)是Java程序中的重要概念,它涉及到对象的创建、存储和传递。13、14章的讲义详细讲解了如何声明和使用对象,以及如何在不同方法间传递对象,这对于理解对象的生命周期和内存管理至关重要。 多...
Java作为一种主流的面向对象编程语言,其对象的创建与管理是程序运行的基础。本文将详细探讨Java对象在JVM中的创建过程以及其内存布局,帮助读者更深入地理解Java对象是如何在内存中产生的。 #### 二、对象的创建 ...
【Java基础知识】 Java是一种广泛使用的面向对象的编程语言,其基础知识是学习Java开发的基石。以下是基于提供的信息,对Java基础知识的详细说明: **循环中的退出关键字** 1. **break**:当在循环(如for,while或...
以上内容涵盖了Java基础知识的多个方面,包括面向对象编程的核心概念、异常处理机制、字符串操作技巧、线程同步控制、集合框架、JVM类加载机制等。通过深入理解这些概念和技术,可以帮助开发者更有效地利用Java进行...
虽然文档本身并未给出具体的Java基础知识内容,但结合标题和描述可以推断,这份文档很可能包含了以下Java基础知识: 1. **Java语言简介**:介绍了Java语言的历史背景、特点和发展趋势。 2. **Java语言基本语法**:...
Java是一种广泛使用的面向对象的编程语言,其语法丰富,功能强大。在Java中,内部类是一个重要的特性,它允许我们在一个类的内部定义另一个类。内部类提供了更高级别的封装,可以访问外部类的私有成员,使得代码更加...
### 2017年阿里Java基础面试题文档解析 #### 一、自我介绍与问题解决能力 在自我介绍部分,面试者应该清晰地表达自己的背景、经历以及为什么选择当前的职业道路。此外,通过讲述一个具体的问题解决案例,能够展现...
【Java基础版 CORE JAVA 学习文档】 在Java编程领域,CORE JAVA是指核心Java,它涵盖了Java语言的基础知识,如语法、面向对象编程、异常处理、集合框架、多线程等。这个学习文档《CoreJava_sc_doc.doc》显然是为了...
### Java基础教程知识点详解 #### 一、Java的历史与发展 - **起源与早期发展** - Java最初来源于Sun公司的Green项目,目标是为了开发一个适用于家用电子产品(如电冰箱、电视机等)的分布式代码系统。 - 由于C++...
面向对象的思维方式是Java编程的核心思想,它强调模拟真实世界中的实体和它们之间的关系,将复杂问题分解为更小、更易于管理的部分。...在Java中,这种思维方式是编写高质量代码的基础,也是理解和掌握Java编程的关键。
### JAVA面试基础题知识点解析 #### 一、final, finally, finalize - **final**:在Java中,关键字`final`可以用来修饰类、方法和变量。当一个类被声明为`final`时,它不能被继承;如果一个方法被声明为`final`,...
总之,Java中的类和对象是面向对象编程的基础。类定义了对象的结构和行为,而对象是类的具体实例,持有状态并执行行为。通过构造方法创建和初始化对象,然后通过引用变量来操作和访问这些对象。理解和掌握这些概念...
- Java Platform, Enterprise Edition(Java EE),建立在Java SE基础之上,用于构建企业级应用。 - Java Platform, Micro Edition(Java ME),为机顶盒、移动电话和PDA等嵌入式消费电子设备提供的Java解决方案。 ...
### Java基础之多线程讲解 #### 一、进程与线程的概念 - **进程**:进程是系统进行资源分配和调度的基本单位,是应用程序运行时的实例。一个进程中可以包含一个或多个线程。 - **线程**:线程是进程中的实际运作...
### Java基础知识点详解 #### 一、访问修饰符:public, private, protected 和 默认(friendly) 在Java中,可以通过四种不同的访问级别控制类、变量、方法或者构造器的可见范围: 1. **public**:公开的,对于...
1. 封装:封装是面向对象编程的基础,它将数据和操作数据的方法捆绑在一起,形成一个独立的对象。在Java中,通过定义类(class)并使用访问修饰符(如private、public)来实现封装。类是对象的模板,它包含了属性...