手记

《java核心技术》再读之对象与类

面向对象程序设计概述

类是构造对象的模板或者蓝图,由类构造对象的过程称为创建类的实例

1.java编写的代码都处于某个类的内部,java标准库提供了几千个类可以供使用,但是任然还需要在java中创建自己的类。
2.java面向对象编程(OOP)的三大特性:封装、继承、多态。
不是所有的类都具有面向对象的特性:如Math类。
3.基本关系

  • 依赖(use-a) 一个类的方法操纵另一个类的对象。依赖应该尽可能的减少。
  • 聚合(has-a) 一个类的对象包含其它类的对象。
  • 继承(is-a)利用现有的类创建一个新类,实现代码的复用,降低开发的复杂性。

4.预定义类与自定义类

  • java标准类库
  • 用户自定义类,主力类(workhorse class)
    通常自定义类中都有实例域和实例方法,而没有main方法(每个类可以有自己的main方法进行调试,但是当主程序中的main方法执行后,其它类中的main方法是不会执行的),要想创建一个完整的程序,就必须将若干的类组合起来,而其中只有一个main方法。
class Teacher{
    //在创建实例域时,实例域应该标记为private,尽量不要标记为public。
    private String name;
    private int age;
    //类中的所有的方法都为public,意味着任何类的方法都可以调用这些方法
    //构造器方法
    public Teacher(String name,int age){
        this.name = name;
        this.age = age;
    }
    //访问器方法
    public String getName(){
        return name;
    }

    public int getAge(){
        return age;
    }
}
对象

主要特性(针对同一个类的对象实例)

  1. 对象的行为:对对象施加的操作或者方法。
    2.对象的状态:施加方法时的对象的响应,每个对象都保存着描述当前特征的信息,必须是由调用方法实现。
    3.对象标识:辨别具有相同行为与状态的不同对象,每个对象标识一定不同。

对象的几个特性之间相互影响

基本概念

  • 对象
    java中利用构造器创建对象,利用new操作符+构造器可以创建一个对象,构造器是与类名相同的一种特殊的方法。
  • 对象变量
    使用new操作符创建的对象,只能使用一次(每次调用new+构造器创建的对象都是新的),如果想要多次使用,就需要将创建的对象储存在一个变量中,而这个变量本身并不是对象。需要类名 变量名 = new 构造器将其初始化之后,对象变量才能引用对象。初始化变量可以新构造一个变量,也可以引用一个已经存在的对象,此时后者的两个对象变量都指向同一个对象。任何对象变量的值都是对储存在另外一个地方的一个对象的引用。显示将对象变量设置为null,就表明这个对象变量当前没有引用任何对象,将一个方法应用于一个值为null的对象上,就会产生运行时错误。

    方法

    更改器方法与访问器方法(getter()&&setter())
    对于一个实例域可以只设置起的访问器方法使其成为一个只读域,可以保证其不会受到外部数据的破坏。有时候需要对实例域进行修改时可以对某个实例域添加修改器方法,有了修改器方法当一个数据出现问题时可以快速地确定错误出现的位置。注意不要编写返回可变对象的访问器方法。如果需要返回一个可变对象的引用,需要使用clone方法。类的方法时刻以访问该类的任何一个对象的私有域的。

  • 访问器
    java语言要求数据的可靠性和重用性,当一个类想要访问另一个类的实例域时,由于实例域一般采用private定义,所以不能够直接访问,需要使用访问器来进行访问,并且访问器方法是不能够修改类的实例域的。
  • 更改器
    对实例域能够进行更改的方法。使用更改器方法可以执行错误检查。

构造器方法

  • 构造器与类同名
  • 每个类可以有一个以上的构造器
  • 构造器可以有一个及以上的参数
  • 构造器没有返回值
  • 构造器总是伴随着new操作符一起调用
  • 构造器中的局部变量不要和实例变量同名,否则会将其屏蔽。

实例域

  • final实例域 对象构造时必须将其初始化,并且在之后的操作中不能再对其进行修改。final修饰符大都应用于基本的数据类型、或者不可变类的域。要注意对象的引用被设置为final时,该对象并不一定为一个常量,所以可变的类在使用final时可能会引发混乱。
  • 静态域 当利用static将一个实例域定义为静态域时,每个类中只有一个这样的域,静态域独立存在,是类的一部分,不属于任何对象(静态方法类似)。而每一个对象的所有的实例域都是该类所有实例域的一个拷贝。
  • 静态常量 静态常量可以被设计为共有的域,这样的域不再允许被赋其他值。

隐式参数与显式参数
方法有两个参数,一个是隐式参数,是出现在方法名之前的类对象,在每一个方法中用关键字this表示,另一个为显式参数,即方法名括号中的数值。在构造器方法中,利用this参数可以将局部变量与实例变量很好的区分开来,有助于代码的阅读。

私有方法
如果一个方法是私有的,那么它就不会被外部的类调用,是可以将其删去的,所以当代码进行重构时,如果某些私有方法的功能被重新编写,那么就可以将其去掉,并不会影响程序的使用,外部的类是对其没有依赖关系的。

静态方法(类方法)
在使用时,不用依赖于任何的对象,没有隐式参数。不能操作对象,可以访问自身类中的静态域(拷贝)。在调用时使用类名可以很好地区分静态方法与其他方法。

工厂方法

main方法 静态的main方法在程序开始时执行并创建程序需要的对象。

1. 本地方法可以绕过java的存储控制机制

2. javac编译文件时类似于linux下的make(c编译),对于某些源文件不会显式编译,而是在编译某些文件(包含其它源文件)时自动的查找并进行编译。


有点累,后续更新

33人推荐
随时随地看视频
慕课网APP

热门评论

吐槽一下,
吐槽两下,
吐槽三下。

认真看看啊。就是头晕晕

看不懂耶…还没学到这地步!

查看全部评论