lt;数据结构与算法分析gt;读书笔记--实现泛型构件pre-Java5
? 面向对象的一个重要目标是对代码重用的支持。支持这个目标的一个重要的机制就是泛型机制:如果除去对象的基本类型外,实现的方法是相同的,那么我们就可以用泛型实现来描述这种基本的功能。 ? ? 1.使用Object表示泛型Java中的基本思想就是可以通过使用像Object这样超类来实现泛型类。 示例一: (1)编写MemoryCell.java package cn.pre.example; public class MemoryCell { private Object storedValue; public Object rend() { return storedValue; } void write(Object x) { storedValue=x; } } 当我们使用这种策略时,有两个细节必须要考虑。第一个细节(2)中阐释,它描述一个main方法,该方法把“37”写到MemoryCell对象中,然后由从MemoryCell对象读出。为了访问这种对象的一个特定方法,必须要强制转换成正确的类型(当然了,在这个例子中可以不必强制转换,因为在程序中可以调用toString()方法。这种调用对任何对象都是能够做到的)。 ? (2)编写TestMemoryCell并运行该类 import java.lang.management.MemoryNotificationInfo; javax.swing.event.MenuDragMouseEvent; /** * 使用泛型MemoryCell类 * @author youcong * @date 2018年12月25日20点19分 */ TestMemoryCell { static main(String[] args) { MemoryCell m = new MemoryCell(); m.write("37"); String val = (String) m.rend(); System.out.println("Content are:"+val); ? ? 第二个重要细节是不能使用基本类型。只有引用类型能够与Object相容。 ? 说到这,回顾一下Java的基础知识,基本类型有哪些?引用类型有哪些?基本类型和引用类型的区别是? 基本类型:byte、short、int、long、double、float、boolean、char。 引用类型:Object、数组、String和枚举等。 基本类型和引用类型的区别是:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的。 ? 那么什么是堆?什么是栈? 堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护). 栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量. ? 下面的示例二(可以很好的说明这一点): ? java.awt.HeadlessException; HeapStackExample { stackTest() { String s1 = "abc"; String s2 = "abc"; System.out.println(s1==s2); } heapTest() { String s1 = new String("abc"); String s2 = ); System.out.println(s1==s2); } main(String[] args) { HeapStackExample.stackTest(); HeapStackExample.heapTest(); } } ? ? 在Java中有六个不同的地方可供存数据: (1) 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
(3)堆(heap)。一种通用性的内存池(也存在于RAM中),用于存放所以的JAVA对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区 域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当你需要创建一个对象的时候,只需要new写一行简单的代码,当执行 这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代码。用堆进行存储分配比用堆栈进行存储存储需要更多的时间。 (4)静态存储(static storage)。这里的“静态”是指“在固定的位置”。静态存储里存放程序运行时一直存在的数据。你可用关键字static来标识一个对象的特定元素是静态的,但JAVA对象本身从来不会存放在静态存储空间里。
? ? ? 2.基本类型的包装当我们实现算法的时候,常常遇到语言定型问题:我们已有一种类型的对象,可是语言的语法却需要一种不同类型的对象。 这种技巧阐释了包装类的基本主题。一种典型的用法是存储一个基本的类型,并添加一些这种基本类型不支持或不能正确支持的操作。 在Java中我们已经看到,虽然每一个引用类型都和Object相容,但是,8种基本类型却不能。于是,Java为这8种基本类型中的每一种都提供了一个包装类。 例如:int类型的包装是Integer。每一个包装对象都是不可变的(就是说它的状态绝不能改变),它存储一种当该对象被构建时所设置的原值,并提供一种方法以重新得到该值。包装类也包含不少的静态使用方法。 ? (编辑:ASP站长网) |