方法引用 异常 file

一.方法引用

1.方法引用概述

eg:

表示引用run1类里面的sxxxx方法

把这个方法当做抽象方法的方法体

::是方法引用符

java 复制代码
     //方法引用
        Integer[] arr={4,3,1,6,2,7,8,5};
        Arrays.sort(arr,run1::subtraction);
        System.out.println(Arrays.toString(arr));
    }

    public static int subtraction(int num1,int num2){
        return num2-num1;
    }

}

2.引用静态方法

1.方法需要已经存在
2.方法的形参和返回值需要跟抽象方法的形参和返回值保持一致

3.方法的功能需要把形参的字符串转换成整数

eg:

java 复制代码
    ArrayList<String> list10 = new ArrayList<>();
        Collections.addAll(list10, "1","4","3","2","6");
        list10.stream()
                .map(Integer::parseInt)
                .forEach(s->System.out.println(s));

3.引用成员方法

格式:对象::成员方法

1.其他类:其他类对象::方法名

2.本类:this::方法名(引用出处不能是父类方法)

3.父类:super::方法名

i.引用其他成员方法

1.eg

java 复制代码
public class run2 {
    public static void main(String[] args) {
        ArrayList<String> list1=new ArrayList<>();
        Collections.addAll(list1,"张ad","刘df","张ty","周kdh","fjd");

        list1.stream().filter(new fangfa2()::findzhnag)
                .forEach(s -> System.out.println(s));
    }
 }

//***************************

public class fangfa2 {
    public boolean findzhnag(String s){
        return s.startsWith("张")&&s.length()==3;
    }
}

ii.引用本类成员方法

2.eg:静态方法中是没有this的

java 复制代码
public class run2 {
    public static void main(String[] args) {
        ArrayList<String> list1=new ArrayList<>();
        Collections.addAll(list1,"张ad","刘df","张ty","周kdh","fjd");

        list1.stream().filter(new run2()::findzhnag)
                .forEach(s -> System.out.println(s));

    }
    public boolean findzhnag(String s){
        return s.startsWith("张")&&s.length()==3;
    }
}

iii.引用父类成员方法

4.引用构造方法

格式 :类名::new

范例:Student::new

eg1:

java 复制代码
//匿名内部类    
    List<Student> newlist1 = list1.stream().map(new Function<String, Student>() {
            @Override
            public Student apply(String s) {
                String[] arr = s.split(",");
                String name = arr[0];
                int age = Integer.parseInt(arr[1]);
                return new Student(name, age);
            }
        }).collect(Collectors.toList());

        //lambda
        List<Student> new2list1 = list1.stream()
                .map(s -> new Student(s.split(",")[0]
                        , Integer.parseInt(s.split(",")[1])))
                .collect(Collectors.toList());

e:2:

java 复制代码
     //引用构造方法
        List<Student> new3list1 = list1.stream().map(Student::new).collect(Collectors.toList());
        System.out.println(new3list1);


//其中Strudent这个类里面要加上
  public Student(String str) {
        String[] arr = str.split(",");
        this.name = arr[0];
      this.age = Integer.parseInt(arr[1]);
    }

为什么要加:因为被引用的方法的形参和返回值,需要跟抽象方法的形参返回值保持一致

从eg1中的匿名内部类看出

复制代码
 @Override
          public Student apply(String s) {

是有一个String s的,所以这时需要再Student类中构造一个

复制代码
public Student(String str) {

函数,str表示流里面的数据

5.其他调用方式

i.使用类名引用成员方法

格式:类名::成员方法

范例:String::substring

练习 :集合里面一些字符串,要求变成大写后进行输出

eg:

java 复制代码
      ArrayList<String> list2=new ArrayList<>();
        Collections.addAll(list2,"aaa","bbb","ccc","ddd");

        list2.stream().map(String::toUpperCase).forEach(s -> System.out.println(s));

意思是:第一个参数是什么类,就可以直接引用这个类里面跟后面参数跟抽象方法一样的成员方法。这也就是为什么形参不一致也可以,一个有一个形参一个无形参。就是没有第二个参数,说明引用方法是无参的

局限性: 1.不能阴影所有类中的成员方法。2.是跟抽象方法的第一个参数有关,这个参数是什么类型的,那么就只能应用这个类中的方法。

ii.引用数组的构造方法

格式:数据类型[ ]::new

范例:int[ ]::new

练习:集合中存储一些整数,收集到数组当中

java 复制代码
 ArrayList<Integer> list3=new ArrayList<>();
  Collections.addAll(list3,1,2,3,4);

Integer[] arr = list3.stream().toArray(Integer[]::new);
        System.out.println(Arrays.toString(arr));

细节:数组的类型需要和流中的数据类型保持一致

二、异常

1.异常的作用

异常作用一:异常是用来查询bug的关键参考信息

异常作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

2.异常的处理方式

i.JVM默认的处理方式

把异常名称,原因及位置等信息输出在了控制台,程序停止,异常下面的不会再执行

ii.自己处理(捕获异常)

java 复制代码
 try{
             //可能出现异常的代码
         }catch(异常类名 变量名){
             //异常的处理代码
         }

目的:当代码出现异常时,可以让程序继续往下执行

注意:如果try中没有遇到问题,会吧try里面的全部执行完毕不会执行catch里面的代码,只有出现异常才会执行catch

注意:如果try里面有多个异常,要写多个catch与之对应,细节:如果要捕获多个异常,这些异常如果存在父子关系的话,那么父类一定要写在下面

注意:如果try中遇到的问题没有被捕获,相当于try....catch的代码白写了,最终还是会交给虚拟机处理(默认处理方式)

注意:try中遇到了问题,那么try下面的其他代码不会执行,直接跳转到相对应的catch,如果没有相对应的catch与之匹配,则交给虚拟机处理

iii.抛出异常

iiii.异常中的常用方法

Throwable的成员方法

//快捷键生成,ctrl alt+t

三、File

1.File的构造方法

2.File的成员方法

相关推荐
HaiFan.26 分钟前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
我要学编程(ಥ_ಥ)34 分钟前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
music0ant36 分钟前
Idea 添加tomcat 并发布到tomcat
java·tomcat·intellij-idea
计算机徐师兄1 小时前
Java基于SSM框架的无中介租房系统小程序【附源码、文档】
java·微信小程序·小程序·无中介租房系统小程序·java无中介租房系统小程序·无中介租房微信小程序
源码哥_博纳软云1 小时前
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
忒可君2 小时前
C# winform 报错:类型“System.Int32”的对象无法转换为类型“System.Int16”。
java·开发语言
斌斌_____2 小时前
Spring Boot 配置文件的加载顺序
java·spring boot·后端
路在脚下@3 小时前
Spring如何处理循环依赖
java·后端·spring
一个不秃头的 程序员3 小时前
代码加入SFTP JAVA ---(小白篇3)
java·python·github
丁总学Java3 小时前
--spring.profiles.active=prod
java·spring