摘要: 转自web-software什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。可以在集合框架(Collection framework)中看到泛型的动机。例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象。因为 Map.get() 被定义为返回 Object,所以一般必须将 Map.get() 的结果强制 阅读全文
posted @ 2012-09-21 17:43 曾先森在努力 阅读(171) 评论(0) 推荐(0) 编辑
摘要: Java泛型简明教程泛型是Java SE 5.0中引入的一项特征,自从这项语言特征出现多年来,我相信,几乎所有的Java程序员不仅听说过,而且使用过它。关于Java泛型的教程,免费的,不免费的,有很多。我遇到的最好的教材有:The Java TutorialJava Generics and Collections, by Maurice Naftalin and Philip WadlerEffective Java中文版(第2版), by Joshua Bloch.尽管有这么多丰富的资料,有时我感觉,有很多的程序员仍然不太明白Java泛型的功用和意义。这就是为什么我想使用一种最简单的形式来 阅读全文
posted @ 2012-09-21 17:39 曾先森在努力 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 表面上看起来,无论语法还是应用的环境(比如容器类),泛型类型(或者泛型)都类似于 C++ 中的模板。但是这种相似性仅限于表面,Java 语言中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为 擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除),这项技术有一些奇怪,并且有时会带来一些令人迷惑的后果。虽然范型是 Java 类走向类型安全的一大步,但是在学习使用泛型的过程中几乎肯定会遇到头痛(有时候让人无法忍受)的问题。注意:本文假设您对 JDK 5.0 中的范型有基本的了解。泛型不是协变的虽然将集 阅读全文
posted @ 2012-09-21 17:37 曾先森在努力 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 普通泛型 1 class Point<T>{ // 此处可以随便写标识符号,T是type的简称 2 private T var ; // var的类型由T指定,即:由外部指定 3 public T getVar(){ // 返回值的类型由外部决定 4 return var ; 5 } 6 public void setVar(T var){ // 设置的类型也由外部决定 7 this.var = var ; 8 } 9 };10 public class GenericsDemo06{11 ... 阅读全文
posted @ 2012-09-21 17:33 曾先森在努力 阅读(297) 评论(0) 推荐(0) 编辑
摘要: java泛型是用擦除实现的,即在编译时把类型信息变为object,然后运行是再动态确定类型信息。 1 //简单的泛型 2 class Test<T> 3 { 4 private T e; 5 public void set(T e){ 6 this.e = e; 7 } 8 public void print(){ 9 System.out.println(e);10 }11 }反编译后: 1 class Test 2 { 3 4 Test() 5 { 6 } 7 8 public vo... 阅读全文
posted @ 2012-09-21 17:29 曾先森在努力 阅读(355) 评论(0) 推荐(0) 编辑
摘要: Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构。Java集合框架的基本接口/类层次结构:java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +--java.util.LinkedList [C] +--java.util.Vector [C] +--java.util.Stack [C]+--java.util.Set [I] +--java.util.HashSet [C] +--java.util.SortedSet [ 阅读全文
posted @ 2012-09-20 16:39 曾先森在努力 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 1.java集合类图1.11.2 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。 发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法。它的一个子接口LinkedIterator在它的基础上又添加了三种方法,分别是add(),previous(.. 阅读全文
posted @ 2012-09-20 16:33 曾先森在努力 阅读(2605) 评论(1) 推荐(1) 编辑
摘要: enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容:1. 原始的接口定义常量2. 语法(定义)3. 遍历、switch 等常用操作4. enum 对象的常用方法介绍5. 给 enum 自定义属性和方法6. EnumSet,EnumMap 的应用7. enum 的原理分析8. 总结原始的接口定义常量1 public interface IConstants { 2 String MON = "Mon"; 3 String TUE = " 阅读全文
posted @ 2012-09-20 14:15 曾先森在努力 阅读(1365) 评论(0) 推荐(0) 编辑
摘要: 一、final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final不能用于修饰构造方法。 注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。 1.final变量: 当你在类中定义变量时,在其前面加上final关键字 阅读全文
posted @ 2012-09-18 09:45 曾先森在努力 阅读(832) 评论(0) 推荐(0) 编辑
摘要: 以下是国外JAVA与IT技术网站地址,每个都可以打开的,特此共享,希望对大家有帮助!1、http://www.onjava.com- O'Reilly的Java网站. 每周都有新文章.2、http://java.sun.com- 官方的Java开发者网站 - 每周都有新文章发表.3、http://www.developer.com/java- 由Gamelan.com 维护的Java技术文章网站.4、http://www.java.net- Sun公司维护的一个Java社区网站.5、http://www.ibm.com/developerworks/java- IBM的Develope 阅读全文
posted @ 2012-09-18 09:29 曾先森在努力 阅读(1253) 评论(0) 推荐(0) 编辑
摘要: 1.继承和组合的概念在新类里简单地创建原有类的对象。我们把这种方法叫作“组合”,因为新类由现有类的对象合并而成。我们只是简单地重复利用代码的功能,而不是采用它的形式。第二种方法是创建一个新类,将其作为现有类的一个“类型”。我们可以原样采取现有类的形式,并在其中加入新代码,同时不会对现有的类产生影响。这种魔术般的行为叫作“继承”(Inheritance),涉及的大多数工作都是由编译器完成的。对于面向对象的程序设计,“继承”是最重要的基础概念之一。对于组合和继承这两种方法,大多数语法和行为都是类似的(因为它们都要根据现有的类型生成新类型)。2.组合也就是一个类的对象是另外一个类的成员,一般的程序都 阅读全文
posted @ 2012-09-18 09:28 曾先森在努力 阅读(622) 评论(0) 推荐(0) 编辑
摘要: (本文转载自csdn)到J2SE 1.4为止,一直无法在Java程序里定义实参个数可变的方法——因为Java要求实参(Arguments)和形参(Parameters)的数量和类型都必须逐一匹配,而形参的数目是在定义方法时就已经固定下来了。尽管可以通过重载机制,为同一个方法提供带有不同数量的形参的版本,但是这仍然不能达到让实参数量任意变化的目的。然而,有些方法的语义要求它们必须能接受个数可变的实参——例如著名的main方法,就需要能接受所有的命令行参数为实参,而命令行参数的数目,事先根本无法确定下来。对于这个问题,传统上一般是采用“利用一个数组来包裹要传递的实参”的做法来应付。1. 用数组包裹 阅读全文
posted @ 2012-09-18 09:20 曾先森在努力 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 1、面向对象的三大特征是?答:封装、继承、多态。2、类与对象的关系?答:类是对象的模版,对象是类的实例,类只能通过对象才可以使用。3、类的结构?怎样取得类的结构?答:结构:属性、方法(构造方法);通过反射。4、如果一个类没有被实例就直接使用,会出现什么异常?答:空指向异常。5、类属性于什么数据类型,进行引用传递时,传递的是什么东东?答:属于引用类型,传递的是堆内存的使用权。6、类被封装的属性,只能通过什么方法调用?有什么规矩?答:只能通过setter和getter方法。7、构造方法的特点、作用是什么?我的易错点?答:只要是类则必定存在构造方法,它没有声明构造方法会在编译时自动生成无参、什么都不 阅读全文
posted @ 2012-09-18 09:15 曾先森在努力 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 1,抽象,封装,继承,多态是面向对象程序设计中得四个特点. 2,面向对象得软件开发大体分为:面向对象的分析,面向对象的设计,面向对象的实现. 可概括为如下过程:分析用户需求,从问题中抽取对象模型;细化模型,设计类,包括类的属性和类间的 相互关系,同时观察是否有可以直接引用的已有类或部件;选定一种面向对象的编程语言,具体编码实现 上一阶段类的设计,并在开发过程中引入测试,完善整个解决方案. 3,面向对象程序设计方法的优点是:可重用性,可扩展性,可管理性. 4,类的定义:class前的修饰符分为访问控制符和非访问控制符两大类.访问控制符包括public和private. 非访问控制符... 阅读全文
posted @ 2012-09-18 09:13 曾先森在努力 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样的设计模式,而不重视面向对象的分析和设计。甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程。 众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计。查看Apache和Sun的开放源代码能帮助你发现其他Java设计原则在这些代码中的实际运用。Java Devel 阅读全文
posted @ 2012-09-18 09:07 曾先森在努力 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 一、Java数组初始化 Java数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java数组使用之前必须先对数组对象进行初始化,所谓初始化,就是为数组的所有元素分配内存空间,并为每个数组元素指定初始值。(文章来源于李刚老师的《突破java程序员的16课》)1:基本类型数组的两种初始化方式静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。 不要同时使用静态初始化和动态初始化,也就是说,不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值。Java的数组是静态... 阅读全文
posted @ 2012-09-18 09:01 曾先森在努力 阅读(853) 评论(3) 推荐(1) 编辑
摘要: 有人说Java是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就无法执行。 也有人说Java是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。对于C和C++,它们经过一次编译之后,可以由操作系统直接执行,所以它们是编译型语言。而Java不一样,它首先由编译器编译成.class(字节码)文件,然后在通过JVM从.class文件中读一行解释执行一行,所以它是解释型的语言。也正是由于java对于多种不同的操作系统有不同的JVM,所以实现了真正意义上的跨平台。(1)Java语言的编译-->解释-->运行过程(2)JVM到这里,大 阅读全文
posted @ 2012-09-18 08:54 曾先森在努力 阅读(1193) 评论(0) 推荐(0) 编辑
摘要: Java中的垃圾回收与对象生命周期1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制。 一个对象创建后被放置在JVM的堆内存中,当永远不再引用这个对象时,它将被JVM在堆内存中回收。被创建的对象不能再生,同时也没有办法通过程序语句释放它们。即当对象在JVM运行空间中无法通过根集合到达(找到)时,这个对象被称为垃圾对象。根集合是由类中的静态引用域与本地引用域组成的。JVM通过根集合索引对象。 在做Java应用开发时经常会用到由JVM管理的两种类型的内存:堆内存和栈内存。简单来讲,堆内存主要用来存储程序在运行时创建或实例化的对象与变量。例如... 阅读全文
posted @ 2012-09-17 20:51 曾先森在努力 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 内部类 ———定义在类的内部的类为什么需要内部类? 典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。 java中的内部类和接口加在一起,可以实现多继承。 可以使某些编码根简洁。 隐藏你不想让别人知道的操作。使用内部类最吸引人的原因是: 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部... 阅读全文
posted @ 2012-09-17 20:42 曾先森在努力 阅读(301) 评论(0) 推荐(0) 编辑
摘要: java 中的变量大致分为 成员变量 和 局部变量 两大类。成员变量: 在类体里面定义的变量称为成员变量; 如果该成员变量有 static 关键字修饰,则该成员变量称为 静态变量 或 类变量; 如果该成员变量没有 static 关键字修饰,则该成员变量被称为 非静态变量 或 实例变量。局部变量: 形参、方法内定义的变量、代码块中定义的变量,都属于局部变量。类变量 (静态变量) 1. 可以向前引用 2. 变量属于类本身 3. 类变量不依赖类的实例,类变量只在初始化时候在栈内存中被分配一次空间,无论类的实例被创建几次,都不再为类变量分配空间 4. 通过类的任意一个实例来访问类变量,底层都将将其转为 阅读全文
posted @ 2012-09-17 20:36 曾先森在努力 阅读(507) 评论(0) 推荐(0) 编辑