第十章 泛型

article/2025/7/5 22:36:14

10.1 泛型的理解和好处

10.1.1使用传统方法的问题分析

1)不能加入到集合ArrayList中的数据类型进行约束(不安全)

2)遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响

10.1.2泛型的好处

1)编译时,检查添加元素的类型,提高了安全性

2)减少了类型转换的次数,提高效率[说明]

√不使用泛型

Dog -加入->Object·取出-> Dog//放入到ArrayList会先转成Object,在取出时,还需要转换成Dog

√便用泛型

Dog-> Dog-> Dog/放入时,和取出时,不需要类型转换,提高效率

3)不再提示编译警告

10.2 泛型介绍

int a = 10;

理解: 泛(广泛)型(类型)=>Integer,String,Dog

1)泛型又称参数化类型,是Jdk5.0出现的新特性,解决数据类型的安全性问题

2)在类声明或实例化时只要指定好需要的具体的类型即可。

3)Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮

4)泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。

10.3 泛型的语法

10.3.1 泛型的声明

interface接口<T>和class类<K,V>0 //比如: List , ArrayList

说明:

1) 其中,T,K,V不代表值,而是表示类型

2) 任意字母都可以。常用T表示,是Type(类型)的缩写

10.3.2泛型的实例化

要在类名后面指定类型参数的值(类型)。如:

1) List<String>strList = new ArrayList<String>0:

2) Iterator<Customer> iterator = customers.iterator0;

10.3.3泛型使用的注意事项和细节(GenericDetail)

  1. interface List<T>0 , public class HashSet<E>0..等等

说明 : T,E只能是引用类型

看看下面语句是否正确?:

List<Integer> list = new ArrayList<lnteger>0: // OK

List<int> list2 = new ArrayList<int>0: //错误 (int是基本数据类型)

  1. 在给泛型指定具体类型后,可以传入该类型或者其子类类型
  2. 泛型使用形式

List<Integer> list1 = new ArrayList<lnteger>0;

List<lnteger> list2 = new ArrayList<>0;[说明:

如果我们这样写 List list3 = new ArrayList(): 默认给它的泛型是[<E>E就是Object ]

即: 给泛型指向数据类型是,要求是引用类型,不能是基本数据类型

//4. 如果是这样写, 泛型默认是(Object)

ArrayList arrayList = new ArrayList(); //等价 ArrayList<Object> arrayList = new ArrayList<Object>();

10.4 自定义泛型

10.4.1自定义泛型类

基本语法:

class类名<T,R..>{1/..表示可以有多个泛型

成员

}

注意细节:

1) 普通成员可以使用泛型(属性、方法);

2) 使用泛型的数组,不能初始化;

3) 静态方法中不能使用类的泛型;

4) 泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型);

5) 如果在创建对象时,没有指定类型,默认为Object。

示例:

//T=Double, R=String, M=Integer
Tiger<Double,String,Integer> g = new Tiger<>("john");
g.setT(10.9); //OK
//g.setT("yy"); //错误,类型不对
System.out.println(g);
Tiger g2 = new Tiger("john~~");//OK T=Object R=Object M=Object
g2.setT("yy"); //OK ,因为 T=Object "yy"=String 是 Object 子类
System.out.println("g2=" + g2);

//1. Tiger 后面泛型,所以我们把 Tiger 就称为自定义泛型类
//2, T, R, M 泛型的标识符, 一般是单个大写字母
//3. 泛型标识符可以有多个. //4. 普通成员可以使用泛型 (属性、方法)
//5. 使用泛型的数组,不能初始化
//6. 静态方法中不能使用类的泛型
class Tiger<T, R,M>{

}

10.4.2自定义泛型接口

基本语法:

interface接口名<T,R...>{

}

注意细节:

1)接口中,静态成员也不能使用泛型(这个和泛型类规定一样)

2) 泛型接口的类型,在继承接口或者实现接口时确定

3) 没有指定类型,默认为Object

10.4.3自定义泛型方法

基本语法:

修饰符<T,R..>返回类型方法名(参数列表){ }

注意细节:

  1. 泛型方法,可以定义在普通类中,也可以定义在泛型类中,
  1. 当泛型方法被调用时,类型会确定;
  2. public void eat(E e)0,修饰符后没有<T,R..> eat方法不是泛型方法,而是使用了泛型。

//泛型方法,可以定义在普通类中, 也可以定义在泛型类中
class Car {//普通类
public void run() {//普通方法
}
//说明 泛型方法
//1. <T,R> 就是泛型
//2. 是提供给 fly 使用的
public <T, R> void fly(T t, R r) {//泛型方法
System.out.println(t.getClass());//String
System.out.println(r.getClass());//Integer
}
}
class Fish<T, R> {//泛型类
public void run() { //普通方法
}
public <U, M> void eat(U u, M m) { //泛型方法
}
//说明
//1. 下面 hi 方法不是泛型方法
//2. 是 hi 方法使用了类声明的 泛型
public void hi(T t) {
}
//泛型方法,可以使用类声明的泛型,也可以使用自己声明泛型
public <K> void hello(R r, K k) {
System.out.println(r.getClass());//ArrayList
System.out.println(k.getClass());//Float
}
}

10.5泛型的继承和通配符

10.5.1泛型的继承和通配符说明GenericExtends.java

1) 泛型不具备继承性

List<Object> list = new ArrayList<String>0;1 //错误

2)< ?>: 支持任意泛型类型

3) <? extends A>: 支持A类以及A类的子类,规定了泛型的上限

4) <?super A>: 支持A类以及A类的父类,不限于直接父类,规定了泛型的下限

10.6java绘图坐标体系

10.6.1坐标体系-介绍

下图说明了Java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。

10.6.2坐标体系-像素

  1. 绘图还必须要搞清一个非常重要的概念-像素一个像素等于多少厘米?
  2. 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800x600,表示计算机屏幕上的每一行由800个点组成,共有600行.整个计算机屏幕共有480 000个像素。像素是一个密度单位,而厘米是长度单位,两者无法比较。

10.6.3绘图原理

Component类提供了两个和绘图相关最重要的方法:

  1. paint(Graphics g)绘制组件的外观
  2. repaint(刷新组件的外观。

当组件第一次在屏幕显示的时候,程序会自动的调用paint(方法来绘制组件.

在以下情况paint0将会被调用:

  1. 窗口最小化,再最大化
  1. 窗口的大小发生变化
  2. repaint方法被调用

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 点击X退出程序

10.6.4 Graphics类

Graphics类你可以理解就是画笔,,为我们提供了各种绘制图形的方法: [参考jdk帮助文裆


//演示绘制不同的图形..
//画直线 drawLine(int x1,int y1,int x2,int y2)
g.drawLine(10, 10, 100, 100);
//画矩形边框 drawRect(int x, int y, int width, int height)
g.drawRect(10, 10, 100, 100);
//画椭圆边框 drawOval(int x, int y, int width, int height)
//填充矩形 fillRect(int x, int y, int width, int height)
//设置画笔的颜色
g.setColor(Color.blue);
g.fillRect(10, 10, 100, 100);
//填充椭圆 fillOval(int x, int y, int width, int height)
g.setColor(Color.red);
g.fillOval(10, 10, 100, 100);
//画图片 drawImage(Image img, int x, int y, ..)
//1. 获取图片资源, /bg.png 表示在该项目的根目录去获取 bg.png 图片资源
Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bg.png"));
g.drawImage(image, 10, 10, 175, 221, this);
//画字符串 drawString(String str, int x, int y)//写字
//给画笔设置颜色和字体
g.setColor(Color.red);
g.setFont(new Font("隶书", Font.BOLD, 50));
//这里设置的 100, 100, 是 "北京你好"左下角
g.drawString("北京你好", 100, 100);
//设置画笔的字体 setFont(Font font)
//设置画笔的颜色 setColor(Color c)

文章来源:https://blog.csdn.net/daxi13/article/details/120884566
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://chatgpt.dhexx.cn/article/2IojryAW.shtml

相关文章

简述泛型的基本使用和作用

前言 在上一篇文章中&#xff0c;给大家讲解了泛型的概念、作用、使用场景&#xff0c;以及泛型集合、泛型接口和泛型类的用法&#xff0c;但受限于篇幅&#xff0c;并没有把泛型的内容讲解完毕。所以今天我们会继续学习泛型方法、泛型擦除&#xff0c;以及通配符等的内容&…

军职在线大学计算机基础(自主模式),《军职在线》中国哲学经典著作导读(自主模式)...

《军职在线》中国哲学经典着作导读(自主模式) 1《周易》导读 测试题C A C B D C D B B D D A B C D C D B A B 2《道德经》导读 测试题D C D C C C D A D C D B C C C A B A A B 3《庄子》导读 测试题D C D A A C B A A C A A C A D C B 4《论语》导读 测试题B B C ED B A A A …

台湾国立大学(林轩田)《机器学习技法》(第7讲)blending and bagging

课程地址&#xff1a;https://class.coursera.org/ntumlone-001/class 课件讲义&#xff1a;http://download.csdn.net/download/malele4th/10212756 注明&#xff1a;文中图片来自《机器学习技法》课程和部分博客 建议&#xff1a;建议读者学习林轩田老师原课程&#xff0c…

大学有新民之道,则大学生者负新民工作之实际责任者也。

梅贻琦&#xff0c;&#xff08;1889-1962&#xff09;&#xff0c;字月涵&#xff0c;为梅曾臣长子。自1914年由美国吴士脱大学学成归国&#xff0c;即到清华担任教学和教务长等多种职务。1931年&#xff0c;梅贻琦出任清华校长&#xff0c;自此后一直到他在台湾去世&#xff…

【转载】中庸与技术书

2019独角兽企业重金招聘Python工程师标准>>> 转自&#xff1a;图灵社区 原文作者&#xff1a;刘祺 原文地址&#xff1a;http://www.ituring.com.cn/article/213657 本次转载已经过原作者同意&#xff0c;二次转载请自行联系原作者 #中庸与技术书 在我写这篇文章之前…

《大学》《中庸》全文及翻译 (转载)

《大学》全文及翻译 原文&#xff1a; 大学之道&#xff0c;在明明德&#xff0c;在亲民&#xff0c;在止于至善。知止而后有定&#xff0c;定而后能静&#xff0c;静而后能安&#xff0c;安而后能虑&#xff0c;虑而后能得。物有本末&#xff0c;事有终始&#xff0c;知所先后…

[C语言]求一个数是否是2的n次方

设a8&#xff0c;a的二进制数为1000&#xff0c;若为16&#xff0c;则是 0001 0000&#xff0c;2的n次方转为二进制则只保留一个 1 &#xff0c; 其余位置全是0&#xff0c;因此只要判断这个数的二进制是否只有一个 1 &#xff0c;则知道这个数是否是2的n次方。 //求一个数是…

C语言|s1-s0|<=10的-6次方

#include <stdio.h> #include <math.h> double fun(double x) { double s11.0,s00.0; double t1.0; int n1; do { s0s1;//此时s0为s1的上一项 tt*(0.5-n1)*x/n; s1s1t; n; } while(fabs(s1-s0)>1e…

c语言字母能乘10吗,c语言编程中表示a乘以10的n次幂怎么表示

可以参考下面的代码&#xff1a; #include int main() { float a,s,n; sa*mi(10,n); return 0; } float mi(float x,int y) { float a; int i; a1; if(y>0) { for(i1;i<y;i) { aa*x; } } else { for(i-1;i>y;i--) { aa/x; } } return a; } 扩展资料&#xff1a; C语言…

c语言学习-编写函数求x的n次方的值

编写函数求x的n次方的值 程序流程图&#xff1a; 代码&#xff1a; #include<stdio.h> long mul(int j ,int k) { int i; long mu1; for(i0;i<k;i) mumu*j; return mu; } void main() { int x,n; long m; printf("please enter x\tn\t"); scanf("%…

c语言x的n次方怎么写_C语言入门教程(三)进制与操作符

Hello,小伙伴们大家好,今天开始进入C语言第三课时的学习。进入今天正式内容之前呢,先来看一下上次课程中的留下的一道练习题。 练习: 1.编写程序计算半径为任意浮点数的圆周长并把结果打印在屏幕上 1、进制 一个字节分成八段,每段只能记录一个0或者1要想把一个数字记录在一…

c语言n次方怎么输入_C语言中10个经典的算法,学会它,利用它

C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的、更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础。 接下来我们先来看10道: (1) 输出9*9乘法口诀 运行结果: (2…

c语言编程如何进行n次方运算,c语言n次方怎么输入?_后端开发

python编程如何求2000到2500闰年&#xff1f;_后端开发 python编程求2000到2500闰年的方法&#xff1a;首先定义年份【i2000】&#xff1b;然后用while循环判断是否在2500内&#xff1b;接着若年份可被40整除且不被100整除&#xff0c;则是闰年&#xff0c;若年份可被400整除&a…

C语言怎么编辑次方,c语言怎么表示一个数的n次方

2009-01-05 C语言问题从键盘输入8个数,用选择法按由大到小的循序排列并输出,要求用指针来实现。 你应该自己实现这个小程序。 例子,单向链表排序(冒泡): struct student {int num; struct student *next; } struct student *paixu(struct student *head) {struct student *p,…

c语言中e的n次方怎么打,C语言中N次方怎么打

满意答案 lawq0364t 2020.05.11 采纳率&#xff1a;52% 等级&#xff1a;7 已帮助&#xff1a;2761人 有两个函数可以实现&#xff0c;double pow(double x, double y)&#xff0c;double pow10(int p) 下面是这两个函数的使用方法&#xff0c;个人建议用&#xff1a;pow10(…

c语言10的10万次方,在c语言编程中 10的n次方应该怎么表达

满意答案 lvoeshg99 推荐于 2017.09.13 采纳率&#xff1a;56% 等级&#xff1a;9 已帮助&#xff1a;461人 在C语言中10的n次方表示&#xff1a;10^n&#xff0c;或者使用函数&#xff1a;pow(10&#xff0c;n)和pow10(n)。 C语言的幂运算是很耗资源的&#xff0c;10的3次方…

c语言表达式的次方怎么表示,在C语言中,10的n次方怎么表示?

有两个函数可以实现&#xff0c;double pow(double x, double y)&#xff0c;double pow10(int p) 下面是这两个函数的使用方法&#xff0c;个人建议用&#xff1a;pow10(n) 函数名: pow 功 能: 指数函数(x的y次方) 用 法: double pow(double x, double y); 程序例: #include…

最好用的pdf阅读软件 Acrobat Reader DC安装教程(无需破解)

下载在线安装的小文件 直通车 若无法打开&#xff08;FQ&#xff09;可以下载我已经下载好了的 https://pan.baidu.com/s/1jzd8CnB4sHLCCwQvztLmYg 就这个小文件&#xff0c;双击便会在线下载安装。默认安装在C盘 由于我已经安装了&#xff0c;所以只是检测我的是否为最新…

Adobe Acrobat中操作pdf文件被保护,请输入许可口令

文档目录 问题描述解决步骤口令破解工具下载链接 问题描述 Adobe Acrobat中操作pdf时出现此问题&#xff1a; 使用口令破解工具将此pdf破解后方可正常使用。 解决步骤 1、下载PDF Password Remover后将其解压&#xff0c;然后双击PPR.exe 2、选择输出目录&#xff0c;然后…

Adobe的PDF工具Acrobat Pro DC 2023版本下载与安装

目录 前言一、Acrobat Pro DC安装二、使用配置总结 前言 Acrobat Pro DC提供了一系列功能和特性&#xff0c;用于创建、编辑、组织和共享PDF文件。注&#xff1a;文末附有下载链接&#xff01; 一、Acrobat Pro DC安装 1、运行安装程序&#xff0c;如图所示。 2、选择自定义&…