JAVA-高级编程-泛型与File

泛型

/**
     * 集合中使用泛型的情况
     * 
     * 集合接口或集合类在jdk5.0时都修改为带泛型的结构
     * 实例化集合类时指明泛型类型
     * 指明完之后,在集合类或接口中凡是定义类或接口时,内部结构使用到类的泛型位置,都指定为实例化时的类型
     * 比如:add(E e)方法>实例化后add(Integer e)
     * 注意泛型的类型必须是一个类,不能是基本数据类型,基本数据类型使用包装类
     * 
     */
    @Test
    public void test3(){
        //之所以没有用int是因为泛型是一个类型不能用基本数据类型
        //还有就是add方法添加的也不是int而是自动装箱后的integer
        ArrayList arrayList=new ArrayList();
        arrayList.add(123);//此时123自动装箱为integer
        //编译时就会进行类型检查,保证数据的安全
        for (Integer in:arrayList) {
            System.out.println(in);
        }


        //hashmap遍历
        HashMap hashMap=new HashMap();
        hashMap.put("aaa",123);
        Set> entries = hashMap.entrySet();
        Iterator> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry next = iterator.next();
            next.getValue();
            next.getKey();
        }

    }

自定义泛型

/**
 * 自定义泛型
 *
 */
public class GenericTest {
    String str;
    int i;
    T t;
    public GenericTest(T t1){

    }

    public GenericTest() {
    }

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }
}
class Testt{
    @Test
    public void test(){
        //如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为object类型
        //不建议这样写
        GenericTest genericTest1=new GenericTest();

        GenericTest genericTest=new GenericTest<>();
        genericTest.setT("aaa");
    }

 @Test
    public void test2(){
        ArrayList arrayList=null;
        ArrayList arrayList1;
        
        //arrayList1=arrayList;泛型不同不能赋值
    }
    //泛型不能使用在静态方法中
//    public static void test3(T t){
//        
//    }
}
//异常类不能是泛型的
//class A extends Exception{
    
//}

泛型方法

//泛型方法
    //在方法中出现了泛型结构,泛型参数与类的泛型参数没有关系
    //泛型方法可以声明为静态
    public static  T testt(T t){
        T tt=t;
        return tt;
    }
    
    @Test
    public void testtt(){
        String st = this.testt("st");
    }
//泛型在继承方面的体现
class TTTTTT{
    @Test
    public void test(){
        List list;
        List list1=null;
        //list=list1;//此时并不具备子父类关系
        
    }
}
 
  
/**
     * 通配符的使用
     */

    @Test
    public void testt(){
        List list=null;
        List list1=null;

        List list2=null;
        list2=list;
        this.printtt(list1);
        
        //list2.add("");使用通配符的泛型不允许添加数据
        list2.add(null);//只能添加null
    }

    public void printtt(List list){
        //使用通配符做泛型参数,这样可以使方法服务更多泛型变量
        //此方法只是用来遍历,应该可以传入任何类型,所以使用通配符最合适
    }



**
 * 有限制条件的通配符
 * ?extends Person   //赋值的泛型类型<=Person
 * ? super Person      //赋值的泛型类型>=Person 
 */
 
  

File

public class FileTest {
    /**
     * File类的使用
     *
     * 1.file类的一个对象,代表一个文件或一个文件目录(文件夹)
     * 2.File类声明在java.io包下
     * 3.File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法
     * 并未涉及到写入或读取文件内容的操作。如果需要读取或者写入,必须使用io流来完成
     */

    @Test
    public void test(){
        //file类构造器方法,此时并没有对路径进行操作,而仅仅创建了file对象保存此路径
        File file=new File("hello.txt");//相对路径下,module目录下
        File file1=new File("D:\\MySQL\\hello.txt");//绝对路径
        File file2=new File("D:\\MySQL","hello");
        File file3=new File(file2,"hello.txt");


        /**
         * file类的常用方法
         * getAbsolutePath():获取绝对路径
         * getPath():获取路径
         * getName():获取名称
         * getParent():获取上层文件目录
         * length():获取文件长度
         * lastModified():获取最后一次修改的时间,毫秒值
         * String[] list():获取指定目录下的所有文件或者文件目录的名称数组
         * File[] listFiles():获取指定目录下的所有文件或者文件目录的File数组
         * renameTo(File f):将原来的file移动到f目录并改名为f文件名
         */
        
        file.renameTo(file1);//此方法file调用者的文件必须存在,file1目标路径的文件不能存在

        /**
         * File类的判断功能
         * isDirectory():判断是否是文件目录
         * isFile():判断是否是文件
         * exits():判断是否存在
         * canRead():判断是否可读
         * canWrite():判断是否可写
         * isHidden():判断是否隐藏
         * 
         * 如果不存在文件或目录则全部为false
         */
        /**
         * 创建硬盘中对应的文件或文件目录
         * 
         * createNewFile():创建文件,若文件存在,则不创建,返回false
         * mkdir():创建文件目录,如果此文件目录存在,就不创建了,如果此目录的上层目录不存在,也不创建
         * mkdirs():创建文件目录,如果上层文件目录不存在,一并创建
         * delete():删除文件或者文件夹
         * 
         * 删除注意事项:java中删除不走回收站。要删除一个文件目录请注意该文件目录内不能包含文件或者目录
         */
        
        

    }
}

你可能感兴趣的:(java)