「Java基础」范型
范型概述
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基础」范型相关推荐
- java里面value_「Java基础知识」Java中包含哪些运算符
原标题:「Java基础知识」Java中包含哪些运算符 在Java中包含的运算符有:算数运算符,逻辑运算符,关系运算符等. 算数运算符也就是我们平时的加减乘除余等操作:在Java中都是将右边的值赋值给左 ...
- java里面string什么意思_「Java基础知识」Java中的字符串是什么
原标题:「Java基础知识」Java中的字符串是什么 字符串顾名思义就是一些字符组合在一起组成的一串数据,称作字符串,在Java中字符串用双引号包围起来,格式为String string = &quo ...
- java代码规范插件_「Java基础知识」代码规范插件怎么用
原标题:「Java基础知识」代码规范插件怎么用 在开发中,好的编程风格可以提升团队合作能力,提升开发的效率,但是每个人都有自己的编程习惯,如何能够将大家的编程风格统一,这个在团队中也很重要; 在Jav ...
- 如何做到招聘要求中的「要有扎实的 Java 基础」
如何做到招聘要求中的「要有扎实的 Java 基础」 来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日,LZ在群里发话,"招人啦." 然某群友曰," ...
- 「软件测试基础」理论篇之软件测试概论
文章目录 1. 软件 1.1 软件发展史 1.2 软件生命周期 1.3 软件缺陷 1.4 三种纠错技术 2. 软件过程 2.1 RUP 2.1.1 RUP各个阶段 2.1.2 RUP核心工作流 2.2 ...
- 「上层建筑」与「结构基础」~不被迷惑
数据结构的存储方式 数据结构的存储方式只有两种:数组(顺序存储)和链表(链式存储). 我们分析问题,一定要有递归的思想,自顶向下,从抽象到具体.散列表.栈.队列.堆.树.图等这些都属于「上层建筑」,而 ...
- 「java工程师」常见面试题及其答案(持续更新)
「高级java工程师」常见面试题及其答案: 「高级java工程师」常见面试题及其答案(持续更新)_好人老李的博客-CSDN博客 目录 java基础 面向对象与面向过程的区别? JRE.JDK.JVM的 ...
- 「 Java基础-Lambda 」试试Lambda表达式?通俗易懂得嘞
前言 Lambda表达式是JDK8的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构. JDK也提供了大量的内置函数式接口供我 ...
- 「 JVM基础 」Java双亲委派机制
Java的双亲委派机制 参考&鸣谢 Dream_ling. weixin_39610188. JVM底层原理解析 文章目录 Java的双亲委派机制 一.介绍 二.什么是双亲委派机制 三.双亲委 ...
最新文章
- 新内容转入github
- 青岛工学院计算机专业分数线,青岛工学院计算机科学与技术专业2016年在河南理科高考录取最低分数线...
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL,spring获取context
- Linux复习资料(一)、VM虚拟机安装教程
- Error: listen EADDRINUSE: address already in use :::8080
- 经典算法(5)- 用二进制方法实现扩展的最大公约数(Extended GCD)
- mssql on linux 安装指导
- python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆
- IntelliJ IDEA里的项目搞崩了怎么办,本地历史版本回退拯救你崩溃的心灵
- java 可变参数_90.Java可变参数
- 腾讯云blog:孪生网络入门(上) Siamese Net及其损失函数
- 【小工具】根据定义的白名单字段进行Bean的拷贝
- Java求一个数的质因数
- 利用微软AntiXss Library过滤输出字符,防止XSS攻击
- Javascript:通过服务器相对路径下载文件到本地
- 【神经网络】权重衰减(weight-decay)
- 遥感领域旋转目标检测OBB记录
- 如何给图片加水印,图片加水印怎么加
- Qt 实现录音在线转文字
- 用c语言实现字母排列组合,C语言字母排列组合的实现.doc