1 / 25

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

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3讲 使用类和对象编程(一) 基本数据类型和表达式的3个实例 创建类 成员变量与方法

  2. 目标 • 理解类和对象的基础知识 • 掌握类和对象的创建与应用

  3. 实例1 请将一个四位正整数的个、十、百、千位4个数的和求出,并分别输出这四个数及它们的和。 • 分析:采用自顶向下、逐步求精的方法,先给出总的框架,再分析问题,然后逐步细化。 1.总体步骤 (1) 输入一个四位数:3587; (2) 分别求出个、十、百、千位,并将这四个数相加; (3) 输出四个数及和。 2.逐步细化及分析 定义int变量s,并赋值3587;定义其它变量 根据数学运算方便,从高位开始,先分别求出四位上的数,再进行相加。千位=s/1000,百位=(s-千位*1000)/100,十位=(s%100)/10,个位=s%10,和=千位+百位+十位+个位

  4. 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); } }

  5. 实例2 从键盘输入一个整数,进行除法运算 • 分析:从键盘输入一个整数,应用命令行参数的方法可以获得。然而进行除法运算时,由于除数可能为零,会产生运行错误。需采用异常处理的方法解决。 • i=Integer.parseInt(args[0]), 意思是将从命令行接收的第一个参数(存放在数组元素args[0]中),转换成整数送给变量i。

  6. 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); } } }

  7. 实例3 已知年利率、贷款年数和贷款金额,计算月偿还金额和总偿还金额,并将它们显示。 • 分析: 1.给出月偿还金额和总偿还金额的公式 • 月偿还金额=(贷款金额*月利率)/(1-1/(1+月利率)贷款年数*12) • 总偿还金额=月偿还金额*年数*12 2.由第1步看到,只要知道月利率即可求出结果。而已知年利率,因此,月利率=年利率/12 。 3.输入其他参数,代入第1步公式,计算出结果,最后输出结果。

  8. 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类在一个目录下,才能这样用上面两个方法。

  9. 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()); } }

  10. 创建类(引例) • 例题2.1 “已知三角形的三条边,计算它的周长与面积。” 在其逐步求精的过程中,并没有很好的体现面向对象的特点,现将其作如下的修改。 • 分析:可以用逐步求精的方法逐步逼近问题的解决方案,Java程序是由类组成的,可以将问题转化为“设计一个计算三角形周长与面积的类”。

  11. (1)定义一个计算三角形周长与面积的类Triangle 引入标准类 声明类 确定三角形属性(定义三条边) 计算周长(定义方法side) 计算面积(定义方法area) (2) 定义主类 引用标准类 声明主类及main方法 定义三条边的具体值 调用计算周长方法 调用计算面积方法 输出结果 引例求精分析 引例代码Ex3_1

  12. 类的定义 • 类是一种复杂数据类型,定义对象的结构。 • 将属性和方法封装在一个类中,在Java类中,属性以数据来描述,方法用来实现对象的行为。 • 类的基本格式如下: class 类名   //类说明 {//花括号中为类体部分 <类的数据> <类的方法> } • 数据值表示存储在每个对象里的结果,而方法则表示对象可以提供的功能。数据和方法统称为类的成员,数据成员也称为实例变量。

  13. 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的数值计算体积。 类的定义举例

  14. 类声明的完整格式 [修饰符] class <类名> [extends<父类名>] [implements <接口名>] • public:说明该类为公共类,它可以被本类和其他任何类及成员方法所使用。Java程序中至多有一个类是public类。 • default:如果类名前不用修饰符,指的就是默认访问情形,只能被本类和同一个包中的其他类、接口及成员方法引用。 • abstract:用该修饰符修饰的类称为抽象类。它是一种没有具体对象的概念类,是它所有公共子类的公共属性集合。 • final:用该修饰符修饰的类不能有子类,称为最终类。

  15. 成员变量的定义 • 成员变量位于类体中,在方法定义之外所定义的变量,方法内定义的变量称为方法变量或局部变量。成员变量和方法变量可以是简单类型,也可以是类等引用类型。 • 成员变量定义的格式为: [访问权限符] [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 } }

  16. 成员变量访问权限符 • public:由此修饰的成员变量称为公共变量,可以被程序中任何类访问。 • protected:由此修饰的成员变量可以被本类、同一包中该类的子类及其他包中的该类的子类访问。 • private:由此修饰的成员变量只能被本类访问。用private修饰成员变量可以实现数据隐藏机制 • default:如果定义成员变量时,没有修饰符,它的访问属性就是默认的,表示它可以被本类及同一包中的其他类访问。

  17. static和final • 除访问权限符外,成员变量还可以被static及final修饰。static 和final是非访问修饰符。 • 被static修饰的成员变量称为静态变量。 • 被final修饰的叫最终变量,最终变量的值在程序的整个执行过程中是不会改变的,即Java语言中的符号常量。 • 最终变量通常被说明为static的。

  18. 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()); } } 成员变量的初始化

  19. 方法的创建 • 方法操作类所定义的数据,以及提供对数据的访问的代码. • 创建方法的格式为: [修饰符][abstract][static][final] 返回值类型 方法名([参数列表]) //方法头 { 方法体} • 方法体可以包含一个或多个语句,每个方法执行一项任务。每个方法只有一个名称,通过使用这个名称,方法才能被调用。 • 修饰符是可选的,与成员变量的修饰符相同 ,功能类似。abstract、static和final分别指所修饰的方法为抽象方法、静态方法和最终方法。

  20. 方法的创建(续) [修饰符][abstract][static][final] 返回值类型 方法名([参数列表]) //方法头 { 方法体 } • 返回值类型是方法返回值的数据类型。若方法不返回任何值,则返回值类型为关键字void。方法的参数列表是可选的,如果没有,说明没有直接调用的参数。参数列表也称为形式参数,简称形参。 • 如果希望方法有返回值,则在方法的最后一条语句使用return,终止方法并返回该方法的调用者。在返回值为void的方法中,如果有return语句,则执行到这条语句后方法会终止。

  21. 方法的调用 • 创建的方法指明了方法的作用,通过调用方法,方法才能发挥它的作用。调用方法的途径有两种: (1)如果方法有返回值,对方法的调用通常就当作处理一个值,通过点 . 运算符实现。 • 调用格式为:对象名.方法名([参数列表]) • 例如,类Triangle的方法setSide(),设置三角形的三边,结果为给变量d1、d2和d3赋值,语句 tri.setSide(a,b,c); 意思是对象tri调用方法setSide()。 (2)直接使用方法的值,不再返回给另一个变量。 System.out.println(tri.area()); 变量名

  22. 成员变量和方法的两种形式 • 类体中定义的成员变量和方法均有两种形式: • 用static修饰的称为类变量和类方法,也常称之为静态变量和静态方法; • 未用static修饰的变量和方法称为实例变量和实例方法。 • 类的每一个对象都拥有自己的实例变量,每个对象的变量拥有不同的内存空间,所以每个对象的实例变量也是不同的。

  23. 对象占用内存图示 静态变量 静态方法 • Triangle t1=new Triangle(); • Triangle t2=new Triangle(); 实例变量 实例方法 ci 实例变量 实例方法 sj

  24. 成员变量和方法的两种形式(续) • 实例变量和实例方法是指每个变量和方法唯一的与一个对象相关联,即在创建某个对象时,同时为这个对象创建所有实例变量的副本,关联所有的实例方法。不同的对象对应不同的实例变量副本,即不同的内存空间。 • 静态变量不再重新分配内存,所有的对象共享静态变量,即所有对象的静态变量使用相同的内存空间。 • 当类体被装入内存时,静态方法就被分配了内存单元,同时分配了相应的入口地址,从而静态方法可以被类创建的任何对象调用执行,也可以在未创建对象时直接通过类名调用。

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

More Related