搜索
简帛阁>技术文章>黑马程序员_JAVA学习日记_JAVA中的泛型

黑马程序员_JAVA学习日记_JAVA中的泛型

黑马程序员-学习日记

 

黑马程序员_JAVA学习日记_JAVA中的泛型

 

------- android培训、java培训、期待与您交流! ----------

 

一:泛型概述:

   泛型是JDK1.5版本以后出现的一个安全机制;泛型其实给编译器使用的。

   泛型的表现形式就是<>

   集合中存储了不同类型的对象,取出时,容易在运行时时期发生ClassCastExcepti类型转换异常;为了避免这个问题的发生;我们在存储的时候就明确了集合要操作的数据类型,这样取出就没有问题了,就需要在定义集合时,就立刻明确元素的类型。其实借鉴于数组;可以通过<>来明确元素的类型。

二:泛型的好处:

 1,将运行时期出现的ClassCastException问题,转移到了编译时期。

 2,避免了强制转换的麻烦。

三:编码时,什么时候使用泛型呢?

  只要用到的类或者接口的旁边有<>时,就要明确具体类型。泛型的使用其实就是 给<>传递实际参数,而这个参数就是一个具体引用数据类型。

举例:

importjava.util.*;

class  GenericDemo{

public static voidmain(String[] args) {            

ArrayListal = new ArrayList();

al.add("ahah");

al.add("heheaa");

//al.add(3);相当于al.add(new Integer(3));因为jdk1.5以后有自动装箱机制。所以会自动把3封装成对象。

Iteratorit = al.iterator();

while(it.hasNext()){

String s =it.next();

System.out.println(s+"::"+s.length());

}

}

}

四:泛型在自定义对象(类)中的应用:

现在要Person对象进行年龄排序。使用TreeSet集合。

importjava.util.*;

class GenericDemo2{

    public static void main(String[] args) {

       TreeSet ts = newTreeSet(new CompareByName());

       //HashSet ts = newHashSet();

       ts.add(new Person("abc1",21));

       ts.add(new Person("abc0",20));

       ts.add(new Person("abc0",20));

       ts.add(new Person("abc4",24));

       ts.add(new Person("abc3",28));

       Iterator it= ts.iterator();

       while(it.hasNext()){

              Person p = it.next();

              System.out.println(p.getName()+"....."+p.getAge());

       }

    }

}

classCompareByName implements Comparator{

      public int compare(Person p1,Person p2){

       int temp =p1.getName().compareTo(p2.getName());

       returntemp==0?p1.getAge()-p2.getAge():temp;

       }

}

class Personimplements Comparable{

   private String name;

       private int age;

       Person(String name,int age){

       this.name = name;

       this.age = age;

       }

       public int compareTo(Person p){        

       int temp = this.age-p.age;

       returntemp==0?this.name.compareTo(p.name):temp;

       }

       public int hashCode(){

       final int NUM = 34;

       return name.hashCode()+age*NUM;

       }

       public boolean equals(Object obj){

       if(this==obj)

              return true;

       if(!(obj instanceof Person))

              return false;

       Person p = (Person)obj;

       return this.name.equals(p.name)&& this.age==p.age;

      }     

       public String getName(){

              return name;

       }

       public int getAge(){

              return age;

       }

       public String toString(){

              return name+"::"+age;

       }

}

五:泛型类概述:

  1.什么时候使用泛型类呢?

  当类要操作的引用数据类型不确定的时候,可以使用泛型来定义,也就是定义一个类型参数。具体要操作什么类型的对象,有使用该类的使用者来明确,将具体的类型做为实际参数传递给<>.    

   2.当泛型定义在类上;该泛型作用于整个类。当该类建立对象时,就明确了具体类型;那么凡是使用了类上定义的泛型的方法,操作的类也就固定了。

 

六:泛型方法:

1.当方法中操作的应用数据类型不确定,而且和对应的对象执行的类型也不一定一致;这时就将泛型定义在方法上。

2.当类中定义static方法时,静态方法是不可以直接访问类上的泛型,因为类上的泛型只有通过建立对象才可以明确具体类型;所以静态方法如果操作的引用数据类型不确定,只能将泛型定义在方法上。

在静态方法上定义泛型,必须定义在static关键字之后。

如下举例:

classTool{

       public void show(T t){

              System.out.println("show:"+t);

       }

       public void print(Q q)// 在print方法定义了一个泛型变量 Q.{

              System.out.println("print:"+q);

       }

       public static void method(W t){

              System.out.println("method:"+t);

       }

}

class GenericDemo4{

       public static void main(String[] args) {

              Tool t = newTool();

              //t.show("haha");

              t.print("hehe");

              t.print(new Integer(3));

              Tool.method("kkk");

              Tool.method(new Integer(3));

              /*

              Tool t =newTool();

              t.show("haha");

              t.print(new Integer(4));

              Tool t1 = newTool();

              t1.print(new Integer(4));

              t1.show("haha");

              */

       }

}

七:泛型限定:

1.泛型:通配符:?  代表任意类型。

2.定义集合要保证左右两边的类型一致。两边只有一边定义泛型,也是可以支持,至少新老版本兼容。但是一样会出现,安全提示信息。

3.在泛型方法中,不可以使用具体类型的方法,最多只能使用Object类中方法。

4.传入的集合有一个特点,就是元素类型,要么是Person,要么是Person的子类型。这时可以使用泛型的高级应用,泛型的限定。

5.定义T只能固定一种类型,定义?可以是任意类型。只想操作Person或者Person的子类类型。

6.使用泛型的限定:? extends E:接收E类型或者E的子类型。

?super E:接收E类型或者E的父类型。

 

------- android培训、java培训、期待与您交流! ----------  详细请查看:http://edu.csdn.net/heima/

 

 

黑马程序员学习日记黑马程序员_JAVA学习日记_JAVA中的android培训、java培训、期待与您交流!一:概述:泛型是JDK15版本以后出现的一个安全机制;其实给编译器使用的。
黑马程序员学习日记黑马程序员_JAVA学习日记_JAVA中的IO流android培训、java培训、期待与您交流!一:概念:A:根据处理的数据不同;分为:字节流和字符流。所有的数据都是以字节体现的;
这两天还是学习java基础篇,已经学到了数组的遍历了,虽然以前学过,但视频的讲解更加详细和深入,所以学到的东西也就比以前多。不过感觉进度有一点慢,但是坚持就是胜利,相信不久我的Java一定会有很大提
——android培训、java培训、期待与您交流!———学习感言原计划快速看一遍JAVASE视频复习一下,然后直接面试。但是从16号到今天,已经10天了,我才刚刚完成10天的学习。冷静下来,仔细想想
android培训、java培训、期待与您交流!1泛型JDK15版本以后出现新特性。用于解决安全问题,是一个类型安全机制。好处1将运行时期出现问题ClassCastException,转移到了编译时期
黑马程序员学习日记黑马程序员_JAVA学习日记_JAVA中网络编程android培训、java培训、期待与您交流!一:网络编程:UDP:面向无连接,不可靠,速度快。相当于步话机。TCP:面向连接,可
android培训、java培训、java学习技术博客、期待与您交流!网络通信步骤1找到对方IP2数据要发送到对方指定的应用程序上,为了标识这些程序,所以给这些网络应用程序用数字进行了标识,为了方便
android培训,java培训java学习技术博客、期待与您交流!网络编程网络参考模型网络通讯要素IP地址:InetAddress网络中设备的标识不易记忆,可用主机名本地回环地址:127001主
android培训、java培训、java学习技术博客、期待与您交流!基本数据类型的自动拆箱与装箱:我们知道基本数据类型都有对应的封装类byteBytecharCharactershortShort
ndroid培训、java培训、java学习技术博客、期待与您交流!正则表达式:作用:用于专门操作字符串特点:可以用特定字符来表示代码规则,简化了书写好处:简化对字符串的复杂操作所以学习正则表达式