Download - 第 3 讲 使用类和对象编程(一)
第 3 讲 使用类和对象编程(一)
基本数据类型和表达式的 3 个实例创建类
成员变量与方法
目标
•理解类和对象的基础知识
•掌握类和对象的创建与应用
实例 1请将一个四位正整数的个、十、百、千位 4 个数的
和求出,并分别输出这四个数及它们的和。 •分析:采用自顶向下、逐步求精的方法,先给出总的框
架,再分析问题,然后逐步细化。1 .总体步骤
(1) 输入一个四位数: 3587 ;(2) 分别求出个、十、百、千位,并将这四个数相加;(3) 输出四个数及和。
2 .逐步细化及分析
定义 int 变量 s ,并赋值 3587 ;定义其它变量
根据数学运算方便,从高位开始,先分别求出四位上的数,再进行相加。千位 =s/1000 ,百位 =(s- 千位 *1000)/100 ,十位 =(s%100)/10 ,个位 =s%10 ,和 = 千位 + 百位 +十位 + 个位
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);}
}
实例 2
从键盘输入一个整数,进行除法运算• 分析:从键盘输入一个整数,应用命令行参数的
方法可以获得。然而进行除法运算时,由于除数可能为零,会产生运行错误。需采用异常处理的方法解决。
• i=Integer.parseInt(args[0]) , 意思是将从命令行接收的第一个参数 ( 存放在数组元素args[0] 中 ) ,转换成整数送给变量 i 。
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); }
} }
已知年利率、贷款年数和贷款金额,计算月偿还金额和总偿还金额,并将它们显示。
• 分析:1 .给出月偿还金额和总偿还金额的公式
月偿还金额 =( 贷款金额 * 月利率 )/(1-1/(1+月利率 ) 贷款年数 *12)
总偿还金额 = 月偿还金额 * 年数 *12
2 .由第 1 步看到,只要知道月利率即可求出结果。而已知年利率,因此,月利率 = 年利率 /12 。
3 .输入其他参数,代入第 1 步公式,计算出结果,最后输出结果。
实例 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 类在一个目录下,才能这样用上面两个方法。
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()); }}
创建类 ( 引例 )
• 例题 2.1 “ 已知三角形的三条边,计算它的周长与面积。” 在其逐步求精的过程中,并没有很好的体现面向对象的特点,现将其作如下的修改。
• 分析:可以用逐步求精的方法逐步逼近问题的解决方案, Java 程序是由类组成的,可以将问题转化为“设计一个计算三角形周长与面积的类”。
引例求精分析
(1) 定义一个计算三角形周长与面积的类 Triangle 引入标准类 声明类 确定三角形属性(定义三条
边) 计算周长(定义方法 sid
e ) 计算面积(定义方法 are
a )
(2) 定义主类 引用标准类 声明主类及 main 方
法 定义三条边的具体值 调用计算周长方法 调用计算面积方法 输出结果引例代码Ex3_1
类的定义• 类是一种复杂数据类型,定义对象的结构。 • 将属性和方法封装在一个类中,在 Java 类中,属性以数据来
描述,方法用来实现对象的行为。 • 类的基本格式如下:
class 类名 // 类说明 { // 花括号中为类体部分 < 类的数据 > < 类的方法 > }
• 数据值表示存储在每个对象里的结果,而方法则表示对象可以提供的功能。数据和方法统称为类的成员,数据成员也称为实例变量。
• 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的数值计算体积。
类的定义举例
类声明的完整格式[修饰符 ] class < 类名 > [extends< 父类名
>] [implements < 接口名 >] public :说明该类为公共类,它可以被本类和其他任何类
及成员方法所使用。 Java 程序中至多有一个类是 public类。
default :如果类名前不用修饰符,指的就是默认访问情形,只能被本类和同一个包中的其他类、接口及成员方法引用。
abstract :用该修饰符修饰的类称为抽象类。它是一种没有具体对象的概念类,是它所有公共子类的公共属性集合。
final :用该修饰符修饰的类不能有子类,称为最终类。
成员变量的定义• 成员变量位于类体中,在方法定义之外所定义的变量,方法内定
义的变量称为方法变量或局部变量。成员变量和方法变量可以是简单类型,也可以是类等引用类型。
• 成员变量定义的格式为: [ 访问权限符 ] [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 } }
成员变量访问权限符
• public :由此修饰的成员变量称为公共变量,可以被程序中任何类访问。
• protected :由此修饰的成员变量可以被本类、同一包中该类的子类及其他包中的该类的子类访问。
• private :由此修饰的成员变量只能被本类访问。用private 修饰成员变量可以实现数据隐藏机制
• default :如果定义成员变量时,没有修饰符,它的访问属性就是默认的,表示它可以被本类及同一包中的其他类访问。
• 除访问权限符外,成员变量还可以被 static 及final 修饰。 static 和 final 是非访问修饰符。
•被 static 修饰的成员变量称为静态变量。•被 final 修饰的叫最终变量,最终变量的值在程
序的整个执行过程中是不会改变的,即 Java语言中的符号常量。
• 最终变量通常被说明为 static 的。
static 和 final
成员变量的初始化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()); } }
方法的创建• 方法操作类所定义的数据,以及提供对数据的访问的代码 .
• 创建方法的格式为:[修饰符 ][abstract][static][final] 返回值类型 方法名
([ 参数列表 ]) // 方法头{ 方法体}
• 方法体可以包含一个或多个语句,每个方法执行一项任务。每个方法只有一个名称,通过使用这个名称,方法才能被调用。
• 修饰符是可选的,与成员变量的修饰符相同 ,功能类似。 abstract 、 static 和 final 分别指所修饰的方法为抽象方法、静态方法和最终方法。
[修饰符 ][abstract][static][final] 返回值类型 方法名 ([ 参数列表 ]) // 方法头
{ 方法体 }•返回值类型是方法返回值的数据类型。若方法不返回任何值,则返回值类型为关键字 void 。方法的参数列表是可选的,如果没有,说明没有直接调用的参数。参数列表也称为形式参数,简称形参。
• 如果希望方法有返回值,则在方法的最后一条语句使用return ,终止方法并返回该方法的调用者。在返回值为void 的方法中,如果有 return语句,则执行到这条语句后方法会终止。
方法的创建(续)
方法的调用• 创建的方法指明了方法的作用,通过调用方法,方法才能发挥
它的作用。调用方法的途径有两种:( 1 )如果方法有返回值,对方法的调用通常就当作处理一个
值,通过点 . 运算符实现。 调用格式为:对象名 .方法名 ([ 参数列表 ]) 例如,类 Triangle 的方法 setSide() ,设置三角形的三边,
结果为给变量 d1 、 d2 和 d3 赋值,语句 tri.setSide(a,b,c); 意思是对象 tri 调用方法 setSide() 。
( 2 )直接使用方法的值,不再返回给另一个变量。 System.out.println(tri.area());
变量名
成员变量和方法的两种形式
• 类体中定义的成员变量和方法均有两种形式: 用 static 修饰的称为类变量和类方法,也常称之为静态变量和静态方法;
未用 static 修饰的变量和方法称为实例变量和实例方法。
• 类的每一个对象都拥有自己的实例变量,每个对象的变量拥有不同的内存空间,所以每个对象的实例变量也是不同的。
对象占用内存图示• Triangle t1=new Triangle();• Triangle t2=new Triangle();
ci
实例变量实例方法
sj
实例变量实例方法
静态变量静态方法
• 实例变量和实例方法是指每个变量和方法唯一的与一个对象相关联,即在创建某个对象时,同时为这个对象创建所有实例变量的副本,关联所有的实例方法。不同的对象对应不同的实例变量副本,即不同的内存空间。
•静态变量不再重新分配内存,所有的对象共享静态变量,即所有对象的静态变量使用相同的内存空间。
•当类体被装入内存时,静态方法就被分配了内存单元,同时分配了相应的入口地址,从而静态方法可以被类创建的任何对象调用执行,也可以在未创建对象时直接通过类名调用。
成员变量和方法的两种形式(续)
小结
• 基本数据类型和表达式的 3 个实例• 类的定义• 对象的创建• 成员变量和成员方法