版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LOGO第第3章章Java与面向对象技术与面向对象技术广东工业大学计算机学院广东工业大学计算机学院广东工业大学计算机学院广东工业大学计算机学院2本章内容本章内容v3.1 面向对象编程基础面向对象编程基础 v3.2 类的编程实现类的编程实现v3.3 对象的使用对象的使用v3.4 包包v3.5 文档注释文档注释v3.6 类设计技巧类设计技巧v3.7 类的继承实例类的继承实例v3.8 多态多态广东工业大学计算机学院广东工业大学计算机学院3什么是面向对象什么是面向对象v 面向对象面向对象 将现实世界的复杂事物抽象为一个个对象将现实世界的复杂事物抽象为一个个对象 如如: 灯泡灯泡v 对象的二要素对象的二
2、要素 状态和行为状态和行为 如:灯泡的状态有:亮或灭,功率,电压如:灯泡的状态有:亮或灭,功率,电压 行为有:开、关行为有:开、关v 软件对象软件对象 对对现实对象进行模拟,状态用变量表示,行为现实对象进行模拟,状态用变量表示,行为用方法实现。用方法实现。 由数据由数据(变量变量)和相关方法组成的软件包。和相关方法组成的软件包。 v 面向对象程序设计面向对象程序设计以对象作为编程基础的程序设计方法。以对象作为编程基础的程序设计方法。广东工业大学计算机学院广东工业大学计算机学院4面向对象的基本概念(面向对象的基本概念(1)class Car int color_number; int door_
3、number; int speed; void brake() ; void speedUp() ; void slowDown() ; Car类类类类 :对有共同特点的软件对象的抽象。对有共同特点的软件对象的抽象。 货车货车 小轿车小轿车 公交车公交车抽象抽象广东工业大学计算机学院广东工业大学计算机学院5v 类类是描述一类对象的是描述一类对象的“基本原型基本原型”,它定义一种,它定义一种对象所拥有的数据和能完成的操作对象所拥有的数据和能完成的操作,在面向对象在面向对象的程序设计中的程序设计中,类是程序的基本单元。类是程序的基本单元。v对象对象在程序中的是类的一个实例。类产生实例的在程序中的是
4、类的一个实例。类产生实例的过程充分体现了类的可重用性。过程充分体现了类的可重用性。面向对象的基本概念(面向对象的基本概念(2)广东工业大学计算机学院广东工业大学计算机学院6广东工业大学计算机学院广东工业大学计算机学院6v 封装封装把对象的所有组成部分组合在一起,并使用把对象的所有组成部分组合在一起,并使用方法将类的数据隐藏起来,控制用户对类的修改方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。和访问数据的程度。封装定义程序如封装定义程序如何引用对象的数何引用对象的数据据 方法方法数据数据对象对象B私有数据私有数据 方法方法对象对象A公有数据公有数据面向对象基本概念(面向对象基本概念
5、(3)广东工业大学计算机学院广东工业大学计算机学院7v 一个新类可以通过继承已有类的数据和方法的基一个新类可以通过继承已有类的数据和方法的基础上,添加部分新的数据和方法得到,这种性质础上,添加部分新的数据和方法得到,这种性质称为类的称为类的继承性。继承性。v用继承方法得到的新类称为原类的用继承方法得到的新类称为原类的子类子类, 而原类而原类对子类而言成为对子类而言成为超类超类。父类与子类是一般与特殊。父类与子类是一般与特殊的关系。的关系。面向对象的基本概念(面向对象的基本概念(4)广东工业大学计算机学院广东工业大学计算机学院8广东工业大学计算机学院广东工业大学计算机学院8面向对象基本概念(面向
6、对象基本概念(5)v重载重载 一个类可包含多个名字相同的方法,但一个类可包含多个名字相同的方法,但这些方法的参数不同。这些方法的参数不同。类类void show(int int_num)void show(double double_num)void show(int int_ um, float float_um)1231.23123,1.23广东工业大学计算机学院广东工业大学计算机学院9面向对象基本概念(面向对象基本概念(6)v多态性多态性:允许将父对象设置成为一个或多个它的:允许将父对象设置成为一个或多个它的子类对象相等,在赋值之后,父对象就可以根据子类对象相等,在赋值之后,父对象就可以
7、根据当前赋值给它的子类对象的特性以不同的方式运当前赋值给它的子类对象的特性以不同的方式运作的特性。作的特性。EmployeeManagerTeamLeaderProgrammergetSalary( )getSalary( )getSalary( )Employee e;Manager m;TeamLeader t;e=m;e.getsalary();getSalary( )广东工业大学计算机学院广东工业大学计算机学院10本章内容本章内容v3.1 面向对象编程基础面向对象编程基础 v3.2 类的编程实现类的编程实现v3.3 对象的使用对象的使用v3.4 包包v3.5 文档注释文档注释v3.6
8、类设计技巧类设计技巧v3.7 类的继承实例类的继承实例v3.8 多态多态广东工业大学计算机学院广东工业大学计算机学院11类定义类定义Java中,类定义的基本语法如下:中,类定义的基本语法如下:Specifier class ClassName extends SuperClassName implements InterfaceName /类的域(成员变量)定义类的域(成员变量)定义 /类的方法定义类的方法定义 例如例如:public class School private ArrayList students; private void addStudent(Person person)
9、students.add(person); 广东工业大学计算机学院广东工业大学计算机学院12域的定义域的定义域域(成员变量成员变量/属性属性/字段字段)定义的方式如下:定义的方式如下:Specifier type variableName;例如:例如:int x = 3, y; /定义了整型变量定义了整型变量x和和ypublic Date today; /定义了定义了Date型类变量型类变量todayprivate Char m; /定义了字符型数组变量定义了字符型数组变量m广东工业大学计算机学院广东工业大学计算机学院13方法的定义方法的定义 方法由方法头和方法体构成,方法定义的语法如下:方法
10、由方法头和方法体构成,方法定义的语法如下:Specifier static returnTypereturnType methodNamemethodName( (parameterListparameterList ) ) /method body例如:例如:private String getName(Person person) return ;public static void main(String args) 广东工业大学计算机学院广东工业大学计算机学院14public class Person / 方法定义方法定义 public String getName( ) return
11、 name; public void setName(String s) name = s; public double getIncome( ) return salary; public void setIncome(double d) salary = d; / 域定义域定义 private String name; /姓名姓名 private int sex; /性别性别 private double salary; /薪水薪水 private int age; /年龄年龄 类定义举例类定义举例一种常用的编程风格是:一种常用的编程风格是:1. 方法方法位于位于域域的前面的前面2.公有公
12、有(public)方法方法位于位于所有所有方法方法的最前面的最前面3. 一般情况下,将成员一般情况下,将成员变量定义为变量定义为private广东工业大学计算机学院广东工业大学计算机学院15final的类成员变量的类成员变量v被定义为被定义为final的类成员变量在对象初始化之后,的类成员变量在对象初始化之后,不会再被修改。不会再被修改。例如:例如:public class Employee private final String name;v注意:注意:final修饰符大多应用于基本数据类型修饰符大多应用于基本数据类型(primitive)的数据,或者不可变的数据,或者不可变(immuta
13、ble)类的域。如果类中每个方法都不类的域。如果类中每个方法都不会改变对象的状态,这种类就是会改变对象的状态,这种类就是不可变类不可变类。广东工业大学计算机学院广东工业大学计算机学院16final应用于可变对象有可能造成混乱应用于可变对象有可能造成混乱v对于可变的类,使用对于可变的类,使用final修饰符有可能对读者造修饰符有可能对读者造成混乱。成混乱。例如例如:public class Employee private final Date hireDate;v此语句仅仅意味着定义了一个此语句仅仅意味着定义了一个Date类型的引用类型的引用hireDate,该引用在,该引用在Employee
14、对象初始化之对象初始化之后不能改变;后不能改变;v但不是指该引用指向的但不是指该引用指向的hireDate对象的状态不对象的状态不能发生改变。能发生改变。广东工业大学计算机学院广东工业大学计算机学院17静态静态(static)域(域(1)v如果将某个类中的如果将某个类中的域域定义为定义为static,那么该类的,那么该类的所有对象都会共享这个所有对象都会共享这个域域。v例如:例如:假定需要给每一个雇员赋予一个唯一的标假定需要给每一个雇员赋予一个唯一的标识码,可对识码,可对Employee类添加一个实例域类添加一个实例域id和一和一个静态域个静态域nextId。public class Empl
15、oyee private int id; private static int nextId = 1;广东工业大学计算机学院广东工业大学计算机学院18静态静态(static)域(域(2)v则每个雇员对象都有一个自己的则每个雇员对象都有一个自己的Id域,但这个类域,但这个类的所有实例却共享一个的所有实例却共享一个nextId域。域。 nextId域域有何用途?有何用途?public void setId() id = nextId; nextId+;v假定为假定为harry雇员设定标识码:雇员设定标识码:harry.setId();那么那么harry对象的对象的Id域将被设置,并且静态域域将被设
16、置,并且静态域nextId的值加的值加1.nextId的用途是:的用途是:指指示下一个雇员应当分示下一个雇员应当分配的配的ID。广东工业大学计算机学院广东工业大学计算机学院19静态域的注意事项静态域的注意事项v 1. 静态静态(static)域不同于域不同于final域。静态不等于不变,静域。静态不等于不变,静态域在程序运行过程中态域在程序运行过程中可以改变值可以改变值。v 2. 静态域在静态域在装载类的时候被分配内存并初始化装载类的时候被分配内存并初始化,类只能,类只能被装载一次,所以静态变量在内存中只有一个拷贝,即使被装载一次,所以静态变量在内存中只有一个拷贝,即使没有对象被建立,该静态域
17、仍然存在;所有对象都共享一没有对象被建立,该静态域仍然存在;所有对象都共享一个静态域。个静态域。 区别区别:非静态域在创建对象时被分配内存并初始化,所以:非静态域在创建对象时被分配内存并初始化,所以每个对象都有各自的非静态域每个对象都有各自的非静态域v 3. 静态域用静态域用类名类名访问,而不是用对象访问。访问,而不是用对象访问。广东工业大学计算机学院广东工业大学计算机学院20常量常量v静态常量静态常量(类常量类常量):public class Math public static final double PI = ; 在程序中,可以通过在程序中,可以通过Math.PI来访问该常量。来访问该
18、常量。广东工业大学计算机学院广东工业大学计算机学院21静态变量和实例变量示例静态变量和实例变量示例public class Count public Count() counter+; serialNumber = counter; System.out.println(My serialNumber is + serialNumber); public static void main(String args) System.out.println(At first,counter=+ counter); Count count1=new Count(); System.out.printl
19、n(after creat count1, counter=+counter); Count count2=new Count(); System.out.println(At last counter=+counter); System.out.println(count1.serialNumber=+count1.serialNumber); System.out.println(count2.serialNumber=+count2.serialNumber); System.out.println(count1.counter=+count1.counter); System.out.
20、println(Count.counter=+counter); private int serialNumber; private static int counter;广东工业大学计算机学院广东工业大学计算机学院22方法的隐式与显式参数方法的隐式与显式参数 public class Person / 方法定义方法定义 public void setIncome(double d) salary = d; / 域定义域定义 private double salary; private int age; 如果新建一个对象:如果新建一个对象:Person menber007 = new Pers
21、on();并调用并调用setIncome方法:方法:menber007.setIncome(8888.88);setIncome方法有两个参数:方法有两个参数:隐式参数隐式参数this显式参数显式参数double d广东工业大学计算机学院广东工业大学计算机学院23方法的注意事项(方法的注意事项(1)v 参数名可以与参数名可以与类的域名类的域名相同,如果相同,那么参数名将在相同,如果相同,那么参数名将在方法体内隐藏同名的域。例如:方法体内隐藏同名的域。例如:public class Rectanglepublic class Rectangle double x; double x; doubl
22、e y; double y; double double computeArea(doublecomputeArea(double x x, double , double y y) double s = 0; double s = 0; s = s = x x * * y y; ; return s; return s; 当需要同时使用同名的方法参数和类的域当需要同时使用同名的方法参数和类的域名时,可以使用名时,可以使用this关键字:关键字: double computeArea(double x, double y) double s = 0; if (this.x x) s = x *
23、 y; return s; 广东工业大学计算机学院广东工业大学计算机学院24方法的注意事项(方法的注意事项(2)注意:注意:不要编写返不要编写返回引用可变对象回引用可变对象的域的方法。的域的方法。public class Employee public Date getHireDay( ) return hireDay; private Date hireDay;当遇到下面的代码,就能使当遇到下面的代码,就能使hireDay字段的封装性被破坏:字段的封装性被破坏:Employee harry = new Employee();Date date = harry.getHireDay();dou
24、ble tenYearsInMilliSeconds = 10 * 365.25 * 24 * 60 * 60 *1000;date.setTime(date.getTime() (long)tenYearsInMilliSeconds);广东工业大学计算机学院广东工业大学计算机学院25破坏封装的过程破坏封装的过程v 原因:原因:上面的代码上面的代码提供了另一条直接更改可变对象的状态提供了另一条直接更改可变对象的状态的途径。的途径。harry =d =Employeename = salary = hireDay = Dateyears/months/daysv 解决办法:解决办法:对于可变对
25、象,仅由访问器方法提供一个对象副本。对于可变对象,仅由访问器方法提供一个对象副本。public class Employee public Date getHireDay( ) return (Date)hireDay.clone(); private Date hireDay;经验:经验:如果需要如果需要返回一个可变数返回一个可变数据域的拷贝,就据域的拷贝,就应该实现克隆。应该实现克隆。广东工业大学计算机学院广东工业大学计算机学院26方法的参数传递方式方法的参数传递方式v 在程序设计语言中,有两种常见的参数传递方式:在程序设计语言中,有两种常见的参数传递方式:v 1.值调用值调用(call
26、by value):表示方法接收的是调用者提表示方法接收的是调用者提供的值。供的值。v 2.引用调用引用调用(call by reference):表示方法接收的是表示方法接收的是调用者特供的变量地址。调用者特供的变量地址。v Java采用的是采用的是值调用值调用。即方法得到的是所有参数值的一。即方法得到的是所有参数值的一个拷贝,方法并不能改变实参的值。个拷贝,方法并不能改变实参的值。广东工业大学计算机学院广东工业大学计算机学院27方法参数的类型方法参数的类型v一个方法不能修改一个基本数据类型的参数。一个方法不能修改一个基本数据类型的参数。例例如:如:public static doubleV
27、alue(double x) x = 2 * x;double percent = 10;doubleValue(percent);v这样的调用语句并不能改变这样的调用语句并不能改变percent变量的值。变量的值。广东工业大学计算机学院广东工业大学计算机学院28方法参数的类型方法参数的类型(续续)v 然而,方法参数有两种类型:然而,方法参数有两种类型: 基本数类型(数值、布尔值)基本数类型(数值、布尔值) 对象引用对象引用v 下列方法能够改变下列方法能够改变引用引用所指向的对象的状态:所指向的对象的状态:public static doubleValue(Employee e) e.rais
28、eSalary(200); /将将e对象的薪金提高对象的薪金提高200Employee harry = new Employee();doubleValue(harry);v Java对对“对象引用对象引用”这种参数仍然是使用这种参数仍然是使用值传递值传递的方式。的方式。广东工业大学计算机学院广东工业大学计算机学院29Java对对“对象引用对象引用”类型参数的传递类型参数的传递v 在在Java中,对中,对对象引用对象引用参数是采用值传递的方式。参数是采用值传递的方式。public static void swap (Employee x, Employee y) Employee temp =
29、 x; x = y; y = temp;Employee alice = new Employee (“Alice”, );Employee bob = new Employee (“Bob”, );swap(alice, bob);v 在执行了在执行了swap(alice, bob) 后,后,alice仍然是仍然是“Alice”,bob仍然是仍然是“Bob”。Why?v 原因是:原因是:Java采用值传递方式,将采用值传递方式,将alice和和bob的的副本副本传给了传给了swap方法作参数,而方法作参数,而alice和和bob是对象的地址。是对象的地址。广东工业大学计算机学院广东工业大学计
30、算机学院30Java中引用的值传递图示中引用的值传递图示在在swap(x, y)中,引用中,引用x和引用和引用y的的值已经被交值已经被交换;换;但在但在swap(x, y)执行完毕后,执行完毕后,x和和y都被都被丢弃,原来的实参丢弃,原来的实参alice和和bob的值不变。的值不变。广东工业大学计算机学院广东工业大学计算机学院31静态方法静态方法v静态方法静态方法是不能向对象实施操作的方法。又称为是不能向对象实施操作的方法。又称为类方法类方法。例如例如public static int getNextId() return nextId;v注意:注意:1. 静态方法静态方法没有没有this参数
31、。参数。2. 静态方法静态方法不能不能操作任何实例对象。操作任何实例对象。3. 静态方法静态方法不能不能访问任何实例域。访问任何实例域。4. 静态方法静态方法不属不属于任何对象。于任何对象。广东工业大学计算机学院广东工业大学计算机学院32静态方法注意静态方法注意v1. 静态方法也和静态变量一样,不需创建类的实静态方法也和静态变量一样,不需创建类的实例,可以直接通过类名被访问。例,可以直接通过类名被访问。v2. static方法不能被修饰成方法不能被修饰成protected和和abstract。广东工业大学计算机学院广东工业大学计算机学院33静态方法示例静态方法示例public class Ge
32、neralFunction public static int addUp(int x, int y) return x + y; public class UseGeneral public static void main (String args) int a = 9; int b = 10; int c = GeneralFunction.addUp(a, b); System.out.println(addUp() gives + c); 演示演示UseGeneral.java广东工业大学计算机学院广东工业大学计算机学院34Math类类v 所有的所有的Math成员都是静态的成员都是静
33、态的, 不必为该类创建实例不必为该类创建实例, 直接直接用用 Math.method(variable) 调用这些方法调用这些方法 例如例如: int a=-1; a=Math.abs(a); / 将将a作绝对值运算后所得的结果赋给作绝对值运算后所得的结果赋给av public static double sin(double a) public static double cos(double a) public static double tan(double a) public static double asin(double a) public static double acos(
34、double a)广东工业大学计算机学院广东工业大学计算机学院35对象的构造对象的构造v对象的构造有几种方式:对象的构造有几种方式:1.构造器构造器2.在域的声明中赋值在域的声明中赋值3.初始化块初始化块广东工业大学计算机学院广东工业大学计算机学院36构造器构造器(constructor)v 构造器(构造方法)构造器(构造方法) 用来初始化新创建的对象的方法,在用来初始化新创建的对象的方法,在创建对象时自动调用,名字与类名相同,无返回参数。创建对象时自动调用,名字与类名相同,无返回参数。 (即构造函数总是伴随着即构造函数总是伴随着new操作符使用操作符使用) 举例:举例:class Emplo
35、yee public Employee(String n, double s,) name = n; salary = s; private String name; private double salary;Employee e=new Employee(“张三”,5000.0);广东工业大学计算机学院广东工业大学计算机学院37构造方法特点(构造方法特点(1)v 所有的所有的Java类都有构造方法,并且一个类可以类都有构造方法,并且一个类可以包含一个或者多个构包含一个或者多个构造方法造方法。所有的构造方法的名字都与类名相同所有的构造方法的名字都与类名相同,但所带,但所带参数的个数和参数的个
36、数和类型类型不同。(又称为不同。(又称为重载构造方法重载构造方法) 举例:举例:class Employee public Employee(String n, double s, int year, int month, int day) public Employee(String n, double s,) 广东工业大学计算机学院广东工业大学计算机学院38构造方法特点(构造方法特点(2)v 一个构造方法可以调用同一个类的另一个构造方法。一个构造方法可以调用同一个类的另一个构造方法。public class Employee public Employee(String aName, do
37、uble aSalary) name = aName; salary = aSalary; public Employee(double aSalary) this(“Emplyoee #” + this.nextId, aSalary); /调用上一个构造方法调用上一个构造方法 public Employee( ) 。 private String name; private double salary; private static int nextId;v 注意:注意:调用另一个构造方法的调用另一个构造方法的this语句必须放在构造方法的第一个语句。语句必须放在构造方法的第一个语句。广东
38、工业大学计算机学院广东工业大学计算机学院39默认的构造方法默认的构造方法v在编写一个类的时候,如果没有编写构造方法,则系统会自动提供一个在编写一个类的时候,如果没有编写构造方法,则系统会自动提供一个默认的构造方默认的构造方法法。v默认构造方法:默认构造方法:没有参数,其功能为将该类各域值初始化成没有参数,其功能为将该类各域值初始化成Java规定的对应默认值规定的对应默认值(0,false, null)。)。 例如例如: 若若Employee类没有定义构造方法,则默认有如下构造方法:类没有定义构造方法,则默认有如下构造方法: public class Employee public Employ
39、ee( ) name = “”; salary = 0; hireDay = new Date();private String name;private double salary;Date hireDay;注意:注意:若有编写构造方法,则不存在默认构造方法。若有编写构造方法,则不存在默认构造方法。广东工业大学计算机学院广东工业大学计算机学院40构造方法构造方法小结小结v注意:注意:1. 构造器与类同名,没有返回值。(不用写出返回构造器与类同名,没有返回值。(不用写出返回值为值为void,非构造函数则需要),非构造函数则需要)2. 每个类可以不显式定义构造方法。每个类可以不显式定义构造方法。
40、3. 构造器可以有构造器可以有0个、个、1个或以上的参数。个或以上的参数。4. 构造方法总是伴随着构造方法总是伴随着new操作符一起使用。操作符一起使用。广东工业大学计算机学院广东工业大学计算机学院41在域的声明中赋值在域的声明中赋值v在域的声明语句中,可以同时给域赋一个初始值,在域的声明语句中,可以同时给域赋一个初始值,这赋值语句会在创建对象时被自动执行。这赋值语句会在创建对象时被自动执行。例如:例如:class Employee public Employee ( ) private static int nextId1000; private int id0;广东工业大学计算机学院广东工
41、业大学计算机学院42初始化块初始化块v 在一个类的声明中,可以有在一个类的声明中,可以有多个代码块多个代码块,只要构造类的对,只要构造类的对象,这些块就会被执行。象,这些块就会被执行。v 例如:例如:class Employee public Employee ( ) private static int nextId; private int id; id = nextId; nextId+; 注意:注意:在构造对象的过程中,在构造对象的过程中,首先会运行首先会运行初始化块初始化块,然后,然后才运行才运行构造器方法的主体部构造器方法的主体部分分。广东工业大学计算机学院广东工业大学计算机学院4
42、3静态初始化块静态初始化块v 静态初始化块静态初始化块 在类第一次加载时(第一次放到类空间准备运行在类第一次加载时(第一次放到类空间准备运行时),执行静态初始化块。静态初始化块只执行一次。时),执行静态初始化块。静态初始化块只执行一次。 例如:例如:class Employee public Employee ( ) private static int nextId; private int id; static Random generator = new Random; /为nextId赋一个随机值 nextId = generator.nextInt(10000); 广东工业大学计算机
43、学院广东工业大学计算机学院44对象初始化顺序对象初始化顺序v 创建一个对象时,对该对象的初始化处理顺序如下:创建一个对象时,对该对象的初始化处理顺序如下: 1、执行静态初始化块;(只在创建第一个对象时执行一次);、执行静态初始化块;(只在创建第一个对象时执行一次); 2、所有数据被初始化为默认值、所有数据被初始化为默认值 (0, false, null); 3、进入所调用构造方法(即方法参数赋值);、进入所调用构造方法(即方法参数赋值); 4、按照类定义中出现的次序依次执行所有域初始化语句和初始化块;、按照类定义中出现的次序依次执行所有域初始化语句和初始化块;(暂不执行构造方法中的语句)(暂不
44、执行构造方法中的语句) 5、如果所调用的构造方法调用了第二个构造方法,则执行第二个构造、如果所调用的构造方法调用了第二个构造方法,则执行第二个构造方法主体;方法主体; 6、执行第一个构造方法的主体;、执行第一个构造方法的主体;广东工业大学计算机学院广东工业大学计算机学院45对象初始化顺序举例对象初始化顺序举例import java.util.*;public class ConstructorTest public static void main(String args) Employee staff = new Employee2; staff0 = new Employee(Harry,
45、 40000); staff1 = new Employee(60000); /显示Employee对象的域值 class Employee public Employee(String n, double s) name = n; salary = s; public Employee(double s) this(Employee # + nextId, s); int i=0; i=i+1; private static int nextId; private int id10; private String name = ; private double salary; static
46、Random generator = new Random(); nextId = generator.nextInt(10000); id = nextId; nextId+; 广东工业大学计算机学院广东工业大学计算机学院46类的结束方法类的结束方法finalize()v 当一个对象没有任何引用指向它的时候,该对象就会被当一个对象没有任何引用指向它的时候,该对象就会被Java虚拟机认为是可回收的虚拟机认为是可回收的“垃圾垃圾”。v Java有自动的垃圾回收机制,它实际上是一条虚拟机线有自动的垃圾回收机制,它实际上是一条虚拟机线程,周期性地把不再被引用的对象从内存中清除。程,周期性地把不再被引
47、用的对象从内存中清除。v 这个垃圾收集器是自动执行的,我们也可以通过调用系统这个垃圾收集器是自动执行的,我们也可以通过调用系统类的类的System.gc()方法来显式地运行垃圾收集程序方法来显式地运行垃圾收集程序(比比如在创建大量垃圾代码之后或者在需要大量内存代码之前如在创建大量垃圾代码之后或者在需要大量内存代码之前运行垃圾收集器运行垃圾收集器)。v 在一个对象被系统垃圾收集器处理之前,对象也可调用自在一个对象被系统垃圾收集器处理之前,对象也可调用自己的己的finalize()方法进行方法进行析构处理析构处理,这个过程就是所说的,这个过程就是所说的最后处理,也有的参考资料称之为最后处理,也有的
48、参考资料称之为结束方法结束方法。广东工业大学计算机学院广东工业大学计算机学院47类的结束方法类的结束方法finalize()v尤其是结束方法在一般情况下是不需要的,而提尤其是结束方法在一般情况下是不需要的,而提供结束方法供结束方法finalize()的目的是让程序员有机会的目的是让程序员有机会释放掉不能被自动内存管理器直接使用的资源或释放掉不能被自动内存管理器直接使用的资源或是不能自动释放掉的资源。是不能自动释放掉的资源。v但调用系统类的但调用系统类的System.gc()方法,显式调用方法,显式调用finalize()方法并不能保证垃圾回收线程立即被方法并不能保证垃圾回收线程立即被唤醒,实际
49、情况与操作系统有关。唤醒,实际情况与操作系统有关。vJava中构造方法和结束方法在类中均是可选的。中构造方法和结束方法在类中均是可选的。广东工业大学计算机学院广东工业大学计算机学院48本章内容本章内容v3.1 面向对象编程基础面向对象编程基础 v3.2 类的编程实现类的编程实现v3.3 对象的使用对象的使用v3.4 包包v3.5 文档注释文档注释v3.6 类设计技巧类设计技巧v3.7 类的继承实例类的继承实例v3.8 多态多态广东工业大学计算机学院广东工业大学计算机学院49对象的使用对象的使用1v可以用点可以用点“.”操作符来调用对象实例的域和方法。操作符来调用对象实例的域和方法。 1.域的引
50、用域的引用 形式如下:形式如下: objectreference.variablename;例如:例如: firstP = “Henry”;2. 静态域的应用静态域的应用 className.variablename;例如:例如: System.out.println(“hello”);广东工业大学计算机学院广东工业大学计算机学院50对象的使用对象的使用22.方法的调用方法的调用 一般形式如下:一般形式如下: objectreference.methodname(para1,para2,) ;例如:例如: Person firstPerson = new Person();
51、 firstPerson.setName(“Harry”); 3.静态方法的调用静态方法的调用className.methodname(para1,para2,););例如:例如: double d= Math.pow(x,a); /计算计算x的的a次幂;次幂;广东工业大学计算机学院广东工业大学计算机学院51域和方法的访问控制域和方法的访问控制v变量和方法的访问控制符变量和方法的访问控制符有:有:private、默认、默认、protected及及public。它们的具体访问范围如。它们的具体访问范围如下:下:访问指示访问指示类类包包子类子类所有所有private 默认默认(无修无修饰符饰符)
52、protectedpublic 广东工业大学计算机学院广东工业大学计算机学院52域和方法的访问控制举例域和方法的访问控制举例 包1包2public int v1;protected int v2;int v3private int v4;ClassAClassBClassCClassD extends ClassAClassB, ClassC,ClassD分别可以访问分别可以访问ClassA的哪些成员变量?的哪些成员变量?广东工业大学计算机学院广东工业大学计算机学院53本章内容本章内容v3.1 面向对象编程基础面向对象编程基础 v3.2 类的编程实现类的编程实现v3.3 对象的使用对象的使用v
53、3.4 包包v3.5 文档注释文档注释v3.6 类设计技巧类设计技巧v3.7 类的继承实例类的继承实例v3.8 多态多态广东工业大学计算机学院广东工业大学计算机学院54包的组织方式包的组织方式v Java中的包中的包(Package)其实指的就是目录,它是将类其实指的就是目录,它是将类(class)或者接口或者接口(interface)分类按照一定的规则存放分类按照一定的规则存放在不同的文件夹中。在不同的文件夹中。v标准的标准的Java类库分布在多个包中,类库分布在多个包中,如如java.lang、java.util等。等。vsun公司建议以公司公司建议以公司域名的逆序域名的逆序作为作为包名。
54、包名。广东工业大学计算机学院广东工业大学计算机学院55包的作用包的作用 Java以包的形式组织类库以包的形式组织类库, 相当于其他编程语言的标准相当于其他编程语言的标准库库. 这些包中有许多已编好的类与接口让编程人员引用这些包中有许多已编好的类与接口让编程人员引用, 充分体现了面向对象语言的充分体现了面向对象语言的代码可重用性代码可重用性. 利用文件系统的目录管理来管理包,利用文件系统的目录管理来管理包, 避免同名的类发避免同名的类发生冲突生冲突。若类名相同。若类名相同, 只要包名不同就不会冲突只要包名不同就不会冲突. 包名包名用用“.”指明目录的层次指明目录的层次, 如如java.awt.i
55、mage 表明表明image包在包在javaawt目录下目录下. 除了除了Java的开发环境提供了许多包之外的开发环境提供了许多包之外, Java语言还语言还提供了提供了package 语句让编程人员自己定义包语句让编程人员自己定义包, 另外提供另外提供了了import语句让编程人员引入各包中的类语句让编程人员引入各包中的类. 广东工业大学计算机学院广东工业大学计算机学院56包的导入与使用包的导入与使用v一个类可以使用它所在的包中的所有类,以及其一个类可以使用它所在的包中的所有类,以及其它包中的公有类它包中的公有类(声明为声明为public的类的类)。v使用其它包中的公有类,有两种方法:使用其
56、它包中的公有类,有两种方法:1.每个类名之前添加完整的包名每个类名之前添加完整的包名java.util.Date today = new java.util.Date()2.使用使用import语句导入语句导入import java.util.*; 或import java.util.Date;广东工业大学计算机学院广东工业大学计算机学院57类冲突的情况类冲突的情况v 在不同的包中,有可能存在名字相同的类。例如:在不同的包中,有可能存在名字相同的类。例如:java.util和和java.sql包中都有日期包中都有日期(Date)类。类。v 如果要同时使用到这两个包,又要用到如果要同时使用到这两
57、个包,又要用到java.sql包中包中Date类时,需要明确导入:类时,需要明确导入: import java.util.*; import java.sql.*; import java.sql.Date;v 如果两个如果两个Date类都要使用到,那只能将完整的包名写出类都要使用到,那只能将完整的包名写出来:来: java.util.Date today = new java.util.Date()广东工业大学计算机学院广东工业大学计算机学院58静态导入静态导入v从从JDK5.0开始,开始,import语句增加了导入语句增加了导入静态静态方法方法和和静态域静态域的功能。例如,如果在源文件的顶
58、的功能。例如,如果在源文件的顶部添加一条指令:部添加一条指令: import static java.lang.System.*;v那么就可以使用那么就可以使用System类的类的静态方法静态方法和和静态域静态域,而不必加类名前缀,例如:而不必加类名前缀,例如: out.println(”Goodbye”);v另外还可以将特定的另外还可以将特定的方法方法或者或者域域导入:导入: import static java.lang.System.out;广东工业大学计算机学院广东工业大学计算机学院59自定义包自定义包v 自定义包自定义包 如果希望把自己编写的类与接口放在一个包中如果希望把自己编写的类
59、与接口放在一个包中, , 可以可以用用 package package 语句来定义一个包语句来定义一个包. .格式如下格式如下: : package package pkgnamepkgname; ;/指明下面声明的类与接口都位于指明下面声明的类与接口都位于pkgnamepkgname包中包中. . 例如例如: : package package MypackMypack; ; class class MyclassMyclass . . 广东工业大学计算机学院广东工业大学计算机学院60自定义包语句说明:自定义包语句说明:v 若源文件中没有该语句若源文件中没有该语句, , 则当前的文件中声明的
60、则当前的文件中声明的类与接口都放在一个无名包中类与接口都放在一个无名包中. . v package package语句位于语句位于JavaJava源文件的源文件的第一句第一句v package package语句在一个源文件中仅能出现语句在一个源文件中仅能出现0 0或或1 1次。次。广东工业大学计算机学院广东工业大学计算机学院61Jar文件文件v类文件类文件(.class文件,不是文件,不是.java文件文件)存储在文存储在文件系统的子目录中。另外还可以打包成件系统的子目录中。另外还可以打包成JAR格式格式压缩存储。在一个压缩存储。在一个JAR包中可以包含多个类文件包中可以包含多个类文件和子目
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年广西玉林市北流市乡村帮扶岗公务员招录笔试试卷 招录 13 人
- 2026年eda技术与应用试题及答案
- 2026年人体生理学概念理解与应用测试卷
- 2026年CKD 低钙高磷管理试卷及答案
- 2026年bec中级模拟试题及答案解析
- 预制构件吊装工程专项施工方案
- 薪酬福利2025年度工作总结
- 四川某锂电储能电池PACK生产线建设项目可行性研究报告(参考)
- 台账资料整 理规范手册
- 企业奖惩实施管理制度
- 第四单元 第1课时 青蛙歌(教学设计)数学北师大版五年级上册2026秋
- 2026高考英语【全国二卷】试卷及参考答案(含听力音频、听力原文)
- 2026年上海松江国有资产投资经营管理集团有限公司招聘笔试参考题库附带答案详解
- 语文试卷(26-65C)答案重庆市金太阳好教育联盟2026届高三10月联考(26-65C)
- 【《某变电站(220kV110kV10kV)短路电流的计算过程案例》3000字】
- 农业技术交流会
- 2025年一级造价师水利案例真题及答案解析
- 军人压力调节课件
- 航天煤油标准
- 六年级英语完形填空100篇(含答案及讲解)
- 《影视鉴赏(第2版)》课件全套 张婉宜 第1-5章 影视鉴赏基础- 欧洲及其他地区影视鉴赏
评论
0/150
提交评论