泛型和包装类初步理解

1. 泛型

1.1

泛型是程序设计语言的一种特性.允许程序员在强类型设计语言中编写代码时定义一些可变部分,那些类型在使用前必须作出指明.将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型.泛型类是引用类型,是堆对象,主要是引入类了类型参数这一概念.

1.2
泛型的分类:
1)泛型类
2)泛型方法

1.3
泛型类的定义:

//1.尖括号<>是泛型类的标志;
//2.E 是类型变量,变量名一般要大写;
//3.E 在定义时是形参,代表最终传入类型.
public class<E> {
public E[] array;
public int size;
……
}
//注:泛型类可以一次有多个类型变量,用逗号分隔

注意:泛型是作用在编译期间的一种机制,即运行期间没有泛型的概念;

1.4
泛型类的使用

package Test;

//Person类
class Person{
    private String id;
    private String name;
    private String sex;
    private int age;

    public Person(){}
}

//Book类
class Book {
    public Book(){}
    private String id;
    private String name;
    private int price;
}

class MyArrayList<E>{
    private E[] array;
    private int size;
    //尾插元素
    public void add(E e){
        array[size] = e;
        size++;
    }

    //获取下标为index的元素
    public E getE(int index){
        return array[index];
    }
}

public class Test {
    public static void main(String[] args) {
        //定义一个元素是Book引用的MyArrayList
        MyArrayList<Book> books = new MyArrayList<Book>();
        books.add(new Book());
        //编译出错,Person类型不能转换为Book类型
        books.add(new Person());
        //正常编译与运行
        Book book = books.getE(0);
        //编译出错,Book类型不能转换为Person类型
        Person person = books.getE(0);
        //编译出错,类型转换失败
        Person person = (Person)books.getE(0);
    }
}

1.5
泛型的总结
1.泛型是为了解决某些容器,算法等代码的通用性而引入,并且能在编译期间做类型检查;
2.泛型利用的Object是所有类的祖先类,并且父类的引用可以指向特定的子类对象而工作;
3.泛型是一种编译期间的机制,即MyArrayList和MyArrayList在运行期间是一个类型;
4.泛型是java中的一种合法语法,标志就是尖括号<>.

2.包装类

java中引入了一类特殊的类,即8中数据类型的包装类,在使用过程中,会将类似int这样的值包装到一个对象中去.
2.1
基本数据类型和包装类直接的对应关系

基本数据类型                   包装类
     byte                      Byte
    short                      Short
     int                      Integer
    long                       Long
    float                      Float
    double                      Double      
    char                     Character
    boolean                    Boolean

2.2
包装类的使用
1)装箱和拆箱

package Test;

public class TestInteger {
    public static void main(String[] args){
        int i = 10;
        //装箱操作,新建一个Integer对象,将i的值放入对象的某个属性中
        Integer ii = Integer.valueOf(i);
        Integer ij = new Integer(i);
        //拆箱操作,将Integer对象中的值取出,放到有个基本数据类型中去
        int j = ii.intValue();
    }
}


2)自动装箱和自动拆箱

package Test;

public class TestInteger {
    public static void main(String[] args){
        int i = 10;

        Integer ii = i;  //自动装箱
        Integer ij = (Integer)i;  //自动装箱

        int j = ii;  //自动拆箱
        int j = (int)ii;  //自动拆箱
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值