当前位置: 代码迷 >> Java相关 >> Core Java札记 1.对象与类
  详细解决方案

Core Java札记 1.对象与类

热度:76   发布时间:2016-04-22 20:17:42.0
Core Java笔记 1.对象与类

本章重点:

  • 面向对象程序设计
  • 使用现有Java类
  • 自定义类

面向对象程序设计

面向对象核心概念:
class
instance(instance fields, method, constructor)

面向对象的三个特征:

  1. encapsulation
  2. inheritance
  3. polymorphism

类之间的关系:

  • 依赖(uses-a): 减少类之间耦合。
  • 聚合(has-a)
  • 继承(is-a)

使用现有类

构造器、new关键字、getter/setter(accessor/mutator method)


自定义类

最简单的类定义形式

class ClassName {    constructor1    constructor2    ...    method1    method2    ...    field1    field2}

多个源文件的使用

Employee.java、EmployeeTest.java。EmpolyeeTest.java依赖Employee.java:javac EmployeeTest.java 即可。

原理:java编译器发现EmployeeTest.java使用了Employee类时会查找Employee.class的文件,如果没有找到这个文件或者Employee.java比Employee.class新,就会自动搜索Employee.java,然后对它编译。

简要剖析java类:

  1. java访问权限: public、protected、private、default
  2. java constructor
  3. 方法的implicit参数和explicit参数(this就是implicit参数)
  4. private fields && accessor, mutator
    基于类的访问权限:方法可以访问所属类的私有特征(包括private fields和private methods)
  5. final
    通常final应用于类的primitive or immutable class(不可变类)类型的fields。比如: String就是一个immutable class, 而Date就不是immutable class

static

静态域: private static int nextId = 1;
静态常量: private static final int PI = 3.14;
静态方法: Math.pow(x, a);

静态方法有一个常见的用途:Factory方法

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();NumberFormat percentFormatter = NumberFormat.getPercentInstance();String currency = currencyFormatter.format(0.1);String percent = currencyFormatter.format(0.1);

Factory方法的两个原因:

  1. 无法命名构造器.
  2. 当使用构造器时,无法改变所构造的对象类型,而Factory方法可以返回该类的子类实例.

对象构造

  1. overloading. Java允许重载任何方法,包括构造器.
  2. 默认构造器. 如果一个类没有一个显式构造器,系统会生成一个默认构造器,所有的实例域会被设置成默认值,最好不要使用默认构造器.
  3. 域显式初始化.
  4. 调用另一个构造器(this(...)).
  5. java可以在三个地方初始化fields:构造器、声明中、初始化块(initialization block).

初始化对象域的步骤:

  1. 所有数据域被初始化默认值(0, false, null).
  2. 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块.
  3. 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体.
  4. 执行这个构造器的主体.

类设计技巧

  1. 一定将数据设计为private.
  2. 一定要对数据初始化.
  3. 将职能过多的类进行拆分.
  4. 类名和方法名能够体现它们的职责.
1楼遗忘千年
说的太绝对了,不过总体讲的还可以,就是有的名词不太习惯(和我当时学习的时候蛮有出入的),个人感觉java的单继承关系有必要在学习力的时候讲一下,毕竟作为面向对象的语言是和c作为对比参照才产生的,应该讲一下和c的继承差别
Re: nil2inf
@遗忘千年,有很多名词,有多个同义词,比如: 超类,可以叫父类. 毕竟java之前面向对象已经出来很久了,但是 java规范里面就是 superclass超类。再比如成员变量,在java里面就叫field. 我现在是尽量用java的术语,但是毕竟我是C++出身的,所以很多不时候不自觉会使用C++的术语。其实我是那种使用java挺久的人了,只是想重新深入学习java。所以前面几章,特别是语言特性不会讲的很详尽,作为一个记录了。
  相关解决方案