25
第 3 第 第第第第第第第第(一) 基基基基基基基基基基基 3 基基基 基基基 基基基基基基基

第 3 讲 使用类和对象编程(一)

Embed Size (px)

DESCRIPTION

第 3 讲 使用类和对象编程(一). 基本数据类型和表达式的 3 个实例 创建类 成员变量与方法. 目标. 理解类和对象的基础知识 掌握类和对象的创建与应用. 实例 1. 请将一个四位正整数的个、十、百、千位 4 个数的和求出,并分别输出这四个数及它们的和。 分析:采用自顶向下、逐步求精的方法,先给出总的框架,再分析问题,然后逐步细化。 1 .总体步骤 (1) 输入一个四位数: 3587 ; (2) 分别求出个、十、百、千位,并将这四个数相加; (3) 输出四个数及和。 2 .逐步细化及分析. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 3 讲 使用类和对象编程(一)

第 3 讲 使用类和对象编程(一)

基本数据类型和表达式的 3 个实例创建类

成员变量与方法

Page 2: 第 3 讲 使用类和对象编程(一)

目标

•理解类和对象的基础知识

•掌握类和对象的创建与应用

Page 3: 第 3 讲 使用类和对象编程(一)

实例 1请将一个四位正整数的个、十、百、千位 4 个数的

和求出,并分别输出这四个数及它们的和。 •分析:采用自顶向下、逐步求精的方法,先给出总的框

架,再分析问题,然后逐步细化。1 .总体步骤

(1) 输入一个四位数: 3587 ;(2) 分别求出个、十、百、千位,并将这四个数相加;(3) 输出四个数及和。

2 .逐步细化及分析

定义 int 变量 s ,并赋值 3587 ;定义其它变量

根据数学运算方便,从高位开始,先分别求出四位上的数,再进行相加。千位 =s/1000 ,百位 =(s- 千位 *1000)/100 ,十位 =(s%100)/10 ,个位 =s%10 ,和 = 千位 + 百位 +十位 + 个位

Page 4: 第 3 讲 使用类和对象编程(一)

class Ex2_10{ public static void main(String args)

{int a,b,c,d,add;int s=3587;a=s/1000; b=(s-a*1000)/100;c=(s%100)/10; d=s%10;add=a+b+c+d;System.out.println(“ 千位数是” +a+“\t 百位数

是” +b);System.out.println(“ 十位数是” +c+“\t 个位数

是” +d);System.out.println(“ 这个四位” +s+“ 的各位数字的

和是 :”+add);}

}

Page 5: 第 3 讲 使用类和对象编程(一)

实例 2

从键盘输入一个整数,进行除法运算• 分析:从键盘输入一个整数,应用命令行参数的

方法可以获得。然而进行除法运算时,由于除数可能为零,会产生运行错误。需采用异常处理的方法解决。

• i=Integer.parseInt(args[0]) , 意思是将从命令行接收的第一个参数 ( 存放在数组元素args[0] 中 ) ,转换成整数送给变量 i 。

Page 6: 第 3 讲 使用类和对象编程(一)

import java.io.*;public class Ex2_11{ public static void main(String args[]) { int i; System.out.println("Input a integer or character:"); i=Integer.parseInt(args[0]); // 从命令行接收一个数 try {

int j=10/i; System.out.println("The input is \'"+i+"\'"+"j="+j);

} catch (ArithmeticException e) { System.out.println("the exception is :"+e); }

} }

Page 7: 第 3 讲 使用类和对象编程(一)

已知年利率、贷款年数和贷款金额,计算月偿还金额和总偿还金额,并将它们显示。

• 分析:1 .给出月偿还金额和总偿还金额的公式

月偿还金额 =( 贷款金额 * 月利率 )/(1-1/(1+月利率 ) 贷款年数 *12)

总偿还金额 = 月偿还金额 * 年数 *12

2 .由第 1 步看到,只要知道月利率即可求出结果。而已知年利率,因此,月利率 = 年利率 /12 。

3 .输入其他参数,代入第 1 步公式,计算出结果,最后输出结果。

实例 3

Page 8: 第 3 讲 使用类和对象编程(一)

public class Ex2_12{ public static void main(String args[]) { double nln; int years; double dj; System.out.println("Enter yearly rate,for example 2.25:"); nln=DefInput.readDouble(); double yln=nln/1200; System.out.println("Enter number of years,for example 8:"); years=DefInput.readInt(); System.out.println("Enter load ammount,for example 30000:"); dj=DefInput.readDouble(); double monthlyPay=dj*yln/(1-1/(Math.pow(1+yln,years*12))); double totalPay=monthlyPay*years*12; System.out.println("The monthly pay is:"+monthlyPay); System.out.println("The total pay is:"+totalPay); }}

程序中的定义的变量都必须进行说明,并根据存储的数据定义合适的类型。例如,年份为整型,金额定义为双精度型。从键盘上读入数据用 DefInput 类的方法 readInt() 和readDouble() 。但要保证 DefInput 类与 Ex2_12.class 类在一个目录下,才能这样用上面两个方法。

Page 9: 第 3 讲 使用类和对象编程(一)

import java.io.*;public class DefInput{ public static String readString(){ BufferedReader br=new BufferedReader(

new InputStreamReader(System.in),1); String string=“ ”; try{ string=br.readLine(); } catch(IOException ex){ System.out.println(ex);

} return string; } public static int readInt(){ return Integer.parseInt(readString()); } public static double readDouble(){ return Double.parseDouble(readString()); }}

Page 10: 第 3 讲 使用类和对象编程(一)

创建类 ( 引例 )

• 例题 2.1 “ 已知三角形的三条边,计算它的周长与面积。” 在其逐步求精的过程中,并没有很好的体现面向对象的特点,现将其作如下的修改。

• 分析:可以用逐步求精的方法逐步逼近问题的解决方案, Java 程序是由类组成的,可以将问题转化为“设计一个计算三角形周长与面积的类”。

Page 11: 第 3 讲 使用类和对象编程(一)

引例求精分析

(1) 定义一个计算三角形周长与面积的类 Triangle 引入标准类 声明类 确定三角形属性(定义三条

边) 计算周长(定义方法 sid

e ) 计算面积(定义方法 are

a )

(2) 定义主类 引用标准类 声明主类及 main 方

法 定义三条边的具体值 调用计算周长方法 调用计算面积方法 输出结果引例代码Ex3_1

Page 12: 第 3 讲 使用类和对象编程(一)

类的定义• 类是一种复杂数据类型,定义对象的结构。 • 将属性和方法封装在一个类中,在 Java 类中,属性以数据来

描述,方法用来实现对象的行为。 • 类的基本格式如下:

class 类名   // 类说明 {      // 花括号中为类体部分 < 类的数据 > < 类的方法 > }

• 数据值表示存储在每个对象里的结果,而方法则表示对象可以提供的功能。数据和方法统称为类的成员,数据成员也称为实例变量。

Page 13: 第 3 讲 使用类和对象编程(一)

• class 是关键字,用来定义类,命名与标识符的命名一致。

• 类名的单词首字母都大写,类名最好能体现类的功能或作用。 class People { int age; // 数据域 String name; // 数据域 int aged() { // 方法 ……}}

class Desk {   int length, width,

height; float price; float cubage(){ ……}}• Desk 类的属性是

length 、 width 、 height以及 price ,方法 cubage()应用变量length 、 width 、 height的数值计算体积。

类的定义举例

Page 14: 第 3 讲 使用类和对象编程(一)

类声明的完整格式[修饰符 ] class < 类名 > [extends< 父类名

>] [implements < 接口名 >] public :说明该类为公共类,它可以被本类和其他任何类

及成员方法所使用。 Java 程序中至多有一个类是 public类。

default :如果类名前不用修饰符,指的就是默认访问情形,只能被本类和同一个包中的其他类、接口及成员方法引用。

abstract :用该修饰符修饰的类称为抽象类。它是一种没有具体对象的概念类,是它所有公共子类的公共属性集合。

final :用该修饰符修饰的类不能有子类,称为最终类。

Page 15: 第 3 讲 使用类和对象编程(一)

成员变量的定义• 成员变量位于类体中,在方法定义之外所定义的变量,方法内定

义的变量称为方法变量或局部变量。成员变量和方法变量可以是简单类型,也可以是类等引用类型。

• 成员变量定义的格式为: [ 访问权限符 ] [static] [final] 类型 变量名 1[, 变量名 2,…]• 例如,类 ExampleClass 中定义了成员变量 d、 i 和 j,在类体

的方法 method() 中定义的变量 f、 g是方法变量。 class ExampleClass{ public double d; // 成员变量 d,i,j private int i,j;  method() { float f,g;    // 方法变量 f,g } }

Page 16: 第 3 讲 使用类和对象编程(一)

成员变量访问权限符

• public :由此修饰的成员变量称为公共变量,可以被程序中任何类访问。

• protected :由此修饰的成员变量可以被本类、同一包中该类的子类及其他包中的该类的子类访问。

• private :由此修饰的成员变量只能被本类访问。用private 修饰成员变量可以实现数据隐藏机制

• default :如果定义成员变量时,没有修饰符,它的访问属性就是默认的,表示它可以被本类及同一包中的其他类访问。

Page 17: 第 3 讲 使用类和对象编程(一)

• 除访问权限符外,成员变量还可以被 static 及final 修饰。 static 和 final 是非访问修饰符。

•被 static 修饰的成员变量称为静态变量。•被 final 修饰的叫最终变量,最终变量的值在程

序的整个执行过程中是不会改变的,即 Java语言中的符号常量。

• 最终变量通常被说明为 static 的。

static 和 final

Page 18: 第 3 讲 使用类和对象编程(一)

成员变量的初始化1. 成员变量定义后,如果没有赋值,则其初值是它的默认值。例如 byte 、 short 、 int 和long 类型的默认值为 0 , float的默认值为 0.0f , double 类型为的默认值为 0.0 , boolean 类型的默认值为 false , char 类型默认值为’ \u0000’ ,引用类型默认值为 null

2. 如果需要变量具有其他初值,那么可以在定义的同时给变量赋值

public class Circle{ float radius=10.0f; float getRadius() { return radius; } }public class Ex3_2 { public static void main(String[]

args){   Circle ci=new Circle();

// ci.radius=9.0f; System.out.println(ci.getRadius()); } }

Page 19: 第 3 讲 使用类和对象编程(一)

方法的创建• 方法操作类所定义的数据,以及提供对数据的访问的代码 .

• 创建方法的格式为:[修饰符 ][abstract][static][final] 返回值类型 方法名

([ 参数列表 ]) // 方法头{ 方法体}

• 方法体可以包含一个或多个语句,每个方法执行一项任务。每个方法只有一个名称,通过使用这个名称,方法才能被调用。

• 修饰符是可选的,与成员变量的修饰符相同 ,功能类似。 abstract 、 static 和 final 分别指所修饰的方法为抽象方法、静态方法和最终方法。

Page 20: 第 3 讲 使用类和对象编程(一)

[修饰符 ][abstract][static][final] 返回值类型 方法名 ([ 参数列表 ]) // 方法头

{ 方法体 }•返回值类型是方法返回值的数据类型。若方法不返回任何值,则返回值类型为关键字 void 。方法的参数列表是可选的,如果没有,说明没有直接调用的参数。参数列表也称为形式参数,简称形参。

• 如果希望方法有返回值,则在方法的最后一条语句使用return ,终止方法并返回该方法的调用者。在返回值为void 的方法中,如果有 return语句,则执行到这条语句后方法会终止。

方法的创建(续)

Page 21: 第 3 讲 使用类和对象编程(一)

方法的调用• 创建的方法指明了方法的作用,通过调用方法,方法才能发挥

它的作用。调用方法的途径有两种:( 1 )如果方法有返回值,对方法的调用通常就当作处理一个

值,通过点 . 运算符实现。 调用格式为:对象名 .方法名 ([ 参数列表 ]) 例如,类 Triangle 的方法 setSide() ,设置三角形的三边,

结果为给变量 d1 、 d2 和 d3 赋值,语句 tri.setSide(a,b,c); 意思是对象 tri 调用方法 setSide() 。

( 2 )直接使用方法的值,不再返回给另一个变量。 System.out.println(tri.area());

变量名

Page 22: 第 3 讲 使用类和对象编程(一)

成员变量和方法的两种形式

• 类体中定义的成员变量和方法均有两种形式: 用 static 修饰的称为类变量和类方法,也常称之为静态变量和静态方法;

未用 static 修饰的变量和方法称为实例变量和实例方法。

• 类的每一个对象都拥有自己的实例变量,每个对象的变量拥有不同的内存空间,所以每个对象的实例变量也是不同的。

Page 23: 第 3 讲 使用类和对象编程(一)

对象占用内存图示• Triangle t1=new Triangle();• Triangle t2=new Triangle();

ci

实例变量实例方法

sj

实例变量实例方法

静态变量静态方法

Page 24: 第 3 讲 使用类和对象编程(一)

• 实例变量和实例方法是指每个变量和方法唯一的与一个对象相关联,即在创建某个对象时,同时为这个对象创建所有实例变量的副本,关联所有的实例方法。不同的对象对应不同的实例变量副本,即不同的内存空间。

•静态变量不再重新分配内存,所有的对象共享静态变量,即所有对象的静态变量使用相同的内存空间。

•当类体被装入内存时,静态方法就被分配了内存单元,同时分配了相应的入口地址,从而静态方法可以被类创建的任何对象调用执行,也可以在未创建对象时直接通过类名调用。

成员变量和方法的两种形式(续)

Page 25: 第 3 讲 使用类和对象编程(一)

小结

• 基本数据类型和表达式的 3 个实例• 类的定义• 对象的创建• 成员变量和成员方法