Java 一些要点

距离开始看 Java 语言已经半个月有余了,期间做了些 oj,浅显的了解了一些 Android 程序开发。再回过头来看 Java 语言本身,有一些需要注意的要点,本篇做一下小结。

关于类

  • 实例变量:对象中已知的事物,用来表现对象的属性,代表一种状态
  • 方法:对象会执行的一些动作,用来表示对象具有的某些行为

  • 实例变量:直接声明在类中,类的方法之外

  • 局部变量:声明在类的方法中的变量,没有默认值,使用前必须先进行初始化

封装的一条原则:将实例变量标记为私有,并提供相应的 gettersetter 来控制外围的存取权限

创建一个新的对象需要三步:

1.声明一个引用变量
2.创建这个对象
3.将新的引用于对象连接

final 关键字表示初始化之后不能够被改变的量(类似于const,表示以一旦被创建则不能被改动,可以用来防止方法的覆盖创建子类)。标记为 final 的引用只能指向特定的对象不能更改。

静态的(static)

静态方法

  • 不需要实例,可以直接通过类名访问的方法(如 Math.min())
  • 静态的方法不能访问非静态的变量
  • 静态的方法也不能调用非静态的方法

静态变量:它的值对同一个类的所有实例有相同,是共享的

静态的 final 变量:实际上就是一个常数,(如 Math.PI)

继承、多态

可以使用“是一个”与“有一个”来测试两个类是否是继承关系

  • A 是一个 B ,那么A可以继承自B
  • A 有一个 B ,那么他们是类与实例的关系

重写父类的方法是可以使用 super.method() 来调用父类相应名字的方法。父类可以设定方法的存取权限,有四种:private、default、protected、public

多态

在多态的情形下,引用与对象类的类型可以是不同的,引用可以使对象类型的父类(多态数组)、然后使用父类作为参数传递给函数

重载是具有相同名字的方法,与继承、多态无关

  • 抽象类(abstract 型类):不能被初始化,只能被子类继承
  • 抽象方法:必须要被子类重写的方法,

不能在非抽象类中拥有抽象方法,Java 中所有的类都是从 Object 类中继承出来的,拥有 instanceof 方法,用来检查 Object 对象是否是某个对象。

接口:接口可以用来解决多重继承问题,不产生 致命方块,接口是把类中的所有方法都设为抽象的。

extends 只能有一个,但是 implement 可以有很多个类。可以解释为类来自单亲家庭,但可以扮演多种角色。

内部类:拥有权限存取它所在外部类的状态,即使是私有成员

设计类

开发一个类:

  1. 找出类应该做的事
  2. 列出实例变量和方法
  3. 编写方法的伪代码
  4. 编写方法的测试用程序
  5. 实现这个类
  6. 测试类的方法
  7. 出错或者重新设计

判断类、子类、抽象类或是接口

  1. 新类不能通过“是一个”测试,则它不继承其他类
  2. 需要一个类的特殊化版本时,以覆盖或增加新方法来继承现有类
  3. 需要定义一群子类的模板而不想被初始化,则使用抽象类
  4. 如果定义的类需要扮演角色,则使用接口

其他

  • main 函数的两种用途:

    • 测试真正的类
    • 启动一个 Java 应用
  • .jar 文件:依据 pkzip 存档的 Java 文件,包含一个 mainfest 定义了哪一个文件含有 main 程序

  • 类中 static{ } 语句块中包含的静态方法会在首次被调用时执行

  • 在多线程编程中,同步化是要保护重要的数据,但是锁住的不是数据而是存取数据的方法