技术编程|Java知识点梳理( 七 )


文章图片

文章图片

18、策略模式
策略模式属于对象的行为模式 , 其用意是针对一组算法 , 将每一个算法封装到具有共同接口的独立的类中 , 从而使得它们可以相互替换 , 核心思想是:面向接口编程 。
策略模式的经典应用包括Spring的PlatfromTransactionManager , JDK 排序策略 (不同的Comparator)等 , 其优点包括:
(1)算法可以自由切换 , 避免使用多重条件判断;
(2)扩展性良好 。
策略模式与模板方法的区别:
对于策略模式而言 , 一个“策略”是一个整体的(完整的)算法 , 算法是可以被整体替换的;而模板方法只能被替换其中的特定点 , 算法流程是固定不可变的 。在思想和意图上看 , 模板方法更加强调:
①定义一条线(算法流程) , 线上的多个点是可以变化的(具体实现在子类中完成) , 线上的多个点一定是会被执行的 , 并且一定是按照特定流程被执行的 。
②算法流程是唯一的入口,对于点的访问是受限的 。19、Java 自动装箱、拆箱机制
Java为每种基本数据类型都提供了对应的包装器类型 。所谓自动装箱机制就是自动将基本数据类型转换为包装器类型 , 而自动拆箱机制就是自动将包装器类型转换为基本数据类型 。在JDK中 , 装箱过程是通过调用包装器的valueOf方法实现的 , 而拆箱过程是通过调用包装器的 xxxValue方法实现的(xxx代表对应的基本数据类型) 。但是 ,
(1)Integer、Short、Byte、Character、Long 这几个类的valueOf方法的实现是类似的 , 共享[-128,127];
(2)Double、Float的valueOf方法的实现是类似的 , 无限不可列举 , 不共享;
(3)Boolean的valueOf方法的实现不同于以上的整型和浮点型 , 只有两个值 , 有限可列举 , 共享;
什么时候装箱/拆箱?
至于什么时候装箱 , 什么时候拆箱主要取决于:在当前场景下 , 你需要的是引用类型还是原生类型 。(例如 , 使用equals方法时传进来原生类型的值);若需要的是原生类型 , 但传进来的值是引用类型 , 则自动拆箱(例如 , 使用运算符进行运算时 , 操作数是包装类型) 。20、内部类
内部类指的是在一个类的内部所定义的类 , 类名不需要和源文件名相同 。在Java中 , 内部类是一个编译时的概念 , 一旦编译成功 , 内部类和外部类就会成为两个完全不同的类 , 共有四种类型:
(1)成员内部类:成员内部类是外围类的一个成员 , 是依附于外围类的 , 所以 , 只有先创建了外围类对象才能够创建内部类对象 。也正是由于这个原因 , 成员内部类也不能含有 static 的变量和方法;
(2)静态内部类:静态内部类 , 就是修饰为static的内部类 , 该内部类对象不依赖于外部类对象 , 就是说我们可以直接创建内部类对象 , 但其只可以直接访问外部类的所有静态成员和静态方法;
(3)局部内部类:局部内部类和成员内部类一样被编译 , 只是它的作用域发生了改变 , 它只能在该方法和属性中被使用 , 出了该方法和属性就会失效;
(4)匿名内部类:定义匿名内部类的前提是 , 内部类必须要继承一个类或者实现接口 , 格式为 new 父类或者接口(){定义子类的内容(如函数等)} 。也就是说 , 匿名内部类最终提供给我们的是一个匿名子类的对象 。20.1内部类的作用
(1)间接实现多重继承,例如:
技术编程|Java知识点梳理
文章图片

文章图片

(2)内部类还可以很好的实现隐藏(一般非内部类,是不允许有private与protected权限的),但内部类可以 。
21、equals ,hashCode ,==
(1)== 用于判断两个对象是否为同一个对象或者两基本类型的值是否相等;


推荐阅读