Notes15 day15 泛型

day15 泛型

泛型概述

可以在类或方法中预支地使用未知的类型。

注意

一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。

使用泛型的好处

  • 将运行时期的ClassCastException,转移到了编译时期变成了编译失败。

  • 避免了类型强转的麻烦

泛型的定义和使用

通常情况下,T,E,K,V,?是这样约定的:

  • ?表示不确定的 java 类型

  • T (type) 表示具体的一个java类型

  • K V (key value) 分别代表java键值中的Key Value

  • E (element) 代表Element

泛型可以用到类、方法、接口,属性中

泛型中的类型 <类型> 只能是引用类型

泛型方法

定义格式

修饰符 <代表泛型的变量> 返回值类型 方法名 (参数){ }

泛型接口

  • 定义格式

修饰符 interface接口名<代表泛型的变量> { }

类和接口对于和泛型的定义格式一样

泛型通配符

什么是泛型通配符

当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。

通配符基本使用

泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。

此时只能接受数据,不能往该集合中存储数据。

举例

         Collection<?> c5 = new ArrayList<Object>();
        Collection<?> c6 = new ArrayList<Animal>();
        Collection<?> c7 = new ArrayList<Dog>();
        Collection<?> c8 = new ArrayList<Cat>();
什么情况不能使用T要用?
     Collection<?> a = new ArrayList<String>();
        a = new ArrayList<Integer>();
        下面的会报错
        Collection<T> b = new ArrayList<>(); 
        b = new ArrayList<Integer>();

通配符高级使用

?:任意类型,如果没有明确,那么就是Object以及任意的Java类了
​
?表示任意的类型都是可以的
        Collection<?> c5 = new ArrayList<Object>();
        Collection<?> c6 = new ArrayList<Animal>();
        Collection<?> c7 = new ArrayList<Dog>();
        Collection<?> c8 = new ArrayList<Cat>();
? extends E:向下限定,E及其子类
    // ? extends E:向下限定,E及其子类,表示包括E在内的任何子类;
        // Collection<? extends Animal> c9 = new ArrayList<Object>();
        Collection<? extends Animal> c10 = new ArrayList<Animal>();
        Collection<? extends Animal> c11 = new ArrayList<Dog>();
        Collection<? extends Animal> c12 = new ArrayList<Cat>();
 ? super E:向上限定,E极其父类
      ? super E:向上限定,E极其父类,表示包括E在内的任何父类;
        Collection<? super Animal> c13 = new ArrayList<Object>();
        Collection<? super Animal> c14 = new ArrayList<Animal>();
        // Collection<? super Animal> c15 = new ArrayList<Dog>();
        // Collection<? super Animal> c16 = new ArrayList<Cat>();

静态导入

第一种

System.out.println(java.lang.Math.abs(-100));

第二种

import static java.lang.Math //lang包写一般不导入包,也可以导入包
​
System.out.println(Math.abs(-100));

第三种

import static java.lang.Math.abs;
System.out.println(abs(-100));

可变参

可变参数(T...a) 不限类型,不限长度,可传入多个参数,也可传入数组

举例

public class VarargsExample {
​
    public static void myMethod(char... args) {
        for (char arg : args) {
            System.out.println(arg);
        }
    }
​
    public static void main(String[] args) {
        char[] myArray = {'H', 'e', 'l', 'l', 'o'};
        myMethod(myArray); // 传递一个字符数组作为参数
    
        myMethod('H', 'e', 'l', 'l', 'o'); // 直接传递多个字符作为参数
    }
}

数组和集合互转

list集合 --> set集合

List<String> list = new ArrayList<>();
        list.add("a");
Set<String> set = new HashSet<>(list);

set集合 --> list集合

Set<String> sets = new HashSet<>();
        sets.add("a");
 List<String> lists = new ArrayList<>(sets);

注意事项

虽然可以把数组转成集合,但是集合的长度不能改变。

数组 --> list集合

String[] str = {"hello","world","java"};
方式一
List<String> list = Arrays.asList(str); 
方式二
List<String> list = Arrays.stream(str).collect(Collectors.toList());//int,short,byte类型需要加上一个单独的方法,其他的暂时未知

list集合 --> 数组

List<String> list = new ArrayList<String>();
		list.add("hello");
		list.add("world");
String[] str = new String[list.size()];
		list.toArray(str);//toArray参数中只能传入引用数组的数据类型

数组 --> set集合

String[] s = {"a","b","c"};
方式一
List<String> list = Arrays.asList(s);
Set<String> set = new HashSet<>(list);
方式二
Set<String> set = Arrays.stream(s).collect(Collectors.toSet());//int,short,byte类型需要加上一个单独的方法,其他的暂时未知

set集合-->数组

Set<String> set = new HashSet<>();
        set.add("abc");
List<String> lists = new ArrayList<>(set);
String[] str4 = new String[lists.size()];
        lists.toArray(str4);//toArray参数中只能传入引用数组的数据类型

注意 int 数组 转 set 和 list集合

第二种方法为

Set<Integer> set = Arrays.stream(n).boxed().collect(Collectors.toSet());

Collections

Collections是针对集合操作的工具类

Collections常用的方法

方法名说明
public static void sort(List<T> list)将指定的列表按升序排序
public static void reverse(List<?> list)反转指定列表中元素的顺序
public static void max()获取集合中最大值

collection和collectons的区别?

Collection 是一个集合接口

Collections 是一个操作集合的工具类

File类

是文件和目录路径名的抽象表示(其实file创建的对象,就是将要 将要创建的文件或者目录的路径 创建成一个对象,此时不会对盘符有任何影响),主要用于文件和目录的创建、查找和删除等操作。

File类构造方法

方法名说明
public File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child)父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child)父抽象路径名和子路径名字符串创建新的 File实例。

注意:

因为没有使用createNewFile()方法,所以创建的对象不会对电脑盘符中的目录或者文件有任何操作

如果使用了createNewFile()方法,将创建的对象盘符操作,操作后会返回boolean类型

获取功能方法

方法名说明
public String getAbsolutePath()返回此File的绝对路径名字符串。
public String getPath()将此File转换为路径名字符串
public String getName()返回由此File表示的文件或目录的名称。
public long length()返回由此File表示的文件的长度。

判断功能的方法

public boolean exists()此File表示的文件或目录是否实际存在。
public boolean isFile()是否是一个文件
public boolean isDirectory()此File表示的是否为目录。
public boolean canWrite()是否能写
public boolean canReade()是否能读
public boolean isHidden()是否隐藏

创建&删除功能的方法

方法名说明
public boolean createNewFile()当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete()删除由此File表示的文件或目录。
public boolean mkdir()创建由此File表示的目录。
public boolean mkdirs()创建由此File表示的目录,包括任何必需但不存在的父目录。

注意

delete方法,如果此File表示目录,则目录必须为空才能删除。(如果要删除目录,目录中不能有文件,否则删不了)

在上述基础上,创建出来的多级目录,每次用file对象掉用一次delete,删除的只是最里面的一个文件,或者目录

重命名方法

public boolean renameTo(File dest)

如果路径名相同,就是改名。

如果路径名不同,就是改名并剪切。

举例

public static void main(String[] args) throws IOException {    
//数据数据源,前提得这个数据存在
    File srcFile = new File("D:\\江一燕.jpg");

    //数据数据的目的地
    File newFile = new File("D:\\我和江一燕.jpg");//相同路径是改名
    // File newFile2 = new File("e:\\我和江一燕.jpg");//不同路径是剪切并改名

    //实现改名
    System.out.println(srcFile.renameTo(newFile));
}

目录的获取

方法名说明
public String[] list()返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles()返回一个File数组,表示该File目录中的所有的子文件或目录。

举例

//创建file
    File file = new File("d:\\");
​
    //获取e盘下所有的文件及目录
    String[] list = file.list();
    for(String s : list){
        System.out.println(s);
    }
    System.out.println("------------------");
​
    //创建file
    File file2 = new File("d:\\");
    //获取e盘下的所有file文件
    File[] files = file2.listFiles();
    for(File f : files){
        System.out.println(f);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值