`
lwbbupt
  • 浏览: 36341 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java基础之持有对象

阅读更多

        持有对象指的是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结构,如果我们的类已经继承了其他的类就必须通过第二种方式实现了。这里面用到了我们前面提到的匿名内部类

 

1
1
分享到:
评论

相关推荐

    think in java 第11章 持有对象

    第11章的主题是“持有对象”,这一章主要探讨了如何在Java中创建和管理对象,包括对象的引用、对象的生命周期、类与对象的关系,以及如何通过集合来存储和操作对象。以下是对这些知识点的详细解释: 1. **对象引用*...

    java容器(持有对象)

    在Java编程中,容器是用来存储和管理对象的类或接口,它们使得我们可以在程序中方便地组织和操作数据。在Java中,常见的容器主要分为三类:List、Set和Map,这些都是Java集合框架的重要组成部分。 首先,我们来看...

    第十一章 持有对象

    这一章的主题"第十一章 持有对象"可能探讨的是如何在程序中有效地管理和控制对象的生命周期,特别是在Java、C++或者.NET等面向对象编程语言中的应用场景。持有对象涉及到的关键知识点包括引用计数、智能指针、垃圾...

    java基础学习PPT

    持有对象(也称为引用)是Java程序中的重要概念,它涉及到对象的创建、存储和传递。13、14章的讲义详细讲解了如何声明和使用对象,以及如何在不同方法间传递对象,这对于理解对象的生命周期和内存管理至关重要。 多...

    探讨Java的对象是怎么在内存中产生的?

    Java作为一种主流的面向对象编程语言,其对象的创建与管理是程序运行的基础。本文将详细探讨Java对象在JVM中的创建过程以及其内存布局,帮助读者更深入地理解Java对象是如何在内存中产生的。 #### 二、对象的创建 ...

    java培训笔记(java基础知识第一到七天)

    【Java基础知识】 Java是一种广泛使用的面向对象的编程语言,其基础知识是学习Java开发的基石。以下是基于提供的信息,对Java基础知识的详细说明: **循环中的退出关键字** 1. **break**:当在循环(如for,while或...

    java基础.txt

    以上内容涵盖了Java基础知识的多个方面,包括面向对象编程的核心概念、异常处理机制、字符串操作技巧、线程同步控制、集合框架、JVM类加载机制等。通过深入理解这些概念和技术,可以帮助开发者更有效地利用Java进行...

    java 基础文档-官方-英文

    虽然文档本身并未给出具体的Java基础知识内容,但结合标题和描述可以推断,这份文档很可能包含了以下Java基础知识: 1. **Java语言简介**:介绍了Java语言的历史背景、特点和发展趋势。 2. **Java语言基本语法**:...

    java基础(4)代码

    Java是一种广泛使用的面向对象的编程语言,其语法丰富,功能强大。在Java中,内部类是一个重要的特性,它允许我们在一个类的内部定义另一个类。内部类提供了更高级别的封装,可以访问外部类的私有成员,使得代码更加...

    2017年阿里Java基础面试题文档 Java知识分享

    ### 2017年阿里Java基础面试题文档解析 #### 一、自我介绍与问题解决能力 在自我介绍部分,面试者应该清晰地表达自己的背景、经历以及为什么选择当前的职业道路。此外,通过讲述一个具体的问题解决案例,能够展现...

    java基础版 CORE JAVA

    【Java基础版 CORE JAVA 学习文档】 在Java编程领域,CORE JAVA是指核心Java,它涵盖了Java语言的基础知识,如语法、面向对象编程、异常处理、集合框架、多线程等。这个学习文档《CoreJava_sc_doc.doc》显然是为了...

    Java基础教程.pdf

    ### Java基础教程知识点详解 #### 一、Java的历史与发展 - **起源与早期发展** - Java最初来源于Sun公司的Green项目,目标是为了开发一个适用于家用电子产品(如电冰箱、电视机等)的分布式代码系统。 - 由于C++...

    JAVA面向对象的思维方式

    面向对象的思维方式是Java编程的核心思想,它强调模拟真实世界中的实体和它们之间的关系,将复杂问题分解为更小、更易于管理的部分。...在Java中,这种思维方式是编写高质量代码的基础,也是理解和掌握Java编程的关键。

    JAVA面试基础题.txt

    ### JAVA面试基础题知识点解析 #### 一、final, finally, finalize - **final**:在Java中,关键字`final`可以用来修饰类、方法和变量。当一个类被声明为`final`时,它不能被继承;如果一个方法被声明为`final`,...

    java类、对象、接口的简单介绍

    总之,Java中的类和对象是面向对象编程的基础。类定义了对象的结构和行为,而对象是类的具体实例,持有状态并执行行为。通过构造方法创建和初始化对象,然后通过引用变量来操作和访问这些对象。理解和掌握这些概念...

    Java基础内容.pdf

    - Java Platform, Enterprise Edition(Java EE),建立在Java SE基础之上,用于构建企业级应用。 - Java Platform, Micro Edition(Java ME),为机顶盒、移动电话和PDA等嵌入式消费电子设备提供的Java解决方案。 ...

    java基础之多线程讲解

    ### Java基础之多线程讲解 #### 一、进程与线程的概念 - **进程**:进程是系统进行资源分配和调度的基本单位,是应用程序运行时的实例。一个进程中可以包含一个或多个线程。 - **线程**:线程是进程中的实际运作...

    Java基础内容

    ### Java基础知识点详解 #### 一、访问修饰符:public, private, protected 和 默认(friendly) 在Java中,可以通过四种不同的访问级别控制类、变量、方法或者构造器的可见范围: 1. **public**:公开的,对于...

    北大青鸟6.0课件S2使用Java实现面向对象编程

    1. 封装:封装是面向对象编程的基础,它将数据和操作数据的方法捆绑在一起,形成一个独立的对象。在Java中,通过定义类(class)并使用访问修饰符(如private、public)来实现封装。类是对象的模板,它包含了属性...

Global site tag (gtag.js) - Google Analytics