多维数组
- 声二维数组
int[][] martix
或者int martix[][]
- 获取二维数组的长度:
x[i].length
—-获取x[i]的长度;x.length
—- x中元素个数
- 获取二维数组的长度:
- 锯齿数组:使用语法
new int[5][]
创建数组时,必须指定第一个下标 - 处理二维数组(嵌套的
for
循环常用于处理二维数组)
对象和类
- 为对象定义类
- 类为对象定义属性和行为
- 对象(object)代表现实世界中可以明确标识的一个实体。
- 一个对象的状态(state、property、attribute)是具有当前值的数据域来表示的
- 一个对象的行为(behavior、action)是由方法定义的
- 创建实例的过程就是实例化(instantiation)
- 使用构造方法构造对象
- 构造方法有以下三个特性
- 必须具备和所在类相同的名字
- 没有返回值类型,甚至连void也没有
- 在创建一个对象使用new操作符是调用。作用是初始化对象
- 构造方法有以下三个特性
通过引用变量访问对象:
- 引用变量和引用类型
- 类是一种引用类型(reference type),该类类型的变量都可以引用该类的一个实例
- 对象是通过对象引用变量(reference variable)来访问的,该变量包含对对象的引用 :
ClassName objectRefVar
- 在java中,数组被看作是对象。数组是用new操作符差功能键的。一个数组变量实际上是一个包含数组引用的变量
- 访问对象的数据和方法,使用
.
操作符访问和调用,也称为对象成员访问操作符
- objectRefVar.dataField
- objectRefVar.method(arguments)
- 匿名对象:创建一个对象,而并不将它明确的赋值给一个变量,这种方式创建的对象为匿名对象(anonymous object)如:
System.out.println(new Circle(5).getArea());
- 引用数据域和null值:引用类型数据域的默认值是null,数值类型数据域的默认值是0,boolean类型数据域默认值是false,char类型数据域默认值是’\u0000’
- 引用变量和引用类型
静态变量、常量和方法(静态变量被类中所有对象共享,静态方法不能访问基类中的实例成员)
- 静态变量将变量值存放在一个公共的内存地址
- 无需创建类的实例就可以调用静态方法
- final static 声明常量
- 可见性修饰符(用于确定一个类以及它的成员的可见性)
- 如果没有可见性修饰符,那么则默认类、方法和数据域是可以被同一个包中的任何一个类访问的。这称为包私有(package-private)或包内访问(package-access)
- public 表示可以被其他类访问
- private 限定方法和数据域只能在它自己的类中被访问
- private只能应用在类的成员上,public可以应用在类或类的成员上
- 数据域封装:将数据域设置为私有保护,并且类易于维护
- 访问器(
get
):public returnType getPropertyName()
- 修改器(
set
):public void setPropertyName(dataType propertyValue)
- 访问器(
- java只有一个参数传输方式,值传递(pass-by-value)
- 不可变对象和类
- 要使一个类是不可变的,它必须满足下面的要求:
- 所有数据域是私有的
- 没有修改器方法
- 没有一个返回指向可变数据域的引用的访问器
- 要使一个类是不可变的,它必须满足下面的要求:
- this 引用:用于引用类的隐藏数据域
面对对象的思考
类的抽象和封装
- 类抽象是(class abstract)是将类的实现和使用分离;
- 从类外可以访问的方法和数据域的集合及预期这些成员如何行为的描述,合称为类的合约(class’s contract)
- 类的使用者不需要知道类是如何实现的,实现的细节经过封装,对用户隐藏起来,这称为类的封装(class encapsulation)
- 类也称为抽象数据类型(Abstarct Data Type , ADT)
类的关系
- 关联
- 聚集和组合
- 聚集是关联的一种特殊形式,代表两个对象之间的归属关系
- 如果一个对象值归属于一个聚集对象,那么他和聚集对象之间的关键就称为组合
将基本数据类型值作为对象处理
- int => Integer
- float => Float
- double => double
- byte => Byte
- short => Short
- boolean => Boolean
- char => Character
基本类型和包装类类型之间的自动转换
- 将基本类型值转换为包装类对象的过程称为包装(boxing),相反的过程称为开箱(unboxing)