java_基础_泛型

一、泛型简介

1、定义:泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
2、泛型的好处:在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

二、泛型的使用

1、泛型可以有效防止强制转换类型出错,保证安全,例如:

import java.util*;
public class Demo1 {

    public static void main(String[] args) {
        ArrayList al=new ArrayList();
        Class1 a=new Class1();
        al.add(a);
        Class2 b=(Class1)al.get(0);
        //编译时不会报错,但运行时就会报错,错误内容为“ java.lang.ClassCastException”
    }
}

使用泛型后:

import java.util*;
public class Demo1 {

    public static void main(String[] args) {
        ArrayList<Class1> al=new ArrayList<Class1>();
        Class1 a=new Class1();
        al.add(a);
        Class2 b=(Class1)al.get(0);
        //此时编译就不会通过,显示“Type mismatch: cannot convert from Class1 to Class2”
    }
}

2、泛型可以提高代码的利用率
例如,从键盘分别读入一个整数,一个字符串然后输出
不使用泛型代码:

import java.util.Scanner;
public class Demo2 {
    public static void main(String[] args) {
        Gen1 g1=new Gen1(sc.nextInt());
        g1.Show();
        String b=sc.nextLine();
        Gen2 g2=new Gen2(b);
        g2.Show();
    }
}

class Gen1
{
    int a;
    public Gen1(int a)
    {
        this.a=a;
    }
    public void Show()
    {
        System.out.println(a);
    }
}
class Gen2
{
    String a;
    public Gen2(String a)
    {
        this.a=a;
    }
    public void Show()
    {
        System.out.println(a);
    }
}

使用泛型之后:

import java.util.Scanner;

public class Demo2 {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        Gen<String> gr=new Gen<String>(sc.nextLine());
        gr.Show();
        int a=sc.nextInt();
        Gen<Integer> gr2=new Gen<Integer>(a);
        gr2.Show();
    }
}
class Gen<T>
{
    private T o;
    public Gen(T a)
    {
        this.o=a;
    }
    public void Show()
    {
        System.out.println(o);
    }
}

三、反射机制
1、要正确使用Java反射机制就得使用java.lang.Class这个类。它是Java反射机制的起源。当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。
2、通过JAVA的反射机制,我们可以:
①获取一个对象的类信息.
②获取一个类的访问修饰符、成员、方法、构造方法以及超类的信息.
③检获属于一个接口的常量和方法声明.
④创建一个直到程序运行期间才知道名字的类的实例.
⑤获取并设置一个对象的成员,甚至这个成员的名字是在程序运行期间才知道.
⑥检测一个在运行期间才知道名字的对象的方法
3、简单的使用方法:

import java.lang.reflect.Method;

public class Demo4 {

    public static void main(String[] args) {
        //将泛型设为一个对象
        Ex<Person> p1=new Ex<Person>(new Person());
        p1.showTypeMethod();
    }

}
class Ex<T>
{
    public T a;
    public Ex (T a) 
    {
        this.a=a;
    }
    public void showTypeMethod()
    {
        //将a中所有类的方法放入到类型为Method的数组里
        Method []m=a.getClass().getDeclaredMethods();
        for(int i=0;i<m.length;i++)
        {
            //获得方法的名称
            System.out.println(m[i].getName());
        }
    }
}
//创建一个类
class Person
{
    int a;
    public void Show()
    {
        System.out.println(a);
    }
}
//剩下的方法见帮助文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值