1、泛型

与面向对象的多态性相类似,应用泛型可以提高程序的复用性。与多态性不同的是,应用泛型可以减少数据的类型转换,从而提高代码的运行效率。泛型实际上是通过给类或接口增加类型参数实现的。不带泛型的类的定义格式是:

【类型修饰词列表】 class 类名 【extends 父类名】 【implements 接口名称列表】

{

类体

}

如果需要将上面的类定义格式改为具有泛型特点的类定义格式,则只需要将其中紧接在关键字class之后的类名修改为:

类名 <类型参数>

或者是

类名 <类型参数1,类型参数2,类型参数3,......,类型参数n>

前者适用于只有1个类型参数;后者适用于多个类型参数,在相邻参数之间采用逗号隔开。上面的方法同样适用于接口,从而将不带泛型的接口定义格式修改为具有泛型特点的接口定义格式。

类型参数的定义格式可以采用下面3种形式的任何一种:

(1)类型参数标识符

(2)类型参数标识符 extends 父类型

(3)类型参数标识符 extends 父类型1 & 父类型2 & 父类型3 &......&父类型n

下面来看一个有关第三种形式的实例:

//定义类J_C1
class J_C1
{
public void mb_methodA()
{
System.out.print("A");
} } //定义接口J_C2
interface J_C2
{
public void mb_methodB();
} //定义类J_C3,其继承J_C1类,实现接口J_C2
class J_C3 extends J_C1 implements J_C2
{
public void mb_methodB()
{
System.out.print("B");
}
} //定义J_T类,其继承类J_C1和接口J_C2
class J_T <T extends J_C1 & J_C2>
{
public void mb_method(T t)
{
t.mb_methodA();
t.mb_methodB();
}
} //实际调用J_T类
public class J_Genericity
{
public static void main(String args[])
{
J_T<J_T3> a = new J_T<J_T3>();
a.mb_methodT(new J_C3());
}
}

上述代码最后执行的结果为:AB

在类J_T的类体中,如果某个变量的类型为类型T,则可以通过该变量调用类J_C1的成员方法或接口J_C2的成员方法。在上面的例子中,因为类J_C3实现了接口J_C2,并且是类J_C1的子类,所以类J_C3具有类型J_C1和J_C2的所有能力。因此,可以用类J_C3当作类J_T的类型变量T的实际类型,例如:类型J_T<J_C3>。

2、枚举

创建枚举类型的主要目的是为了定义一些枚举常量。枚举的基本定义格式是:

【枚举类型修饰词列表】 enum 枚举类型标识符

{

枚举常量1,枚举常量2,......,枚举常量n

}

其中,“【】”表示枚举类型修饰词列表是可选项;枚举类型修饰词列表用来说明所定义的枚举类型的属性,可以包含0个、1个或多个枚举类型修饰词。如果包含多个枚举类型修饰词没,则在相邻的枚举类型修饰词之间采用空格分隔开。枚举类型修饰词可以是public等,但不能是protected、private、abstract。如果枚举类型修饰词含有public,则要求该枚举定义所在的文件名前缀与枚举类型标识符指定的名称相同,并且以“.java”作为后缀。而且在该文件中不能含有其他属性为public的类、接口或枚举。每个Java源程序文件含有多个类、接口或枚举,但其中属性为public的只能有0个或者1个。枚举类型修饰词public表明该枚举能够被各个软件包的所有类或接口访问。如果在枚举类型修饰词中不含public,则表明该枚举类型的封装性为默认方式,只能在同一个包内部使用。枚举类型标识符以及枚举常量1、枚举常量2、......、枚举常量n定义了一些枚举常量。

枚举类型变量简称为枚举变量,其定义格式有两种,分别是:

枚举类型标识符  枚举变量;

枚举类型标识符  枚举变量1,枚举变量2,......,枚举变量n;

例如,以下定义了四个枚举常量:

Enum  E_SEASON

{

春季,夏季,秋季,冬季

} //枚举E_SEASON结束

那么该如何定义枚举变量呢?可以参照上述枚举变量两种定义格式,具体如下:

E_SEASON  s;

E_SEASON  s1,s2,s3,......,sn;

除了以上两种方式定期枚举变量之外,还可以定义枚举数组变量,其定义格式与其它类型数组变量定义格式相同。例如:

E_SEASON  [] s;

除此之外,还要注意的是,对于枚举类型,不能通过new运算符创建实例对象。可以直接通过枚举类型标识符访问枚举常量。例如:

E_SEASON  s = E_SEASON.春季;

此外定义的枚举变量也可以访问枚举常量,例如:

s.夏季 ==  E_SEASON.夏季;

最后,需要注意的是使用两个成员方法:

(1)public String name()

(2)Public String toString()

这两个方法的功能是相同的,都是返回枚举常量所对应的字符串。例如,假设s变量已经被赋值为“春季”,那么调用方法结果:

S.name()和E_SEASON.春季.toString()均返回字符串“春季”

Java基础知识笔记(二:泛型和枚举)的更多相关文章

  1. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

  2. Java基础学习笔记二十八 管家婆综合项目

    本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添 ...

  3. java基础知识(二)-----多态和构造函数

    一:前言 最近由于面试了新浪公司,面试官问我的问题我都不知道,觉得自己好菜,所以最近决定再把java基础给搞一遍,真的觉得自己好菜.每天看一点,那个家伙说<java编程思想>最少要看三遍, ...

  4. Java基础知识(二)

    一.基本概念 1. Java程序初始化的顺序是怎么样的 2. Java和C++的区别 3. 反射 先看一个知乎回答 什么是反射 主要用途 获得Class对象 4. 注解 什么是注解 为什么要用注解 基 ...

  5. Java基础知识笔记(四:多线程基础及生命周期)

    一.多线程基础 编写线程程序主要是构造线程类.构造线程类的方式主要有两种,一种是通过构造类java.lang.Thread的子类,另一种是通过构造方法实现接口java.lang.Runnable的类. ...

  6. Java基础知识笔记(一:修饰词、向量、哈希表)

    一.Java语言的特点(养成经常查看Java在线帮助文档的习惯) (1)简单性:Java语言是在C和C++计算机语言的基础上进行简化和改进的一种新型计算机语言.它去掉了C和C++最难正确应用的指针和最 ...

  7. Java 基础知识总结 (二、基本数据类型)

    二.基本数据类型 java基本数据类型只能先声明后使用 boolean  true/false char 16-bit unicode character byte 8-bit integer sho ...

  8. Java基础学习笔记二十三 Java核心语法之反射

    类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...

  9. Java基础加强总结(二)——泛型

    一.体验泛型 JDK1.5之前的集合类中存在的问题——可以往集合中加入任意类型的对象,例如下面代码: package cn.gacl.generic.summary; import java.util ...

随机推荐

  1. Rafy 领域实体框架示例(1) - 转换传统三层应用程序

    Rafy 领域实体框架发布后,虽然有帮助文档,许多朋友还是反映学习起来比较复杂,希望能开发一个示例程序,展示如何使用 Rafy 领域实体框架所以,本文通过使用 Rafy 领域实体框架来改造一个传统的三 ...

  2. How do I see all foreign keys to a table or column?

    down voteaccepted For a Table: SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME, ...

  3. 在Intellij IDEA 下通过Maven新建项目的一些体会

    因为习惯的原因,一直在用jetbrain的IDE,最近的在开发javaEE项目,并尝试用maven来管理依赖,那这中间又出了什么让我不得不写下来的呢 一.先来看看在IDEA下怎么用maven建项目 1 ...

  4. Java基础学习总结——Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  5. 【夯实PHP系列】购物车代码说明PHP的匿名函数

    1. 定义:匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值.当然,也有其它应 ...

  6. android px,dp,sp大小转换工具

    package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类<br/> ...

  7. iscroll

    在原生APP的开发中,有一个常见的功能,就是下拉刷新的功能,这个想必大家都是知道的,但是原生APP的开发,有一个很大的问题就是,你每次更新一些功能,就要用户重新下载一次版本,尤其是在iOS系统中,新版 ...

  8. 转发:Chrome 控制台console的用法

    大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对co ...

  9. 屌丝giser成长记-研一篇(上)

    2011年本科毕业之后,我选择了保研GIS研究生,继续了我的GIS研究生涯,读研的童鞋们注意了,读研选择什么样的导师很重要,因为不同的导师有不同的人脉,从浅一点的来说,导师手头的开发项目多的话,你自己 ...

  10. arcgis地图数据集合

    一.全国的ArcGIS地图SHP格式数据,覆盖的图层信息量基本齐全,除了ArcGIS之外,其他GIS软件(superMap和MapGIS.MapInfo等等)也是用之,适合为GIS开发提供数据素材. ...