目录

Java笔记

Java核心技术(卷1)笔记

常识

  • 区分更改器方法访问器方法(在C++中,带const的方法为访问器方法,而默认的为更改器方法;在Java中,没有语法上的区别)
  • 需要返回一个可变数据域的拷贝,应该使用clone
  • 在一个源文件内,只能有一个共有类(public class),可以有任意数目非共有类
  • 一个方法可以访问所属类的所有对象的私有数据
  • 每一个类中可以包含一个main用于单元测试
  • Java总是采用按值调用,方法得到的是所有参数值的一个拷贝
  • 方法参数使用

    1. 一个方法不能修改一个基本数据类型的参数
    2. 一个方法可以修改一个对象参数的状态
    3. 一个方法不能让对象参数引用一个新对象
  • ... 表示方法可以接受任意数量参数(对象)

final

  • 表示常量
  • 域定义为final时,构建对象的时候必须初始化这个域,并且在后面的操作中,不能再对它进行修改
  • 类定义为final时,不允许被扩展
  • 方法被定义为final时,不允许被子类覆盖(final类的所有方法均为final)

static

  • 表示静态
  • 域定义为static时,每个类中只能由一个这样的域,并且类的所有实例共享这个域
  • 一般使用静态常量(static final),而不是静态变量
  • 静态方法不能对对象实施操作(没有隐式参数this),但可以访问自身类的静态域
  • 什么时候该使用静态方法

    1. 一个方法不需要访问对象状态,其所有参数都是显示参数
    2. 一个方法只需要访问类的静态域

OOP

  • 仅当类没有提供任何构造器时,系统才会提供一个默认构造器
  • 可以通过this()在一个构造器中调用另一个构造器
  • 初始化类中数据域的方法(按先后顺序)

    1. 声明中直接赋值
    2. 初始化块(不常用)
    3. 构造器
  • 类中的finalize可以用于对象析构,但一般不使用,finalize在垃圾回收之前调用

  • 静态导入
  • 使用*导入所有类,但不能用*导入多个包

继承

  • Java中所有继承均为公有继承
  • 超类强制转换为子类之前可以使用instanceof来检查
  • 包含一个或多个abstract方法的类必须被声明为abstract,abstract类可以有具体方法
  • 类不包含抽象方法也可以声明为abstract
  • abstract类不能被实例化,但可以创建abstract类的对象变量用于引用其非抽象子类
  • equals判断两个对象是否具有相同的引用
  • 如果重新定义了equals方法,就必须重新定义hashCode方法,保证等价的两个方法hashCode一样
  • 等价的两个对象散列值一定相同,但是散列值相同的两个对象不一定等价
  • 比较两个枚举类时不要用equals而是==
  • clone() 是 Object 的 protected 方法,它不是 public,一个类不显式去重写 clone(),其它类就不能直接去调用该类实例的 clone() 方法
  • 重写(override)有以下三个限制:

    • 子类方法的访问权限必须大于等于父类方法;
    • 子类方法的返回类型必须是父类方法返回类型或为其子类型。
    • 子类方法抛出的异常类型必须是父类抛出异常类型或为其子类型。

反射

  • Field 变量和域
  • Modifier 修饰符

接口

  • 接口中所有方法自动属于public(可以不用声明),但在实现该接口时需要声明public
  • 接口的字段默认都是public static final的,而抽象类没有这些限制
  • 可以用default为接口方法提供一个默认实现
  • 接口和抽象类

    • 使用接口:
    1. 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Comparable 接口中的 compareTo() 方法;
    2. 需要使用多重继承。
    • 使用抽象类:
    1. 需要在几个相关的类中共享代码。
    2. 需要能控制继承来的成员的访问权限,而不是都为 public。
    3. 需要继承非静态和非常量字段。

PS: 在很多情况下,接口优先于抽象类。因为接口没有抽象类严格的类层次结构要求,可以灵活地为一个类添加行为。并且从 Java 8 开始,接口也可以有默认的方法实现,使得修改接口的成本也变的很低。

  • 只有一个抽象方法的接口为函数式接口,可以提供一个lambda表达式

内部类

  • 内部类既可以访问自身数据域,也可以访问创建它的外围类对象的数据域
  • 内部类的对象总是有一个隐式引用,指向创建它的外部类对象
  • 只有内部类可以是私有的,常规类只具有包可见性
  • 内部类的static域只能是final,内部类不能有static方法
  • 局部类不能用public等访问符进行修饰,他的作用域仅在局部块中
  • Java8之前局部类访问的局部变量必须声明为final
  • 匿名类不能有构造器,直接将构造器传递给超类构造器
©著作权归作者所有

仅有一条评论

  1. 写的很好,赶紧更新!

发表评论