简介

以Table为例,class Table<T>{ }

<> 表示这就是一个泛型,a、b都是T型的。

class Table<T>{public T a;public T b;
}

Table泛型不是一个真的类,所以以下写法是错误的

public class Main{public static void main(String[] args) {Table t = new Table(); //错误,编译器报错}
}

正确的定义,使用 < > 定义。比较旧的JDK需要Table<Integer> t = new Table<Integer>();。jdk1.7以上的在第一个 <> 中写就可以了。

public class Main{public static void main(String[] args) {Table<Integer> t = new Table<>(); t.a = 3;t.b = 4;}
}

如果要定义一个double型的泛型,如何做?
Table<double> t2 = new Table<>();
是这样吗?
其实这样写是错误的,Java语言的泛型不可以使用原始类型,应该写成Table<Double> t2 = new Table<>();
Java语言给每个原始类型都提供了对应的类。如 double 对应 Double。其实doubleDouble用法差不多,可以通用。注意此处只能用Double

应用

将学生类放进一个数组,使用ArrayLIst(顺序表),Java中还有LinkedList(链表)。
ArrayList是一个容器类,是需要泛型的,即里面存放的数据类型可以自己指定。
如何定义呢?
学生类写简单点,就一个ID加姓名吧。

class Stu {public String id;public String name;
}

定义学生类ArrayLIst,这里需要引入ArrayList类import java.util.ArrayList;

ArrayList<Stu> a1 = new ArrayList<>();

初始化实例

Stu zs = new Stu();
zs.id = "S0001";
zs.name = "张三";
Stu ls = new Stu();
ls.id = "S0002";
ls.name = "李四";

将实例加入ArrayLIst

a1.add(zs);
a1.add(ls);

完整的过程如下:

public class Main{public static void main(String[] args){ArrayList<Stu> a1 = new ArrayList<>();Stu zs = new Stu();zs.id = "S0001";zs.name = "张三";Stu ls = new Stu();ls.id = "S0002";ls.name = "李四";a1.add(zs);a1.add(ls);System.out.println(a1);}
}

此时输出的结果为

为什么看不到真实的值呢?而是地址呢?
这是因为学生类中没有重写toString()
其实每一个类都会有一个toString()类,表示这个类以什么样的形式打印出来。
将学生类改写如下

class Stu {public String id;public String name;public String toString() {return "("+id+", "+name+")";}
}

再次输出就会得到真实的值

完整的程序如下,由于包名会不一样这里省略。

import java.util.ArrayList;class Stu{public String id;public String name;public String toString() {return "("+id+","+name+")";}
}
class  Table<T>{public T a;public T b;
}
public class Test {public static void main(String[] args) {Table<Integer> t = new Table<>();t.a = 3;t.b = 4;//不可以使用原型类型// Table<double> t2 = new Table<>();Table<Double> t2 = new Table<>();t2.a = 9.1;t2.b = 4.5;ArrayList<Stu> al = new ArrayList<>();Stu zs = new Stu();zs.id = "S0001";zs.name = "张三";Stu ls = new Stu();ls.id = "S0002";ls.name = "李四";al.add(zs);al.add(ls);System.out.println(al);}
}

【Java入门】泛型的学习与应用相关推荐

  1. java入门-markdown语法学习

    前言 本人是一名即将毕业的大四学生,还没有编程方面的工作经验,希望从事Java开发的相关工作,但是自身Java基础太过薄弱,将从今天开始重头开始学习java.学习路线采用b站鱼皮大佬的Java学习路线 ...

  2. Java入门1.2.3—一个老鸟的Java学习心得

    Java入门1.2.3-一个老鸟的Java学习心得 基本信息 作者: 臧萌    出版社:清华大学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 ...

  3. java入门学习_Java入门学习进阶知识点

    Java入门学习进阶知识点 入门阶段,主要是培养Java语言的编程思想.了解Java语言的语法,书写规范等,掌握Eclipse.MyEclipse等开发工具,编写Java代码的能力.学完这个阶段你应该 ...

  4. 考研二战失败 我的从零开始Java入门学习(十)

    文章目录 一.集合 1.Collection集合类 1.1 Collection集合类方法 1.2 Collection的子类 2.Map集合类 2.1 Map集合类方法 2.2 Map类的子类 3. ...

  5. java从入门到精通学习路线

    目前Java在许多行业的客户端方面的应用非常多,比如OA.邮箱.投票.金融.考试.物流.医疗.矿山等信息方面的系统.Java开发者在这方面的需求也非常大,待遇也相当不错,工资水平可能和Java互联网方 ...

  6. Java入门学习注意事项有哪些?

    想要学好java技术,做好学习规划路线和注意事项是非常重要的,尤其是零基础学员,Java涉及到的知识点非常多,我们需要制定合理的Java学习路线图,这样会事半功倍,下面小编和大家总结一下Java入门学 ...

  7. Java必备:java入门、java学习

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 1.Java入门 1-1.Java具有那些适合在Internet环境中 ...

  8. Java入门学习笔记[狂神说Java]

    写在前面: 本文根据B站狂神说Java 与菜鸟教程 整理而来,仅供个人学习使用,如有侵权,请联系删除. 文章目录 IDEA使用 Java基础01:注释 Java基础02:数据类型 Java基础03:类 ...

  9. 计算机编程老鸟的心得,java入门123——一个老鸟java学习心得.docx

    java入门123--一个老鸟的java学习心得 学习Java心得体会 学习了一学期的Java课程,觉得是该总结自己的心得体会了.开始学习任何一门课(包括java),兴趣最重要.一直觉得自己在学计算机 ...

  10. Java 从入门到高级学习路线

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Java 从入门到高级学习路线 <一>1.Jvm 部分 Jvm 内存模型.Jvm 内存结 ...

最新文章

  1. 【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )
  2. zabbix常用配置
  3. 高tps、低延迟_如何在不到1ms的延迟内完成100K TPS
  4. 突破C++的虚拟指针--C++程序的缓冲区溢出攻击
  5. 【C语言】(数组方式)求n名同学的平均成绩
  6. java使用内部类的好处及其初始化
  7. 仅需6道题轻松掌握Python时间和日期处理 | Python技能树征题
  8. c编程技巧——获取可用的处理器(CPU)核数
  9. draw_net.py绘制caffe net结构
  10. springboot+cxf框架 WebService
  11. Xweibo2.0nbsp;游客可以访问任何页面【…
  12. 雀巢咖啡旗下感CAFÉ推出高端鎏光咖啡;武田剥离中国大陆非核心业务至海森 | 美通企业日报...
  13. 计算机电子表格的优点,信息技术《电子表格的特点及应用》的说课稿
  14. 黑群晖折腾之docker系列之迅雷远程下载
  15. 用telnet登录163服务器发邮件
  16. 20 步打造完美网站布局设计
  17. 通读Docs - 《OPL1000 自学整理教程》
  18. 解决VirtualBox CentOS8无法调整分辨率的问题
  19. php js 插件,超轻量级网页流布局JS插件Macy.js
  20. 单例模式及单例类的两种实现

热门文章

  1. shell学习过程中的错误集锦
  2. 《剑指Offer》 矩形覆盖
  3. 什么是Vim,Vim及其安装
  4. 【jupyter notebook】开启远程服务 遇到No address associated with hostname
  5. linux 分卷解压
  6. 钉钉下载与安装过程 适用于windows系统 20200718
  7. 数据结构与算法-算法入门-什么是算法-算法的挑战
  8. nmon工具安装及使用
  9. Last_Error: Slave SQL thread retried transaction 10 time(s) in vain, giving up导致主从不同步的解决方法
  10. three.js之正投影摄像机与透视投影摄像机的区别