范型概述

1 范型是为了解决什么问题?

范型的出现是为了解决安全问题,它限制数据传入的类型,下面举例说明

// Demo1: 不使用范型ArrayList al = new ArrayList();
al.add("java_01");
al.add("java_02");
al.add("java_03");
al.add(new Interger(4)); //  编译通过,但执行报错,出现错误ClassCastException// 报错阶段发生在执行阶段,原因是类型转换异常。// Demo2:使用范型ArrayList<String> al = new ArrayList<String>();
al.add("java_01");
al.add("java_02");
al.add("java_03");
al.add(new Interger(4)); // 编译报错,还没有到执行// 给ArrayList定义范型,可以把报错阶段提前到编译阶段。
// 在没有范型参与时,确保程序没有问题的方式是通过编程人员的主观判断,因为编程人员知道,一旦把不同的数据类型存储到同一个容器,就会报错;
// 在有范型参与时,则是通过客观的Java虚拟机帮助我们判断,由它判断我们传入的数据类型是否正确

2 小结:

1 泛型格式:通过<>来定义要操作的引用数据类型。
2 通常在集合框架中很常见,只要见到<>就要定义泛型。
3 其实<> 就是用来接收类型的。

3 范型的书写

范型可以写在「类」「方法」「接口」中。
使用<>进行书写

3.1 「在类中定义范型&在方法上定义范型」:

直接看例子

// 1 将范型定义在类上
// 2 将范型定义在方法上
public class GenericDemo {public static void main(String[] args){Demo<String> str = new Demo<String>();str.show("4");str.show("haha");str.print(4);str.print("haha");}}class Demo<T> // 1 类定义范型
{public void show(T t) // 方法上定义了类的范型{System.out.println("我的显示方法show定义了与类形相同的类型:"+t);}public <Q> void print(Q q) // 2 方法上定义了自己范型{System.out.println("我的显示show方法上定义了与类相同的类型:"+q);}// public static void method(T t)}

结果:
我的显示方法show定义了与类形相同的类型:4
我的显示方法show定义了与类形相同的类型:haha
我的显示show方法上定义了与类相同的类型:4
我的显示show方法上定义了与类相同的类型:haha

小结:
// 范型类定义的范型在整个类中都有效,当明确了这个类需要操作什么样的对象时,我们就已经确定好需要写什么样的方法去处理什么样的数据了。

// 在同一个类中,允许不同的方法去处理不同数据,类似上面的例子,print()方法对Interger进行打印,show()方法对String进行打印;但是它们在同一个方法;

//「一个特殊的地方,静态方法中定义范型」

// 一个例子
class Demo1<T>
{public  void show(T t) // 与类定义保持一致{System.out.println("show:"+t);}public <Q> void print(Q q) // 继续定义在方法上{System.out.println("print:"+q);}public  static <W> void method(W t) //静态方法{System.out.println("method:"+t);}
} class GenericDemo4
{public static void main(String[] args){Demo1 <String> d = new Demo1<String>();d.show("haha");//d.show(4);d.print(5); // 定义在方法上,打印Intergerd.print("hehe"); // 定义在方法上,打印StringDemo1.method("hahahahha"); // 使用静态方法}
}// 静态方法上定义范型的特殊之处在于,不能访问类上的范型,因为静态方法是可以使用「类名.方法()」进行调用的,静态方法会被预先加载,我们还未建立这个类的实体对象时,没有明确类的类型,静态方法自然不能确传入的对象是什么。所以无法引用静态类型。

3.2 「在接口中定义范型」

范型也可以定义在接口上

// 范型接口,在新建对象时指定;public class GenericDemo5 {public static void main(String[] args){InterImpl<Integer> p = new InterImpl<Integer>(); //创建时指定类型p.show(1001);InterImpl<String> p2 = new InterImpl<String>();p2.show("字符串");}
}interface Inter<T> // 定义不确定数据类型
{void show(T t);
}class InterImpl<T> implements Inter<T>
{public void show(T t){System.out.println("show:"+t);}
}

「Java基础」范型相关推荐

  1. java里面value_「Java基础知识」Java中包含哪些运算符

    原标题:「Java基础知识」Java中包含哪些运算符 在Java中包含的运算符有:算数运算符,逻辑运算符,关系运算符等. 算数运算符也就是我们平时的加减乘除余等操作:在Java中都是将右边的值赋值给左 ...

  2. java里面string什么意思_「Java基础知识」Java中的字符串是什么

    原标题:「Java基础知识」Java中的字符串是什么 字符串顾名思义就是一些字符组合在一起组成的一串数据,称作字符串,在Java中字符串用双引号包围起来,格式为String string = &quo ...

  3. java代码规范插件_「Java基础知识」代码规范插件怎么用

    原标题:「Java基础知识」代码规范插件怎么用 在开发中,好的编程风格可以提升团队合作能力,提升开发的效率,但是每个人都有自己的编程习惯,如何能够将大家的编程风格统一,这个在团队中也很重要; 在Jav ...

  4. 如何做到招聘要求中的「要有扎实的 Java 基础」

    如何做到招聘要求中的「要有扎实的 Java 基础」 来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日,LZ在群里发话,"招人啦." 然某群友曰," ...

  5. 「软件测试基础」理论篇之软件测试概论

    文章目录 1. 软件 1.1 软件发展史 1.2 软件生命周期 1.3 软件缺陷 1.4 三种纠错技术 2. 软件过程 2.1 RUP 2.1.1 RUP各个阶段 2.1.2 RUP核心工作流 2.2 ...

  6. 「上层建筑」与「结构基础」~不被迷惑

    数据结构的存储方式 数据结构的存储方式只有两种:数组(顺序存储)和链表(链式存储). 我们分析问题,一定要有递归的思想,自顶向下,从抽象到具体.散列表.栈.队列.堆.树.图等这些都属于「上层建筑」,而 ...

  7. 「java工程师」常见面试题及其答案(持续更新)

    「高级java工程师」常见面试题及其答案: 「高级java工程师」常见面试题及其答案(持续更新)_好人老李的博客-CSDN博客 目录 java基础 面向对象与面向过程的区别? JRE.JDK.JVM的 ...

  8. 「 Java基础-Lambda 」试试Lambda表达式?通俗易懂得嘞

    前言 Lambda表达式是JDK8的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构. JDK也提供了大量的内置函数式接口供我 ...

  9. 「 JVM基础 」Java双亲委派机制

    Java的双亲委派机制 参考&鸣谢 Dream_ling. weixin_39610188. JVM底层原理解析 文章目录 Java的双亲委派机制 一.介绍 二.什么是双亲委派机制 三.双亲委 ...

最新文章

  1. 新内容转入github
  2. 青岛工学院计算机专业分数线,青岛工学院计算机科学与技术专业2016年在河南理科高考录取最低分数线...
  3. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL,spring获取context
  4. Linux复习资料(一)、VM虚拟机安装教程
  5. Error: listen EADDRINUSE: address already in use :::8080
  6. 经典算法(5)- 用二进制方法实现扩展的最大公约数(Extended GCD)
  7. mssql on linux 安装指导
  8. python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆
  9. IntelliJ IDEA里的项目搞崩了怎么办,本地历史版本回退拯救你崩溃的心灵
  10. java 可变参数_90.Java可变参数
  11. 腾讯云blog:孪生网络入门(上) Siamese Net及其损失函数
  12. 【小工具】根据定义的白名单字段进行Bean的拷贝
  13. Java求一个数的质因数
  14. 利用微软AntiXss Library过滤输出字符,防止XSS攻击
  15. Javascript:通过服务器相对路径下载文件到本地
  16. 【神经网络】权重衰减(weight-decay)
  17. 遥感领域旋转目标检测OBB记录
  18. 如何给图片加水印,图片加水印怎么加
  19. Qt 实现录音在线转文字
  20. 用c语言实现字母排列组合,C语言字母排列组合的实现.doc

热门文章

  1. 信奥日记——动态规划(动规初步)
  2. 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)
  3. 二、为jupyter notebook 添加标题
  4. 2021 12月CSP认证心得
  5. 【信息学奥赛一本通】1134:合法C标识符查
  6. iOS应用跳转(包括iPhone原有应用跳转和第三方应用跳转)
  7. 小米红米手机无电池24H开机完美解决方案
  8. springboot项目部署到服务器第三步部署java环境(最白教程)
  9. 使用线性神经网络实现逻辑与和逻辑异或(一)
  10. 全面梳理关系型数据库和NoSQL的使用情景