Java考试重点合肥工业大学_第三章oop基础_合肥工业大学:Java语言程序设计_ppt_大学课件预览_高等教育资讯网...

第三章 面向对象基础

? 对象、消息和类

? 控制和使用对象

? 数组

3.1 对象、消息和类

抽象的计算机世界

class Car {

int color_number;

int door_number;

int speed;

void brake() { … }

void speedUp() {…};

void slowDown() { … }

}

计算机中

的对象的原型

现实生活

中的对象

? 数据抽象 (ADT)

对象的基本组成

? 实例变量:对象拥有什么

样的性质和特征?代表了

对象的状态。

? 方法:对象能做什么事?

是对象的功能单元。

对象 B

对象 A

message

什么是消息?

软件对象通过相互间传递消息来相互作用和

通信

一个消息由三部分组成,

1,接受消息的对象

2,要完成方法的名字

3,方法需要的参数

System.out.println(…..);

1 2 3

? 对象的例子

购物车

contents

addToCart()

remove()

checkOut()

Dog

size

breed

name

bark()

eat()

instance

variable

(state)

methods

(behavior)

instance

variables

methods

对象的类型 ----类

? 什么是类?

? 类不是对象,类是用于创建对象的 。

? 类是描述对象的“基本原型”,它定义一种对象所能拥有的

数据和能完成的操作,在面向对象的程序设计中,类是程序的

基本单元 。 variables

methods

从一个类可以产生

很多对象,这些对

象都属于这个类,

所有对象也称为 该

类的实例。

建立、使用第一个对象

? 需要两个类,

? 实际的类,用来创建具体对象

? 测试类( tester),拥有 main()方法,在这里创建

并访问对象。

1 编写实际的类

class Dog {

int size;

String breed;

String name;

void bark() {

System.out.println(“Ruff!”);

}

}

instance variables

a method

2 编写测试类

class DogTestDrive {

public static void main(String[] args) {

//Dog class test code

}

}

只有一个 main

方法

3 在测试类内,创建一个对象,并访问该对象的变量和方法。

class DogTestDrive {

public static void main(String[] args) {

Dog d=new Dog();

d.size=40;

d.bark();

}

}

创建一个 Dog对象

使用点运算符设置 Dog的大小

并调用它的 bark()方法 点运算符

3.2 控制和使用对象

? 与基本类型的变量不同,并不存在“对象变量”。

int a=20;

a++;

a(20)

内存

a(21)

内存

通过名字 a直接控制

变量(它所处的内

存)。

Dog d= new Dog();

d.bark();

变量 d是一个对象引用变量

堆内存

Dog

。。

d

?通过“对象引用”变量 (reference)可

以操纵对象。

byte

8

short

16

int

32

long

64

reference

引用本身也是值,它是可以访问对象

的方式的位码。

?一个对象引用变量存储“一种访问该对象的方式”的位

码。

对象创建的步骤

Dog myDog = new Dog();

1 2 3

1 声明一个引用变量

Dog myDog = new Dog();

告诉虚拟机为该变量分配空间,并命名为

myDog。该变量始终是 Dog类型的。

2 创建一个对象

Dog myDog=new Dog();

告诉虚拟机在堆中为新的 Dog对象分配空间

3 将该对象与引用连接起来。

Dog myDog=new Dog();

现在可以通过这个引用 myDog远程控制该 Dog对象

在堆中的对象

Book b= new Book();

Book c= new Book();

b

1

2

Book 对象

Book 对象

c

垃圾回收的

1

References,2

Objects,2

b

1

2

Book 对象

Book 对象

c

垃圾回收的

1

d

Book d= c ;

d并不引入任何新的对

象,只是把 c的值复制给

d,使得 c,d同时控制

同一个 book对象。

References,3

Objects,2

b

1

2

Book 对象

Book 对象

c

1

d

c = b;

同上,变量 b的值复制给 c,

现在 c与 b都指向了同一个

对象。

References,3

Objects,2

对象的存活和消亡

b

1

2

Book 对象

Book 对象

c

垃圾回收的

1 Book b= new Book();

Book c= new Book();

现在两个 Book对象在堆中

开始各自的生命期。

Active References,2

Reachable Objects,2

b

1

2

Book 对象

Book 对象

c

垃圾回收的

1

b = c;

现在对象 1被废弃,不

再有任何它的引用存在,

它将被回收。

Active References,2

Reachable Objects,1

b

1

2

Book 对象

Book 对象

c

垃圾回收的

1

c = null ;

null引用

null引用不再引用任何对

象。

当然 c仍然是引用变量,

仍然可以通过被赋值,

继续引用其他对象。

3.3 数组

? 在 Java里,数组也是对象

int[] nums;

nums=new int[7];

nums[0]=6;

nums[1]=22;

…,

1 声明一个 int数组变量,它是对数组对象的引用

2 创建一个数组对象,长度为 7,将控制赋值给变量 nums

3 为数组中的每个元素赋值

? 数组的元素由变量组成。

nums

int[]

6 22

整型数组可以存放整型的元素

? 对象数组--元素不是简单数据类型

Dog[] pets;

pets= new Dog[7];

pets[0]= new Dog();

pets[1]= new Dog();

1 声明一个 Dog数组变量

2 创建一个数组对象,长度为 7,将控制赋值给变量 pets

3 注意!每个元素只是一个 Dog引用变量,它的对象还没有创建

? 数组初始化

在数组定义时,可以进行初始化;也可以不进行

int [] a;

char[] b;

double[] c;

- a

- b

- c

表示值未定义

? 也可以不使用 new运算符进行初始化,方法是列举出数组的

元素,称为静态初始化(或显式初始化)。

int [] smallPrimes={2,3,5,7,11,13};

System.out.println(smallPrimes.length);

? 可以对数组进行重新初始化,而不必创建一个新的变量。

smallPrimes=new int[] {17,19,23,29,31,37};

相当于

int[] temp=new int[] {17,19,23,29,31,37};

smallPrimes=temp;

? 数组初始化 — 例

int[] number=new int[3];//变量 number引用了一个 int类型的数组。

double [] value=new double[3];//…

String[] str=new String[3];//…,数组元素是字符串对象

0 0 0 number

0.0 value 0.0 0.0

null null null str

在初始化时,如果没有指定数组元素的值,则所有的元素采用 默认值 初始化

访问数组元素

? 引用单个数组元素的方式是下标法或索引法。

? 在数组中每个元素都有自己的下标,首下标

从 0开始。

? 访问方式,

a[0]=0;

a[1]=1;

a[i+3]=4; 下标可以是非负整数,或者非负整数表达 式。

? 与其它语言不同,Java自动检查下标是否合法,如果认为某

下标非法,将生成一个 IndexOutOfBoundsException的异常,

阻止程序继续执行。

int [] a=new int[100];

a[-1]=0;//illegal

a[100]=0;//illegal

元素访问 ----为所有元素赋值

? 一旦创建了数组,其大小是不可以改变的。

利用”数组名,length”可以知道数组的大小。

? 利用循环语句为数组元素赋值,注意数组下

标从 0开始。

for(int i=0; i

a[i]=i;

? 数组的复制

如果把一个数组变量赋值给另外一个数组

变量,将使双方都指向同一组数据。

int[] d={1,2,3};

int [] e={4,5,6};

d=e;//d is {4,5,6}

问题,下面的程序有错吗

class Books {

String title;

}

class BooksTest{

public static void main(String[] args){

Books[] myBooks=new Books[2];

myBooks[0].title=,Java Cookbook”;

myBooks[1].title=,Thinking in Java”;

int i=0;

while(i

System.out.println(myBooks[i].title);

i++;

}

}

1

2

class Books {

String name;

public static void main(String[] args){

Books[] b=new Books[3];

int z=0;

while(z<4){

z=z+1;

b[z]=new Books();

b[z].name=“bile”;

if(z==1) b[z].name=“ff”;

if(z==2) b[z].name=“kk”;

System.out.println(b[z].name);

}

}

}

class Books {

int id=0;

public static void main(String[] args){

Books[] b=new Books[5];

int z=0;

while(z<3){

b[z]=new Books();

b[z].id=z;

z=z+1;

}

b[3]=b[1];

b[4]=b[1];

b[3]=null;

b[4]=b[0];

b[0]=b[3];

b[3]=b[2];

b[2]=b[0];

}

}

3 画出程序中元素与对

象之间的对应关系,

有的引用是空的,有

的对象被多个引用关

联。

你可能感兴趣的:(Java考试重点合肥工业大学)