比较器和内部类

比较器和内部类

一.比较器

Comparator 和 Comparable 比较:
1.Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
(作用在实体类上)
2.而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
(作用在排序类上)
总结:Comparable相当于“内部比较器”,而Comparator相当常用类1
今日目标:
1.内外部比较器
2.内部类
3.包装类
于“外部比较器”。

案例:创建一个实体类House,属性(面积,总价),创建一个房屋数组,里面有5套房子,分别使用两个不同的比较器,和数组工具类,对房屋进行排序,可以按照总价或面积进行排序。

练习:使用两种不同的比较器对5只狗狗进行排序,狗狗属性有:昵称,年龄。
分别按照昵称排序,年龄排序。

二.内部类

在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。

1.成员内部类

定义在类中,充当类的一个成员。

访问权限:内部类可以访问外部类的属性和方法,外部类想要访问内部类的成员必须先创建内部类的对象来访问。
创建对象:new Outer().new Inner()

2.局部内部类

定义在方法中,充当方法的一个变量,注意: 局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的。

3.匿名内部类

匿名内部类,通常作为方法传参时使用,用于继承抽象类或实现接口,代替子类或实现类,并不需要额外定义方法。Jdk8开始可以使用Lambda表达式进行简化。
参考:https://mp.weixin.qq.com/s/7oiqyizsusMqwno5tDSVCA

案例:使用匿名内部类重新实现打印机案例,使用Lambda表达式简化

4.静态内部类

静态内部类可以理解为类的一个静态成员。
静态内部类不需要依赖于外部类的对象,可以直接创建自己的对象。
不能访问外部类的非static成员属性或方法,因为静态内部类不依赖外部对象,就可以自己创建对象,所以如果没有外部对象,就调用外部的实例成员,就产生了矛盾,因为外部的实例成员必须要有外部对象。

三.包装类

1.包装类的概念

由于基本数据类型没有类和对象的概念,java的设计理念是万事万物皆对象。
所以特定为每一种基本数据类型量身定制了一个属于自己的类,称为包装类。

2.包装类的应用

由于集合中不能存储基本数据类型,我们所看到的 list.add(6);事实上存储的都是包装类型,由基本数据类型升级成包装类的过程叫做“装箱”,反之称为“拆箱”;
1.装箱—拆箱 包装类 –基本数据类型 自动进行
2.向上转型—向下转型 父类—子类
3.强制类型转换—自动转换 byte-short-int-long float-double

3.包装类的构造方法

1.所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例
2.除Character类外,其他包装类可将一个字符串作为参数构造它们的实例
注意事项
1.Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false
2.当Number包装类(除了Character和Boolean其它的包装类)构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译不通过,运行时会抛出NumberFormatException异常
总结:
1.包装类的构造方法一般都有重载,一个构造方法的参数是对应的基本数据类型,另一个构造方法的参数是字符串类型。

4.包装类的常用方法

1.XXXValue():包装类转换成基本类型(实例方法)
byteValue()、intValue()、longValue()、shortValue()、doubleValue()、floatValue()
charValue()、booleanValue()

2.toString():以字符串形式返回包装对象表示的基本类型数据(基本类型->字符串)
(静态方法)
3. parseXXX():把字符串转换为相应的基本数据类型数据(Character除外)(字符串->基本类型)(静态方法)
4.valueOf()(静态方法)
(1)所有包装类都有如下方法(基本类型->包装类)
public static Type valueOf(type value)
(2)除Character类外,其他包装类都有如下方法(字符串->包装类)
public static Type valueOf(String s)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值