第二章----对象和类

2018-09-19  本文已影响10人  枫子夜
Java

1. 对象

名词解释

面向对象基本特性

一句话总结就是:对象具有状态行为和标识,内部数据即状态-方法即行为-存在内存中的唯一地址即标识

面向对象三个特性

权限控制 本包 子类 外部包
private X X X
default X X
protected X
public

对象的生命周期

对象在堆(heap)的内存池中动态的创建,这种方式只有运行时才能知道有多少对象需要被创建,他们的生命周期如何,以及它们的具体类型。

Java用NEW关键字来创建对象,Java提供垃圾回收的机制,它可以自动发现对象何时不再使用并继而销毁它。

异常处理

异常也是一种对象,它往往处于编程语言中,与程序正常执行路径并行,在发生错误时执行另一条路径。因为是完全另一条路径执行,所以不会干扰正常代码的运行。

Java从一开始就内置了异常处理,它要求你必须使用它,如果没有编写正确的异常处理代码,在编译时就会报错,这也是Java健壮性和安全性的表现。

并发编程

我们想把问题分割成多个可独立运行的任务,在程序中这些独立运行的部分叫做线程,这就是并发。

当多个线程访问同一个资源的时候有可能会有问题,我们必须使某个线程锁定某个资源,完成其任务后释放资源,这是线程锁也叫同步线程。

对象存储位置

寄存器:这是最快的储存区,位于处理器内部,我们无法用程序操控它也无法感知它的存在。

堆栈:位于RAM(随机访问储存器)中,堆栈指针下移分配内存上移释放内存,速度仅次于寄存区,Java系统必须知道所有项的生命周期以便用上下移动堆栈指针,虽然某些数据(对象引用)存储其中,但对象本身并不在其中。

堆:一种通用的内存池也存在RAM中,用于存放所有Java对象。不需要知道对象的生命周期,需要的时候直接NEW出一个对象堆堆自动分配空间,但当清理的时候却要花费点时间。

常量储存:常量因为是不会被改变的所以通常放在程序中,也可以放在ROM(只读存储器)中。

非RAM存储:一些对象完全存活于数据之外比如:流对象和持久化对象。这种对象通常存储在硬盘上。

特例基本类型:创建一个并非是引用的自动变量,直接存储在栈中,因此更加高效。

用引用操作对象:就像遥控器操纵电视机一样,没有电视机遥控器还可以存在只是不能发出任何消息,所以为了安全起见创建一个引用的时候就初始化一个对象。

2. 类

作用域

作用域决定了其内部变量的可见性和生命周期,用花括号表示。但用new创建的引用对象,它可以存活于作用域之外,虽然引用对象不能用了,但是new出来的对象还一直在内存中,Java通过垃圾回收机制最终回收无用的对象,finalize方法在垃圾回收之前调用,但不推荐使用。

用class关键字后面紧跟着新的类型名称,用来抽象某一类的对象。命名方式:首字母大写每个单词的首字母大写。

依赖(uses-a)(dependence)

聚合(has-a)(aggregation)

继承(is-a)(inheritance)

设计类时尽量做到高内聚低耦合

所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始。

属性

属性就是对象本身的一些描述字段,他可以是基本数据类型也可以是其他对象的引用。命名方式:首字母小写每个单词的首字母大写。

方法-参数-返回值

方法是对象行为的描述,可以有很多方法,利用传递的参数做业务处理返回想要得到的值。命名方式:首字母小写每个单词的首字母大写。

构造器:与类名相同,每个类可以有一个以上的构造器,没有返回值,伴随new关键字被调用。一个类中如果没有构造器,系统就会默认一个无参的构造器,数值型为0,布尔型为false,对象为null。

static

static类是不被允许的,通常使用内部类实现静态类。

static方法在类被加载后jvm就可以在运行时数据区读取到,因此不依赖创建对象就可以直接调用类名.方法名()。可以调用其他static方法,只能调用static数据,不能用super和this调用。

static变量在jvm加载的时候只会分配一块内存(节省内存),可以用类名.变量名来调用,private static表示私有的静态数据。而实例变量会每new一个对象就是一块内存。

static代码块通常叫做静态代码块,在类加载的时候被顺序执行,在构造方法之前执行。

final

final类不能被继承,里面的方法都是final的,没有继承所以就没有重写。

final方法不允许被覆盖,为了锁定其方法不被扩展或者为了提高效率。private方法无法继承因此private方法默认是final的(有争议)。

final变量一但被赋值就无法改变。

final参数可以运用但不能被改变。

final+static表示不能被改变的静态数据或方法也叫全局常量。

初始化数据

在声明中赋值

在初始化块中赋值

在构造方法中赋值

声明>初始化块>构造方法

包(package)

将类组织起来,一般用域名的逆序作为包名。如果一个类里面引用相同名字的外部类,可以通过inport关键字导入包路径来区分。

注释

单行(//)以及多行注释(/* */),注释内容Java虚拟机会自动过滤。

注释文档:JavaDoc可以生成html文档,以@符号为标识符如:@version。


不积小流,无以成江海

上一篇 下一篇

猜你喜欢

热点阅读