- 浏览: 1588611 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
泛型类
泛型方法
静态泛型
泛型接口
泛型限定
泛型限定:下限
泛型方法
静态泛型
/** * 泛型类定义的泛型,在整个类中有效 * 如果被方法使用.那么泛型类的对象明确要要操作的具体类型后,所有方法要操作的类型就已经固定了 * * 为了让不同方法可以操作不同类型,而且类型还不确定 * 那么可以将泛型定义在方法上. * * 特殊之处 * 静态方法不可以访问类上定义的泛型,因为 泛型 都是在创建对象的时候才制定,如果静态会编译失败 * 如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上. * 泛型定义在静态上 放在返回值前面, 修饰符后面 * */ class Demo<T>{ public void show(T t){ System.out.println("show:"+t); } public void print(T t){ System.out.println("print"+t); } } //变形1 class Demo1{ public <T> void show(T t){ //在方法上定义泛型 只需要加入<T> 就行了 而且 T的作用范围只在这个方法中 System.out.println("show:"+t); } public <Q> void print(Q q){//在方法上定义泛型 只需要加入<Q> 就行了 System.out.println("print"+q); } } //变形2 泛型类和泛型方法一起使用 class Demo2<T>{ public void show(T t){ //沿用 泛型类 中的T System.out.println("show:"+t); } public <Q> void print(Q q){//在方法上定义泛型 只需要加入<Q> 就行了 System.out.println("print"+q); } /* 编译报错 * public static void method(T t){ System.out.println("method"+t); } */ //静态泛型 public static <W> void method(W t){ //泛型定义在静态上 放在返回值前面, 修饰符后面 System.out.println("method"+t); } } public class GenericDemo4 { public static void main(String[] args) { /* Demo<Integer> d=new Demo<Integer>(); d.show(new Integer(4)); d.print(9); //d.print("haha"); //编译失败 new Demo对象的时候 T 就表示 Integer对象了,所以打印字符串,就会有问题 Demo<String> d1=new Demo<String>(); d1.show("haha"); //d1.print(9); 也编译失败 */ Demo1 d1=new Demo1(); d1.show(new Integer(4)); d1.print(9); Demo2<String> d2=new Demo2<String>(); d2.show("hahh"); //d2.show(5); 编译报错 d2.print(4); } }
泛型接口
/** * 泛型定义在 接口上 * */ interface Inter<T>{ void show(T t); } //实现的额时候知道了什么类型 class InterImpl implements Inter<String>{ @Override public void show(String t) { System.out.println("show:"+t); } } //实现的时候不知道类型 class InterImpl1<T> implements Inter<T>{ public void show(T t){ System.out.println("show:"+t); } } public class GenericDemo5 { public static void main(String[] args) { Inter i=new InterImpl(); i.show("hah"); //i.show(1); //编译通过 运行失败 Inter<Integer> i1=new InterImpl1<Integer>(); i1.show(9); } }
泛型限定
/** * ? : 通配符 也可以理解为占位符 ,没办法定义 ,不知道 不明确 * * 泛型的限定 上限 和 下限 * ? extends E: 可以接受 E类 或者 E 的子类型 上限(父类被限制了,子类没有限制) * ? super E: 可以接受 E类 或者 E 的父类型 下限(子类被限制了,父类没有限制) * */ class Person{ private String name; Person(String name){ this.name=name; } public String getName(){ return name; } } class Student1 extends Person{ Student1(String name){ super(name); } } //下限 class Student2 extends Person implements Comparable<Person>{//? super E Student2(String name){ super(name); } @Override public int compareTo(Person o) { return this.getName().compareTo(o.getName()); } } class myCom implements Comparator<Person>{ // ? super E @Override public int compare(Person o1, Person o2) { // TODO Auto-generated method stub return o1.getName().compareTo(o2.getName()); } } public class GenericDemo6 { public static void main(String[] args) { method(); System.out.println("======================"); method_1(); System.out.println("======================"); method_2(); } public static void method_2(){ TreeSet<Student2> ts=new TreeSet<Student2>(new myCom()); ts.add(new Student2("abcd1")); ts.add(new Student2("abcd2")); ts.add(new Student2("abcd3")); ts.add(new Student2("abcd4")); Iterator<Student2> it=ts.iterator(); while(it.hasNext()){ System.out.println(it.next().getName()); } } //操作自定义类型 上限 public static void method_1(){ ArrayList<Person> al=new ArrayList<Person>(); al.add(new Person("abc1")); al.add(new Person("abc2")); al.add(new Person("abc3")); printCollection3(al); ArrayList<Student1> al1=new ArrayList<Student1>(); al1.add(new Student1("abc-----1")); al1.add(new Student1("abc-----2")); al1.add(new Student1("abc-----3")); //printCollection3(al1); //编译报错 error //类似于 ArrayList<Person> al1=new ArrayList<Student1>(); //采用泛型限定后 就可以这样使用了 printCollection4(al1); // ? extends Person } //操作 应用数据类型 public static void method(){ ArrayList<String> al=new ArrayList<String>(); al.add("abc1"); al.add("abc2"); al.add("abc3"); ArrayList<Integer> all=new ArrayList<Integer>(); all.add(1); all.add(2); all.add(3); //printCollection(al); //printCollection(all);//报错 类型不匹配 printCollection1(al); printCollection1(all); printCollection2(al); printCollection2(all); } public static void printCollection(ArrayList<String> al){ Iterator<String> it=al.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } //变形1 //这里 ? 不明确类型,表示占位符 可以大勇 public static void printCollection1(ArrayList<?> al){ Iterator<?> it=al.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } //变形2 可以打印 任何类型 public static <T> void printCollection2(ArrayList<T> al){ Iterator<T> it=al.iterator(); while(it.hasNext()){ T t=it.next(); System.out.println(t); } } // 只能打印一种类型 public static void printCollection3(ArrayList<Person> al){ Iterator<Person> it=al.iterator(); while(it.hasNext()){ Person p=it.next(); System.out.println(p.getName()); } } //泛型限定: 只想打印 Person 和 Person 的子类 // ? extends Person :表示 Person 和 他的子类 public static void printCollection4(ArrayList<? extends Person> al){ Iterator<? extends Person> it=al.iterator(); while(it.hasNext()){ Person p=it.next(); System.out.println(p.getName()); } } }
泛型限定:下限
package com.itheima.day15.p5; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; class Person{ private String name; Person(String name){ this.name=name; } public String getName(){ return name; } } class Student extends Person{ Student(String name){ super(name); } } class Worker extends Person{ Worker(String name){ super(name); } } class StuComparator implements Comparator<Student>{ public int compare(Student t1,Student t2){ return t1.getName().compareTo(t2.getName()); } } class WorComparator implements Comparator<Worker>{ @Override public int compare(Worker o1, Worker o2) { // TODO Auto-generated method stub return o1.getName().compareTo(o2.getName()); } } //使用 泛型限定: 下限后 就可以这样解决问题了 class PerComparator implements Comparator<Person>{ @Override public int compare(Person o1, Person o2) { // TODO Auto-generated method stub return o1.getName().compareTo(o2.getName()); } } public class GenericeDemo7 { public static void main(String[] args) { method(); } public static void method(){ TreeSet<Student> ts=new TreeSet<Student>(/*new StuComparator()*/ new PerComparator()); ts.add(new Student("admin1")); ts.add(new Student("admin2")); ts.add(new Student("admin3")); Iterator<Student> it=ts.iterator(); while(it.hasNext()){ System.out.println(it.next().getName()); } TreeSet<Worker> ts1=new TreeSet<Worker>(/*new WorComparator()*/ new PerComparator()); ts1.add(new Worker("wwwwadmin1")); ts1.add(new Worker("wwwwadmin2")); ts1.add(new Worker("wwwwadmin3")); Iterator<Worker> it1=ts1.iterator(); while(it1.hasNext()){ System.out.println(it1.next().getName()); } } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 993public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2279经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5648package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 979import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1053/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1004//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1822更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1414import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 812import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2395import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 922// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1170import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 799import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1143import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3889import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 963/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1019import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1837Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1000/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2228package out; import ja ...
相关推荐
【Java视频教程_黑马Java零基础辅导班[第二期]15天课件源码】是一套专为初学者设计的全面Java学习资源。这个教程旨在帮助那些对编程没有基础或者对Java语言不熟悉的学员,通过15天的密集学习,掌握Java编程的基本...
【标题】"java毕向东源代码1-15天"所涵盖的知识点主要涉及Java编程语言的基础和进阶部分,由知名的Java教育专家毕向东教授的课程内容组成。这个压缩包可能包含的是从第一天到第十五天的学习资料,总计25天的课程,...
《韩顺平30天学Java》是一门针对初学者设计的Java编程课程,旨在帮助学员在短短一个月的时间内掌握Java编程基础。该课程由知名IT教育专家韩顺平教授,以其独特的教学风格和深入浅出的讲解方式,使得复杂的编程概念变...
在"跟我学java26日通 第15天 Java类集框架"的教程中,你将深入理解这个关键领域的核心概念和实践技巧。 Java类集框架(Java Collection Framework)是一组接口和类,它们构成了处理对象集合的标准方法。这些接口和...
Java基础18天 Typora笔记概述 这是一份专为Java初学者准备的学习资源,由魔乐科技提供,旨在帮助用户在18天内建立起坚实的Java编程基础。Typora是一款简洁而高效的Markdown编辑器,使得笔记整理和阅读更加便捷。...
21天自学速成Java语言电子书和21天学通Java语言的目标是帮助初学者快速掌握Java编程基础,通过系统的学习和实践,能够在短时间内具备独立编写Java程序的能力。 在21天的学习过程中,通常会涵盖以下关键知识点: 1....
15. **文件与对象序列化**:学习如何将对象序列化为二进制数据,以便存储或在网络间传输。 在项目的实战部分,讲义可能会涵盖一些实际应用场景,如构建Web应用程序、数据库连接操作、使用框架(如Spring Boot)进行...
这部分可能涵盖反射、泛型、枚举、注解等Java的高级特性,以及如何使用Java标准库(如Swing或JavaFX)进行图形用户界面(GUI)开发。 PPT版本的教案通常会以图文并茂的方式呈现这些概念,使学习更加直观易懂。每个...
10. **泛型**:泛型是Java SE 5.0引入的新特性,它允许在定义类、接口和方法时指定类型参数,以实现类型安全和代码重用。 11. **Java Swing和JavaFX**:对于GUI编程,学习如何使用Swing库创建桌面应用程序,或者...
15. **数据库连接**:通过JDBC(Java Database Connectivity)API,可以实现Java程序与数据库的交互,包括连接数据库、执行SQL语句、处理结果集等。 16. **Java EE应用**:了解Java企业级应用开发,如Servlet、JSP...
《21天学通Java(中英文打包)》是一份专为Java初学者设计的教程资源,包含了21天的学习计划,旨在帮助学习者在短时间内掌握Java编程的基础知识。这个系列教程以实践为主导,理论与实践相结合,使得学习过程更为高效...
在Java编程领域,"尚硅谷_宋红康_20天Java核心_资料工具" 提供的是一套全面且实用的学习资源,旨在帮助开发者深入理解Java的核心概念和技术。Java是一种广泛应用于互联网开发、企业级应用、大数据处理等领域的面向...
通过“21天自学通”这份教材,你将逐步掌握这些知识点,最终能够独立编写简单的Java程序,为今后的软件开发之路打下坚实的基础。记得理论结合实践,多动手编写代码,遇到问题要积极解决,这样才能真正学以致用。祝你...
14. **泛型**:泛型是Java 5引入的特性,用于增强类型安全性,减少类型转换的麻烦。 15. **反射**:反射机制允许程序在运行时检查类、接口、字段和方法的信息,并动态调用方法。 16. **注解(Annotation)**:注解...
《20天Java核心技术教程》是一份全面且深入的学习资源,专为想要快速掌握Java编程基础和核心概念的初学者设计。20天的时间框架旨在提供一个高效的学习计划,帮助学习者在短时间内建立起坚实的技术基础。 Java是一种...
在编程世界中,Java语言以其跨平台、面向对象和强大的社区支持而闻名,是许多初学者和专业人士的首选。...通过坚持每日学习和动手实践,相信你也能在短时间内大幅提升Java技能,迈向编程的大师之路。
《Java2 编程21天自学通》是一本针对初学者设计的Java编程教程,旨在帮助读者在21天内快速掌握Java2的核心概念和技术。这个教程可能包含多个章节,涵盖从基础语法到高级特性的全面讲解。下面将详细阐述Java2编程中的...
- **第15天:图形用户界面** 学习使用Swing或JavaFX框架开发GUI应用程序。 - **第16天:文件与流** 掌握文件输入输出操作,包括文件流、缓冲区等高级话题。 - **第17天:网络编程** 介绍网络编程的基本概念,...
在Java的25天学习之旅中,你可以期待涵盖以下关键知识点: 1. **Java环境搭建**:首先,你需要了解如何安装JDK(Java Development Kit),设置环境变量,并通过`javac`和`java`命令进行编译和运行程序。 2. **基本...
15. **Java EE基础知识**:简介Java企业级应用开发,包括Servlet、JSP、EJB等技术。 通过这21天的学习,你不仅会熟悉Java语言的语法,还会对面向对象编程有深入的理解,具备编写简单Java程序的能力。但请记住,编程...