1、河南大学软件学院,Java 编程基础,主讲:王倩,第三章 面向对象基础,3.1 类和对象 3.2 定义Java类 3.3 创建对象 3.4 成员变量 3.5方法及重载,3.6 构造方法 3.7 this关键字 3.8 static关键字 3.9 访问控制 3.10 对象清理,面向对象的程序设计思想,客观世界是由各种各样的对象组成,将客观世界中的对象模型化,形成一种计算机化的表示,并以此为基础来分析和解决问题便形成了面向对象技术。,对象由属性和方法组成。属性反映了对象的信息特征,而方法则定义改变属性状态的各种操作。,3.1 类和对象,对象通过属性和方法来对应事物所具有的静态属性和动态属性。类是用
2、于描述同一类型的对象的一个抽象的概念,类中定义类这一类对象所具有的静态和动态属性。类可以看成一类对象的模板,对象可以看成该类的一个具体实例。,3.1 类和对象,3.2定义Java类,修饰符 class类名 extends父类名implements接口名1,. 声明属性; 声明方法; 声明构造方法; ,类的修饰符可以有以下几种情况:public、abstract、 final、 default,举例: 写一个person类,变量定义的语法规范,变量修饰字 数据类型 变量名1, 变量名2 =变量初值 ;,变量的定义及修饰字,public | protected | private static f
3、inal transient volatile,成员变量的类型可以是Java中任意的数据类型,包括简单类型,类,接口,数组。在一个类中的成员变量应该是唯一的。,命名规则:第一个单词的首字母小写,运用驼峰规则。,成员变量分类:,实例成员变量由对象来调用实例成员静态成员变量(类成员变量) 用static声明的成员变量 由类来调用静态成员,成员方法,方法修饰字 返回类型 方法名称(参数1,参数2,) throws exceptionList (statements;) /方法体:方法的内容 ,方法的定义及修饰字,public | protected | private static final |
4、abstract native synchronized,返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void。,方法也可以分为两类:实例方法类方法(也称为静态方法,有static修饰),方法分类:,P91,例3.6,构造函数,作用:在创建对象时执行初始化。当创建对象时,系统为这个对象的属性进行默认初始化,这种默认初始化把基本类型的属性设为0或false,把所有引用类型的属性设为null。如果想改变这种初始化,想让系统创建对象时就为对象各属性显式指定初始值,就可以通过构造函数来实现。,构造函数,声明构造方法的语法格式:修饰符 构造方法名(形参列表)构造方法体,修饰
5、符可以是public、private、protected其中的任何一个;构造方法的名字必须和该类的名字保持一致,否则程序编译出错;形参列表格式和方法中的形参列表格式一致;一个类中的构造方法可以有0或多个,如果一个类没有显式声明构造方法,Java会自动提供一个无形参的缺省构造方法,如果类中如果已显式声明了构造方法,Java不再提供无形参的缺省构造方法。,例3.11,构造函数不能定义返回值类型声明,也不能使用void定 义构造函数没有返回值。如果为构造函数定义了返回值类型,或使用void定义构造函数没有返回值,编译不会 报错,但Java会把这个所谓的构造函数当做一般的方法。构造函数用new关键字来
6、调用,new关键字的作用是用来为 对象分配空间,并且进行初始化。,构造函数,创造对象实例,Java中,使用new运算符实例化对象,具体的格式如下: 类名 实例名 = new该类的构造方法(参数);,int a,int b,int c,访问对象的成员变量和方法,实例方法或变量实例.成员变量|方法,同一类的每个对象有不同的成员变量存储空间。同一类的每个对象共享该类的方法。对象的成员方法是针对每个对象进行调用,变量定义的语法规范,变量修饰字 数据类型 变量名1, 变量名2 =变量初值 ;,变量的定义及修饰字,public | protected | private static final tran
7、sient volatile,成员变量的类型可以是Java中任意的数据类型,包括简单类型,类,接口,数组。在一个类中的成员变量应该是唯一的。,命名规则:第一个单词的首字母小写,运用驼峰规则。,成员变量分类:,实例成员变量由对象来调用实例成员静态成员变量(类成员变量) 用static声明的成员变量 由类来调用静态成员,成员变量的初始化和内存运行机制,系统会在第一次使用某类时加载这个类,并且初始化该类。,类初始化完成时,系统会为静态成员分配内存空间。,public class child public int id;public String name;public static int num;
8、public static void main (String args)child p1 = new child( );p1.name = “张三“; ,栈,堆,数据区,当创建对象是,系统会为实例属性(非静态成员变量)分配内存空间,并指定初始值。,创建对象,代码区,成员变量可以是Java语言中任何 一种数据类型(包括基本类型和 引用类型)。在定义成员变量时可以对其初始化,如果不对其初始化,java使用默认的值对其初始化。成员变量的作用范围为整个类体。,成员变量默认值,局部变量,局部变量定义的位置:方法体中局部变量的作用域:本大括号中在内存中的位置:栈中,局部变量的初始化和内存中的运行机制,局
9、部变量定义以后,必须经过显式初始化才能使用,系统不会为局部变量执行初始化。局部变量在栈中分配存储空间。如果是基本数据类型(8种),则变量的值直接保存在内存中。如果是引用数据类型,则在变量中保存地址,通过该地址引用到该变量实际引用的对象或数组。无需系统垃圾回收,超出作用域范围,自动释放空间。,变量的初始值:成员变量有默认值局部变量必须显式的初始化,存储位置:成员变量中的实例变量存储在堆内存中局部变量存储在栈内存中静态变量(类变量)存储在数据区中,局部变量和成员变量的区别,成员方法,方法修饰字 返回类型 方法名称(参数1,参数2,) throws exceptionList (statements
10、;) /方法体:方法的内容 ,方法的定义及修饰字,public | protected | private static final | abstract native synchronized,返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void。,方法也可以分为两类:实例方法类方法(也称为静态方法,有static修饰),方法分类:,P91,例3.6,返回值,返回类型可以是任意的Java数据类型,包括基本类型和引用类型; 如果方法声明了方法返回值类型,则方法体中必须有一个有效的return语句,该语句返回一个变量或一个表达式,这个变量或表达式的类型必须与此处声明
11、的类型匹配。 当一个方法不需要返回值时,必须使用void来声明没有返回值。,3.5.2参数传递方式,Java里参数传递方法只有一种:值传递值传递分为两种:基本类型参数传递引用类型参数传递,基本类型参数传递,public class PassPrimitiveDemo public static void swap(int a,int b) int temp = a; a = b; b = temp; System.out.println(“执行方法时,a=“ + a + “, b=“ + b); /语句(4) public static void main(Stringargs) int a
12、= 1; int b = 2; System.out.println(“执行方法前,a=“ + a + “,b=“ + b); /语句(1) swap(a,b); /语句(2) System.out.println(“执行方法后,a=“ + a + “,b=“ + b); /语句(3) ,画内存 分析,引用类型参数传递,public class TestReferenceTransfer public static void swap(DataWrap dw) /下面三行代码实现dw的a、b属性值交换。 int tmp = dw.a; dw.a = dw.b; dw.b = tmp; Syst
13、em.out.println(“swap方法里,a的值是“ + dw.a + “;b的值是“ + dw.b); public static void main(String args) DataWrap dw = new DataWrap();dw.a = 6;dw.b = 9;swap(dw);System.out.println(“交换结束后,a的值是“ + dw.a + “;b的值是“ + dw.b); ,注意:引用类型参数传递的值到底是什么?地址!,一个Java源文件中可以包含多个类,但最多只能有一个public类,如果源文件中没有一个类是public类型的,那么文件命名时最好与含有m
14、ain()方法的类名称一致,但这也不是必须的。,注意:,本节主要内容:,3.5方法重载 3.6 构造方法 3.7 this关键字 3.8 static关键字,方法的三要素:调用者,也就是方法的所属者,既可以是类,也可以是对象。方法名,方法的标识。形参列表,当调用方法时,系统将会根据传入的实参列表匹配。方法重载的要求:两同一不同:同一个类中方法名相同,参数列表不同。至于方法的其它部分,如返回值类型,修饰符等,与方法重载没有任何关系。,方法重载,方法重载,什么叫做重载?Java允许同一类里定义多个同名方法,只要形参列表不同就可。如果同一类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。,参数列表不同包括以下3种情形:参数的数据类型不同;参数之间的顺序不同;参数的个数不同。,方法重载,P98,例:3.10,注意:,根据返回值类型,系统不能区分两个方法,所以重载不包括返回值类型。 int,byte,short ,char 可以构成重载。 如果不明确地指明整数的类型,则调用整型参数方法。 如果指明参数的类型,则调用相应类型参数的方法。,例:TestOverload.java,