Presentation is loading. Please wait.

Presentation is loading. Please wait.

第四章 对象与类 掌握面向对象程序设计语言的特点 理解对象、类,类和对象的关系 掌握类,成员变量,方法的定义 掌握构造方法的定义

Similar presentations


Presentation on theme: "第四章 对象与类 掌握面向对象程序设计语言的特点 理解对象、类,类和对象的关系 掌握类,成员变量,方法的定义 掌握构造方法的定义"— Presentation transcript:

1 第四章 对象与类 掌握面向对象程序设计语言的特点 理解对象、类,类和对象的关系 掌握类,成员变量,方法的定义 掌握构造方法的定义
掌握访问权限修饰符如何影响成员的可见性? 掌握实例成员与类(静态)成员的区别 掌握包的定义、导入、及Java寻包机制

2 面向对象程序设计语言的特点 封装—将数据和处理数据方法组合在一起,并可以控制成员的可见性。
继承—拓展现存的类来生成专有类,继承原来类的状态和行为的能力 多态—同名的方法具有不同的功能.

3

4

5 类间关系 USE-A: B类操控了A类的成员,则称B类USE-A HAS-A: B类拥有A类的成员(包含关系)
IS-A: B类是A类的子类(继承关系)

6 对象(Object) 一切都是对象。 对象:1.属性(状态); 2.行为. 属性: 颜色,排量,价钱,速度,生产厂家…
一切都是对象。 对象:1.属性(状态); 行为. 属性: 颜色,排量,价钱,速度,生产厂家… 属性:姓名,生日,籍贯,学院 … 属性: 颜色,年龄,体长 行为: 启动,加速,减速,刹车,开灯,鸣笛… 行为: 跑,叫,踢,摇尾… 行为: 上课,运动,…

7 对象(续) 定义:对象是变量和相关方法的软件组合。 用变量来描述和维护其状态(属性) 用方法来实现其行为

8 类(Class) 类是描述对象的蓝图,它定义了一类对象所共有的变量和方法。 类的实例是对象。
E在面向对象的程序设计中,类是程序的基本单元,一个类是定义一种对象的模板。它规定了对象的数据结构,以及用于那些数据的操作。类还是创建对象的“工厂”。类确定了对象的能力。

9 类的定义 public class Student{//类的声明 private String name;//变量的定义 private int age; public String getName(){//方法的定义 return Name; } public Student(String n, int a){//构造函数 name = n; age = a; } }

10 类的声明 class MyClass { //成员变量和方法 } public 类是公共访问权限 abstract 类不能实例化 final
该类不能作为其它类的父类 Class NameOfClass 类的名字 extends Super 指明父类 implements Interface 声明实现哪些接口 { 类体 } 类体的定义

11 类的修饰符 public:说明类可以被其它类使用。如果没有public关键字,则定义的类只能被同一包中的类访问。
abstract:说明此类为抽象类,它不能被实例化,抽象类可以包含没有实现的抽象方法。抽象方法一般在其子类中被实现。 abstract class shape{ int color; abstract void draw(); } final:声明类不能够被继承,即该类不能是其它类的父类。

12 成员变量的声明 class Student{ String name; } acessLevel 表明变量的访问级别 static
表明这是一个类变量 final 表明变量是一个常量 transient 用来声明一个暂时性变量 volatile 声明一个共享变量 type name 变量的类型和名称

13 成员变量的修饰符 acessLevel:public, protected, package(无关键字), private之一。控制哪些类可以访问成员变量。 static:声明这是一个类变量,而非实例变量。类变量的值对于所有的实例来说都是相同的。 StaticVarDemo.java final:表明这个成员是一个常量。 final double PI= ;

14 构造函数(构造器) 变量的初始化是程序正确运行的保证。 构造函数是一种特殊的方法,它在一个对象创建后自动调用。用于初始化类的新对象。
构造函数与类同名,它们没有返回类型(不能声明为void),不能在构造器中使用return语句。 一个方法如果声明为void,他可以使用不带何参数的return语句。 构造函数由new操作符调用,new操作符返回新创建的对象。 Student stu = new Student(“张三”,18);

15 构造函数(续1) 每一个类至少有一个构造函数,如果一个类没有编写构造函数的代码,编译器会自动创建一个默认构造函数(没有参数的构造函数)。
class Rectangle{ int width,height; Rectangle(){} } class Rectangle{ int width,height; } 如果已经定义了一个构造函数,则编译器不会创建默认构造函数 Rectangle(int a, int b){ width=a; height=b; } //new Rectangle(); new Rectangle(3,4)

16 构造函数(续2) 创建对象必须调用类的构造函数来创建。 //new Retangle; new Retangle(); new Retangle(3,4); 构造函数可以重载,这样可以调用不同的构造函数来创建对象 Retangle(){ width=3; height=4; } Retangle(int a, int b){ width=a; height=b; } new Retangle(); new Retangle(7,8)

17 构造函数(续3) 若某个基本数据类型属于一个类成员,则即使不显式进行初始化,编译器会为其分配默认值。 对象成员被初始化成null 基本类型
boolean false int char ‘\u0000’(null) long 0L byte (byte)0 float 0.0f short (short)0 double 0.0D 对象成员被初始化成null

18 方法的声明与实现 class Rectangle{double w, len; double area(){return w*len};}
acessLevel 此方法的访问级别 static 这是一个类方法 abstract 未实现这个方法 final 方法不能被覆盖 native 方法以另一种语言实现 synchronized 运行方法需要一个监视器 returnType methodName 返回类型和方法名称 (paramlist) 参数列表 throws exceptions 这个方法抛出的异常

19 方法的修饰符 acessLevel:public, protected, package(无关键字), private之一。控制哪些类可以访问此方法。 static:声明这是一个类方法,而非实例方法。 注意:由于静态方法不是对类的实例进行操作,所以它只能访问和操作静态变量(类变量)。 类方法的调用格式:类名.静态方法名(参数列表) StaticMethodDemo.java final:方法不能被子类覆盖。 native:使用另一种语言实现的方法。 synchronized:并发线程常常调用在相同的数据上进行操作的方法,加上synchronized关键字可以确保线程安全地访问。使用这种机制可以保证对象不会被两个方法或代码同时访问。

20 returnType:声明返回值的数据类型。如果没有返回值,必须声明为void.(构造函数没有返回值)
methodName:方法名可以是任何合法的标识符。 (paramlist):方法的参数

21 方法的重载 重载指的是同一个类中有两个或多个方法具有相同名字,(但不同的参数表),从而他们作为该类的不同方法共同存在; 【例】 class Math{ static double abs(double x){ return x>=0?x:-x;} static int abs(int x){return x>=0?x:-x;} static long abs(long x){return x>0?x:-x;} }

22 方法的返回类型 方法必须声明返回类型。如无返回值则必须声明为void.
如果返回类型为基本类型,则返回值必须和返回类型相匹配。(注意:值域小的可以自动向值域大的转化,如声明返回类型为double, 则可以return 整型数据(byte, int, long等)。) 如果返回类型为引用类型,则返回值可以是该类,也可以是他的子类。

23 方法的参数传递 Java语言的参数是“按值传递”的. 当方法或构造函数被调用时,它们接受被传递的变量的引用。()
当参数是基本数据类型时,方法不能改变他们的值。 当参数是引用类型时,方法不能改变该对象的引用,但可以调用对象的方法并修改对象中的可访问成员。 【例】Param.java E在方法体中,最好不要通过传递的参数变量来改变参数的值或参数的引用,以免造成误解

24 方法体 方法体即为方法的实现部分。 方法中的局部变量没有默认值,必须初始化。 null用于指代某个还没有相应实例的对象。
null常用于对对象进行初始化。 【例】Stack stack = null;

25 创建对象 对象声明: 格式:类名 对象名; 【例】 Student stu;
创建对象: 格式:对象名=new 构造函数名([参数列表]); 【例】 stu=new Student(“张三”,18); Student stu=new Student(“张三”,18); 使用对象 对象名.成员变量; 对象名.成员方法;例:stu. getName();

26 实例成员与静态成员(类成员) 类的成员变量和方法必须声明为static. static int staticInt; static double sin(double){…} 所有的类变量都共享同一内存区域。类的成员变量和方法可以直接通过类名.类变量名,类名.方法名()来引用。在类方法里面不可以直接访问实例成员。 【例】StaticVarDemo.java StaticMethoDemo.java 没有static关键字的修饰成员都属于实例成员。实例成员必须通过类的对象来引用。

27 this关键字 this关键字代表当前对象。 this关键字一般用在以下几种情况
返回当前对象给方法 return this;

28 包(package) 包是一个相关类和接口的集合,它可以提供访问保护和名称空间管理。 //in the Graphic.java file
public abstract class Graphic{ } //in the Draggable.java file public interface Draggable{ } //in the Circle.java file public class Circle extends Graphic implements Draggagle{ } //in the Retangle.java file public class Retangle extends Graphic implements Draggagle{ }

29 命名包 格式:package 包名; 命名包的语句必须作为程序的第一行非注释语句。
为防止包名冲突,在给包命名时,通常使用公司的Internet域名( )的反序形式作为前缀。 package cn.edu.szu.wanlh.graphics; 相同名称的类存在于不同的包中时,通过全名来访问类的成员不会造成冲突。 全名由“包名”+“类名” 组成,相互之间用“.”隔开。 graphics.Rectangle a=new graphics.Rectangle(); java.awt.Rectangle b= java.awt.Rectangle();

30 包中类文件的存放 包名称中的每一个成分对应于一个子目录,应将字节码存在与包名称相对应的子目录中,子目录应位于CLASSPATH环境变量能够搜索到的目录下。 //Retangle.java package cn.edu.szu.graphics; public class Retagle{ … } cn\edu\szu\graphics\Retangle.class

31 包的使用 只有包中的public成员可以从定义它们的包外访问,要从包外访问public成员,可以采用如下三种方法: 导入一个类或接口。
导入整个包。 使用类的全名来引用它。

32 导入一个类或接口 语法: import pacakgeName.ClassName; 【例】 import java.awt.Graphics; import java.awt.Color; import graphics.Rectangle; import语句位于package语句(如果有的话)之后,第一个类的定义之前。 【例】 package graphics; import java.graphics.Rectangle; public class Square extends Rectangle{ … }

33 导入整个包 语法:import packageName.*; 【例】import java.awt.*; import java.awt.event.*; import语句中的‘*’号只能用于指定一个包中的所有public类或接口,不能用于匹配包中类的子集。 【例】//import java.awt.A*; //impot java.graphics.R*; import 只导入指定包中的类,并不会导入嵌套包中的类. Java运行时系统将自动导入以下三个完整的包: (1)默认包。 (2)java.lang (3)当前包

34 用全名来引用包中的成员 使用 包名.类名 或 包名.接口名 来引用其它包中的类或接口。 【例】 graphics.Rectangle rect1 = new graphics.Rectangle(); 【例1.2】 import java.applet.Applet; import java.awt.Graphics; public class HelloApplet extends Applet{ … } 可以改为: import java.awt.Graphics; public class HelloApplet extends java.applet.Applet{ … }

35 消除名称的二义性 如果两个包中的成员同名,而这两个包都被导入了,那么必须用全名来引用这些同名的成员。 【例】 import graphics.*; import java.awt.*; … //Rectangle rect = new Rectangle(); graphics.Rectangle rect1=new graphics.Rectangle(); java.awt.Rectangle rect2 =new java.awt.Rectangle(); …

36 编译器寻找包的机制 包中所有文件必须位于和包名对应的子目录中,这一子目录只要能从CLASSPATH环境变量所定义的所搜索的路径开始分支即可。
导入包中的文件时,需要的是编译后的.class文件,不是.java源文件 【例】 CLASSPATH=c:\java\bin;c:\java\lib\tools.jar;\java\lib\dt.jar;.;e:\wanlh\java; //packageDemo.java import graphics.*; … Rectangle rect1=new Rectangle(); …

37 类属于包时程序的编译和运行 编译-d选项. javac –d <dir> filename.java -d选项会在<dir>所指定的目录下按照包名来创建目录,并将编译后的的.class文件放在相应的目录下。<dir> 必须是CLASSPATH环境变量所指定的路径中的一个。 运行位于包中的java程序: java 包名.类名 【例】java graphics.Rectangle

38 用jar打包和jar文件的使用 如果包中有多个类或接口,在将这些类给其他人使用时,通常先用jar打包。命令格式如下:
jar –c[v]f[m] 目标文件.jar [MANIFEST.MF] 源文件(目录) jar文件其实就是zip文件 使用别人编写的类(网上下载的类)时,需要将.jar文件加入CLASSPATH环境变量。 运行jar文件 java –jar myapp.jar 如果是图形界面程序:则可双击jar文件运行

39 MANIFEST.MF Manifest-Version: 1.0 Created-By: 1.6.0_12 (Sun Microsystems Inc.) Main-Class: cn.edu.szu.wanlh.Win Name: MyApp Class-Path: lib/dom4j.jar

40 类的访问控制符 类的访问控制符: public:公共访问控制符 该类可以被其他所有的类访问和引用。 注意:每个文件只能包含一个public类。 (package):默认访问权限控制符 该类只可以同一包中的类访问和引用。

41 对象成员的访问控制 private:被private修饰的成员只能被它所定义的类访问。
在类中,该类的对象可以访问另一个同类型对象的private成员。 Class Alpha{ private int iAmPrivate; private bool isEqual(Alpha b){ if(this.iAmPrivate==b.iAmPrivate) return true; else return false; }

42 对象成员的访问控制(续) protect修饰的成员允许类本身,类的子类,以及相同包中的类访问这个成员。
public修饰的成员允许所有的类访问这个成员。 无关键字修饰的成员默认为包一级的访问控制。即允许类本身和相同包中的类和方法访问。

43 对象成员的访问控制(续二) 说明符 子类 所有类 private Y N 无说明符 protected public

44 选择访问级别 尽可能对成员使用最严格的访问级别,如果没有充分的理由,就使用private. 除了常量外,对所有成员尽量避免使用public.

45 设计类的原则 尽量将数据设为private. 尽量对变量进行初始化。
尽量减少类中的原始数据类型。如果类定义中有较多的原始数据类型的变量,最好将它们组合成一个新类,以新的类型变量充当数据类的成员。 类的功能尽量单一 取有意义的名字 private String name; private int age; private int salary; Employee


Download ppt "第四章 对象与类 掌握面向对象程序设计语言的特点 理解对象、类,类和对象的关系 掌握类,成员变量,方法的定义 掌握构造方法的定义"

Similar presentations


Ads by Google