一、Java数据类型
8种基本数据类型:字符型char,布尔型boolean,数值型(整型和浮点型)
其中整型包括(byte,short,int,long),浮点型(float,double)
类型 | 字节byte | 默认值 |
字节型byte | 1 | 0 |
字符型char | 2 | 'u0000' |
布尔型boolean | 4 | false |
短整型short | 2 | 0 |
整型int | 4 | 0 |
长整型long | 8 | 0 |
单精度float | 4 | 0.0f |
双精度double | 8 | 0.0d |
3种引用数据类型:class类,interface接口,数组。
二、Java里面的集合
三、Java泛型的是什么,为什么要用泛型,泛型的使用有哪几种?
答:
第一,泛型,是JDK5引入的新特性,本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
这种参数类型可以使用在:类、接口、方法中;分别被称作为泛型类;泛型接口和泛型方法。
第二,泛型的好处是在编译时候检查类型安全,并且所有的强制转换都是自动的,提高了代码重用率,
避免运行时出现异常,而且特点是编译器再编译时擦除了所有泛型相关信息,再编译器编译成字节码时;
首先进行类型检查,然后进行类型擦除(即所有类型参数都用他们限定的类型替换,包括类,变量和方法)。
第三,泛型的使用(泛型类、泛型接口、泛型方法)
泛型类例子:
package com.ikos.web; import java.lang.*; public class Test<M> { private M m;//泛型类型变量 public void setM(M m) { this.m = m; } public M getM() { return m; } public static void main(String arg[]){ Test t1 = new Test(); t1.setM(222); System.out.printf("整型值为 :%d ", t1.getM()); t1.setM("444"); System.out.printf("字符串值为 :%s ", t1.getM()); } }
泛型接口例子:
//定义一个泛型接口 public interface Generator<T> { public T next(); }
/** * 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中 * 即:class FruitGenerator<T> implements Generator<T>{ * 如果不声明泛型,如:class FruitGenerator implements Generator<T>,编译器会报错:"Unknown class" */ class FruitGenerator<T> implements Generator<T>{ @Override public T next() { return null; } }
当实现泛型接口的类,传入泛型实参时:
/** * 传入泛型实参时: * 定义一个生产器实现这个接口,虽然我们只创建了一个泛型接口Generator<T> * 但是我们可以为T传入无数个实参,形成无数种类型的Generator接口。 * 在实现类实现泛型接口时,如已将泛型类型传入实参类型,则所有使用泛型的地方都要替换成传入的实参类型 * 即:Generator<T>,public T next();中的的T都要替换成传入的String类型。 */ public class FruitGenerator implements Generator<String> { private String[] fruits = new String[]{"Apple", "Banana", "Pear"}; @Override public String next() { Random rand = new Random(); return fruits[rand.nextInt(3)]; } }
泛型方法例子:
泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型 。
/** * 泛型方法的基本介绍 * @param tClass 传入的泛型实参 * @return T 返回值为T类型 * 说明: * 1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。 * 2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。 * 3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。 * 4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。 */ public <T> T genericMethod(Class<T> tClass)throws InstantiationException , IllegalAccessException{ T instance = tClass.newInstance(); return instance; }
Object obj = genericMethod(Class.forName("com.test.test"));