zoukankan      html  css  js  c++  java
  • 疯狂JAVA——第六章 面向对象(下)

    6.1包装类

    java为了照顾程序员的传统习惯,所以提供了八种基本数据类型。但也带来不方便,例如所有引用类型都继承自Object类,都可当做Object类型变量使用。但基本数据类型的变量就不可以。如果有个方法需要Object类型的参数,但实际需要的值确实2、3等数值,这可能比较难以处理。所以提供了包装类。

    自动装箱、自动拆箱 

    基本数据类型——————通过new WrapperClass(primitive)创建————————>包装类对象

    基本数据类型<——————通过WrapperInstance.xxxValue()方法————————包装类对象

    基本数据类型——————通过String.valueOf(primitive)创建————————>String对象

    基本数据类型<——————通过WrapperClass.parseXxx()方法————————String对象

    6.2处理对象

    toString()方法是Object类里的一个实例方法,所有的Java类都是Object类的子类,因此所有的Java对象都具有toString()方法。

    toString()方法是一个非常特殊的方法,它是一个“自我描述”的方法,用print输出。

    大部分重写toString()方法总是返回该对象的所有令人感兴趣的信息所组成的字符串。

    ==和equal()方法判断引用对象相等时,都是当两者指向同一个对象时才相等,如果让他们在字面上就相等,应该重写equal方法。许多类重写了equal()方法,比如String类。

    常量池——专门用于管理在编译时被确定并保存在已编译的.class文件中的一些数据。它包含了关于类、方法、接口中的常量,还包括字符串常量。

    JVM常量池保证相同的字符串直接量只有一个,不会产生多个副本。而使用new String()创建的字符串对象时运行时创建出来的,它被保存在运行时内存区(堆内存)内,不会放入常量池。

    6.3.2单例类

    条件:1.构造器私有

       2.有一个类外可访问到的类方法

       3.有一个类变量来缓存曾经创建的实例。

    6.4final修饰符

    类成员变量提供默认的初始值,所以我们不指定值也可以;

    final修饰的成员变量必须由程序员显示指定初始值,而且是在定义的时候;

    局部变量必须初始化后才可以使用,因为局部变量没有默认的初始值;

    final修饰的局部变量可以在定义的时候不给定初始值而在后边给定初始值,但只能赋值一次。

    final修饰基本类型变量和引用类型变量区别:final只能保证引用类型变量所引用的地址不改变,但这个对象完全可以改变。

    6.4.7不可变类

    不可变类是指创建该类的实例后,该实例变量是不可改变的。

    但如果里边有引用的变量,就要注意,这个时候要想保证引用的内容不变,必须要创建临时的对象,并返回一个匿名对象,详细内容参见P183页。

    6.5抽象类和接口

    有抽象方法的类只能定义成抽象类,抽象类里可以没有抽象方法。

    static和abstract不能同时修饰某个方法,即没有所谓的类抽象方法。但是他们可以同时修饰内部类。

    为什么static和abstract不能同时修饰某个方法?

    答:因为static修饰的方法不能被重写,故不能实现多态,而abstract的目的就是实现多态,故二者不能同时修饰某个方法。

    接口可以包含成员变量(只能是静态常量)、方法(只能是抽象实例方法、类方法或默认方法)、内部类(包括内部接口、枚举)定义。

    接口里的所有成员,都是public的,可以省略,但是省略也是public的。

    接口的成员变量,可以省略,但即使省略也全是public static final修饰符。而且在定义的时候就要指定默认值。

    接口的普通方法不能有方法实现,但类方法、默认方法都必须有方法实现。

    继承父类用extends,实现接口用implements

    接口与抽象的区别和联系:

    接口是一种规范,整个系统的“总纲”,不应该变来变去,所以成员变量是final的。一个接口的改变对整个系统甚至其他系统的影响是辐射式的,导致系统中大部分类都要改写。

    抽象类是模板式设计,是中间设计,但还不能作为最终的产品,要进一步完善。

    更多区别和联系看p195.

    6.7内部类

    使用静态内部类比使用非静态内部类要简单的多,只要把外部类当作静态内部类的包空间就可以。因此当程序需要使用内部类时,应该优先考虑静态内部类。

    匿名内部类适合创建只需要一次使用的类,创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,匿名内部类不能重复使用。匿名内部类必须创建一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。由于内部类不能是抽象类,所以匿名内部类必须实现它的抽象父类或者借口里包含的所有抽象方法。

    6.8Lambda表达式

    视频地址:http://weibo.com/tv/v/c03ed1e48edafe6d96b09d0d6c29f918?fid=1034:c03ed1e48edafe6d96b09d0d6c29f918

  • 相关阅读:
    基于properties文件的Spring Boot多环境切换
    在mysql命令行下执行sql文件
    thymeleaf th:href 多个参数传递格式
    Mybatis 级联查询时只查出了一条数据
    IDEA技巧-自动导包(Auto import)以及自动优化包
    Drools学习教程
    Drools学习教程
    Drools学习教程
    Drools学习教程
    一道有趣的类加载面试题
  • 原文地址:https://www.cnblogs.com/shixisheng/p/6555854.html
Copyright © 2011-2022 走看看