匿名,Lambda,异常,常用类

内部类 Lambda 异常 常用类

一,匿名内部类

​ 匿名对象:是对象,没有引用指向这个对象

​ 匿名内部类:没有名字的一个内部类

​ 作用:

​ 简化,没有类本身的作用,只为了重写一些抽象方法,方便调用这个方法,匿名内部类就可以简化这种实类

​ 简化符合需求的实现类,子类->接口|抽象父类

package class_nner;

public class NimingInner {
    public static void main(String[] args) {
        new Smoke() {
            @Override
            public void smokeing() {
                System.out.println("吸烟吐烟圈");
            }
        }.smokeing();
        Smoke s = new Smoke() {
            @Override
            public void smokeing() {
                System.out.println("边吸烟边敲代码");
            }
        };
        s.smokeing();
        test(new Xu());
        test(new Smoke() {
            @Override
            public void smokeing() {
                System.out.println("抽烟哦");
            }
        });

    }
    static void test(Smoke smoke){
        smoke.smokeing();
    }

}

interface Smoke {
    void smokeing();
}

class Xu implements Smoke{

    @Override
    public void smokeing() {
        System.out.println("好好抽烟");
    }
}

二,Lambad表达式

​ Lambda 表达式->jdk8新增

​ 作用:就是为了简化匿名内部类结构

​ 前提:函数式接口

​ 函数式接口:只存在一个必须被重写的抽象方法的接口

​ 检查一个接口是否为函数式接口:@FunctionalInterface

​ 结构:

​ ()->{}

​ () :重写抽象方法的方法体

​ --> : Lambda符号,箭头符号,具有上下文推导的作用

package class_nner;

public class Lambda01 {
    public static void main(String[] args) {
        Swim s = new Swim() {
            @Override
            public void swim() {
                System.out.println("游泳");
            }
        };
        s.swim();
        Swim swim = () -> System.out.println("在游泳");//花括号可以省略
        swim.swim();
        Sum i = null;
        i = (a, b) -> {
            return a + b;
        };
        System.out.println(i.sum(8,9));
    }


}

interface Swim {
    void swim();
}

interface Sum {
    int sum(int a, int b);
}

三,异常

​ 异常

​ 程序出现了问题

​ 程序一旦遇到异常,后面代码无法正常执行,并且同时控制台中展示

​ 异常的详细信息|细节问题,便于程序员的调试

​ 异常体系:

​ Throwable

​ / \

​ Error Exception

​ Error:一般指由虚拟机生成并脱出的,无需程序员解决处理

异常如果不处理,程序无法正常执行,需要程序猿在代码层面上处理异常
RuntimeException 运行时异常 : 运行期间才会发生的异常
CheckedException 编译时异常|检查时异常 : 编译期间发生的异常,不处理程序无法运行

重点学习关注异常处理方案:
所有的异常都可以通过标准异常处理方案来处理
运行时异常一般通过增强程序健壮性的代码就可以解决 -> if判断
编译时异常只能通过异常处理方案来处理

​ NullPointerException 空指针异常
​ ArithmeticException 数学异常
​ ArrayIndexOutOfBoundsException 数组索引越界异常
​ NegativeArraySizeException 数组长度负数异常
​ ClassCastException 类型转换异常
​ NumberFormatException 转换格式异常

```java

public class Class001_Exception {
public static void main(String[] args) {
//NullPointerException 空指针异常
String s = “abc”;
s = null;
//判断 增强程序 健壮性的代码
if(s!=null){
System.out.println(s.length());
}else{
s = “”;
}

    System.out.println("main方法结束");

    //ArithmeticException 数学异常
    //System.out.println(5/0);

    //ArrayIndexOutOfBoundsException 数组索引越界异常
    //NegativeArraySizeException 数组长度负数异常
    //int[] arr = new  int[-3];
    //System.out.println(arr[3]);

    //ClassCastException 类型转换异常
    //Object obj = "张三";
    //System.out.println((Class001_Exception)obj);

    //NumberFormatException 转换格式异常
    String str = "123abc";
    System.out.println(Integer.valueOf(str));

    //编译时期异常
    //InputStream is = new FileInputStream("");

}

}
```

自定义异常
异常类也是类
需要直接或者间接的继承自Exception
如果是运行时期异常必须直接或者间接的继承RuntimeException

​ 制造异常: throw

public class Class003_DefinedException {
    public static void main(String[] args) {
        //创建一个用户对想
        User user = new User();
        user.setName("zhangsan");
        int age = 20;
        //当AgeException为运行时异常
        /*if(age>=18 && age<=60){
            user.setAge(age);
        }else{
            user.setAge(18);
        }*/

        //当AgeException为编译时异常
        try {
            user.setAge(-19);
        } catch (AgeException e) {
            e.printStackTrace();
        }

        System.out.println("对象创建成功"+user);
    }
}


//年龄不合法异常
class AgeException extends Exception{
    public AgeException(){}

    public AgeException(String message){
        super(message);
    }
}


//用户类 javabean
class User{
    private String name;
    private int age;

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) throws AgeException {
        //年龄不合法
        if(age<18 || age>60){
            throw new AgeException(age+"不合法");
        }
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

四,常用类

常用类 : 经常使用的类

字符串String
不可变长字符序列
String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。
“abc” 字符串常量 --> 字符串常量池中-> 方法区 new String() --> 堆中

学习API类型:
了解类的作用与特点
学习构造器
学习方法
成员
非静态
静态的

​ 底层分析:
​ jdk11 ->使用字节数组存储字符串数据 private final byte[] value;
​ jdk8 -> 使用字符数组存储字符串数据 private final char[] value;

public class Class001_String {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "";
        str  = "abc";
        String str1 = new String();

        //构造器
        //String() 初始化新创建的 String对象,使其表示空字符序列。
        String str2 = new String();
        System.out.println(str2);

        //String(String original)
        String str3 = new String("haha");
        System.out.println(str3);

        //String(char[] value)
        char[] ch = {'c','y','d','z','m'};
        String str4 = new String(ch);
        System.out.println(str4);

        //String(char[] value, int offset, int count)
        String str5 = new String(ch,1,3);
        System.out.println(str5);

        //String(byte[] bytes) 通过使用平台的默认字符集解码指定的字节数组构造新的 String 。
        //byte[] arr = "中国".getBytes();  //utf-8->一个汉字使用三个字节表示   gbk->一个汉字使用两个字节表示
        byte[] arr = "中国".getBytes("GBK");
        System.out.println(arr.length);
        //转换的过程保证字符编码格式一致统一就不会出现乱码
        //String str6 = new String(arr);
        //String(byte[] bytes, String charsetName)
        String str6 = new String(arr,"GBK");
        System.out.println(str6);

        //String(byte[] bytes, int offset, int length)
        //String str7 = new String(arr,3,3);

        //String(byte[] bytes, int offset, int length, String charsetName)  把 字节数组arr中从索引为2的位置开始,拿2个字节数据转为字符串,使用执行"GBK"字符编码格式
        String str8 = new String(arr,2,2,"GBK");
        System.out.println(str8);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值