java类型的变化
package holding;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
class Snow{}
class Power extends Snow{}
class Light extends Power{}
class Heavy extends Power{}
class Crusty extends Snow{}
class Slush extends Snow{}
/**
* 主要是Arrays.asList的用法值得注意,以及:在用它时,继承只管上一级,除非像snow4 一样,显式地告诉编译器,Snow类型是我的目标类型
* @author fireliuwei
*
*/
public class AsListInterface {
public static void main(String[] args) {
Snow snow = new Heavy();
List<Snow> snow1 = Arrays.asList(new Crusty(),new Slush(),new Power());
//下面这句话不能编译,原因如上
//List<Snow> snow2 = Arrays.asList(new Light(),new Heavy());
//snow3,snow4能编译,原因如上,
List<Snow> snow3 = new ArrayList<Snow>();
//Collections.addAll,参数snow3告诉了编译器,目标类型是snow
Collections.addAll(snow3, new Light(),new Heavy());
List<Snow> snow4 = Arrays.<Snow>asList(new Light(), new Heavy());
}
}
下面是注意Arrays的用法
package holding;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class AddingGroups {
public static void main(String[] args) {
Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Integer[] moreInts = { 6, 7, 8, 9, 10 };
collection.addAll(Arrays.asList(moreInts));
Collections.addAll(collection, 11, 12, 13, 14, 15);
Collections.addAll(collection, moreInts);
@SuppressWarnings("unused")
List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);
list.set(1, 99);
//list.add(21);运行出错,因为Arrays.asList()底层是固定大小数组,不可扩充的
}
}
分享到:
相关推荐
第11章的主题是“持有对象”,这一章主要探讨了如何在Java中创建和管理对象,包括对象的引用、对象的生命周期、类与对象的关系,以及如何通过集合来存储和操作对象。以下是对这些知识点的详细解释: 1. **对象引用*...
在IT行业中,持有对象(Hold Objects)的概念通常与软件设计模式和内存管理相关。这一章的主题"第十一章 持有对象"可能探讨的是如何在程序中有效地管理和控制对象的生命周期,特别是在Java、C++或者.NET等面向对象...
【Java编程思想第11章持有对象】 在Java编程中,持有对象是一个核心概念,它涉及到如何有效地管理和操作对象集合。本章主要讨论了两个关键主题:泛型和容器类,特别是Collection家族和Map家族的其他成员,以及迭代...
Java编程思想持有对象.pptx
在Java编程中,容器是用来存储和管理对象的类或接口,它们使得我们可以在程序中方便地组织和操作数据。在Java中,常见的容器主要分为三类:List、Set和Map,这些都是Java集合框架的重要组成部分。 首先,我们来看...
这篇文章并不会详细介绍block在内存中到底是以什么形式存在的,主要会介绍block是如何持有并且释放对象的。文章中的代码都出自Facebook开源的用于检测循环引用的框架FBRetainCycleDetector,这是分析该框架文章中的...
如果一个程序只包含固定数量的且生命周期都是已知的对象,那么这是一个非常简单的程序 JAVA实用类库提供了一套容器类,其中基本的类型是List,Set,Queue和Map。也称为集合类? 可以将任意数量的对象放置到容器...
对象引用是一种持有对象内存地址的变量,通过它可以访问该对象的状态和行为。在Java中,对象存储在堆内存中,而对象引用通常存储在栈内存中。因此,当我们声明并初始化一个引用类型的变量时,实际上是在栈内存中创建...
静态成员函数不与特定对象绑定,它们可以访问静态数据成员,但不能直接访问非静态数据成员,因为它们不持有对象的上下文。静态成员函数通常用于提供类的静态功能,如工厂方法或计数器。 友元是C++中增强类之间交互...
3. 内存泄漏:虽然Java的垃圾收集能处理大部分情况,但有时由于循环引用或者长时间持有对象的引用,可能导致对象无法被回收。例如,事件监听器、线程池中的任务、缓存等,都需要开发者明确管理对象的生命周期。 4. ...
因此,`a`并不直接持有对象的内容,而是持有到达对象的路径。 在实际编程中,理解引用和句柄的区别很重要,因为它们影响着对象的生命周期和内存管理。例如,当你将一个对象的引用赋值给另一个变量,如`A b = a;`,...
例如,当对象A持有对象B的引用时,A的生命周期可能会影响B。此外,如果对象间的关联需要频繁变更,设计时应考虑如何高效地处理这些变化。 在设计一对一关系时,我们还应关注其在数据库映射中的实现,如使用外键约束...
4. `ExternallyControlledLifetimeManager`:同样实现单例,但Unity仅持有对象的弱引用,对象的生命周期由外部引用控制,容器不负责销毁。 5. `PerThreadLifetimeManager`:每个线程拥有自己的单例对象实例,通过`...
在多线程环境下,当一个线程持有对象锁时,其他试图获取该锁的线程将被阻塞,直到锁被释放。这样可以防止数据竞争和其他并发问题,确保数据的一致性和完整性。 在C++中,`std::mutex`类是实现互斥锁的核心。下面是...
- **直接指针访问**:另一种方式是直接持有对象实例数据或类型数据的指针。这种方式下,对象实例的内存布局中会包含一个直接指向堆上实例数据的指针,而类型信息通常存储在方法区。直接指针访问减少了指针解析的开销...
本笔记涵盖了Java编程思想的多个方面,包括访问权限控制、封装、继承、多态、接口、内部类、持有对象等。 访问权限控制 访问权限控制是为了把变动的事物与保持不变的事物区分开来。Java中有四种访问权限修饰词:...
这意味着在同一时间,只能有一个线程持有对象的锁。 2. **可重入性**:一个线程已经获得了某个对象的锁,它还可以再次获取该对象的其他`synchronized`代码块或方法的锁,这就是所谓的可重入性。这不会导致死锁,...
它们持有对象引用,通过ORB调用对象的方法,但并不关心对象的实际位置或实现方式。客户可以是程序或进程,且一个对象的实现可能本身就是另一个对象的客户。 4. **对象实现的结构**:对象实现提供了对象实例的数据和...
例如,静态集合类如HashMap如果未及时设置为null,会持续持有对象;忘记移除监听器,如未调用removeEventListener或unregisterReceiver;不关闭数据连接,如Cursor、ContentProvider、IO流和Socket;内部类持有的强...