第4章类、对象和接口
7.类方法和实例方法
类中的方法也可分为实例方法和类方法. 方法声明时,方法类型前面不加关键字 static的是实例方法、加关键字static的是类 方法。 构造方法是特殊的方法,不能用static修饰 构造方法。
8、要注意的问题
对成员变量的操作只能放在方法中,方法 可以对成员变量和方法体中自己定义局部 变量进行操作。在定义类的成员变量时可 以同时赋予初值。 如class a 正确 class a 不正确 { int a=12;} { int a; a=12;} 如:class a { int a; void f(){int x=111; a=x+1111;}}
声明对象时的内存模型
当用XiyoujiRenwu类 声明一个变量,即对 象zhubajie时,如例子 1中的对象zhubajie:
XiyoujiRenwu zhubajie;
内存模型如左图所示
对象分配内存后的内存模型
当系统见到:
zhubajie=new XiyoujiRenwu();
时,就会做两件事:
class 三角形 { float sideA,sideB,sideC,lengthSum; void setSide(float sideA,float sideB,float sideC) { this.sideA=sideA; this.sideB=sideB; this.sideC=sideC; } } this.sideA,this.sideB,this.sideC就分别表示成 员变量sideA,sideB,sideC
6.构造方法
构造方法是一种特殊方法,它的名字必须 与它所在的类的名字完全相同,而且没有 类型,构造方法也可以重载。 构造方法是在构造类对象时使用的一种特 殊的成员方法,其主要作用是初始化成员 变量.
class 梯形 { float 上底,下底,高; 梯形() { 上底=60; 下底=100; 高=20; } 梯形(float x,int y,float h) { 上底=x; 下底=y; 高=h; } }
4.1 编程语言的几个发展阶段 4.2 类 4.3 对象 4.4 static 关键字 4.5 this 关键字 4.6 包 4.7 访问权限 4.8 类的继承 4.9 对象的上转型对象 4.10 多态性
4.1 编程语言的几个发展阶段(1)
机器语言(如汇编语言) 计算机处理信息的早期语言是所谓的机器语言, 这种语言中的指令都是由0,1组成的序列,称这 样的序列为一条机器指令。 过程语言 语言把代码组成叫做过程或函数的块。每个块的 目标是完成某个任务,例如,一个C的源程序就 是由若干个书写形式互相独立的函数组成。 面向对象编程
4.1 编程语言的几个发展阶段(2)
面向对象编程主要体现下列三个特性: 1.封装性 2.继承 3.多态 Java语言是面向对象语言,它的源程序是 由若干个类组成,源文件是扩展名为.java 的文本ห้องสมุดไป่ตู้件
4.2 类
类是组成Java程序的基本要素。类封装了 一类对象的状态和方法。类是用来定义对 象的模板。 类的实现包括两部分:类声明和类体。
4.方法(2)
写一个方法和C语言中写一个函数类似,只不过 在这里称做方法
5.方法重载
方法重载的意思是:一个类中可以有多个 方法具有相同的名字,但这些方法的参数 必须不同,即或者是参数的个数不同,或 者是参数的类型不同。
class Area { float getArea(float r) { return 3.14f*r*r; } double getArea(float x,int y) { return x*y; } float getArea(int x,float y) { return x*y; } double getArea(float x,float y,float z) { return (x*x+y*y+z*z)*2.0; } } 注意:方法的返回类型和参数的名字不参与比较,也就是说 如果两个方法的名字相同,即使类型不同,也必须保证参 数类型不同。
① 为height,weight,head,ear, mouth,hand,foot各个变量 分配内存,即XiyoujiRenwu类的 成员变量被分配内存空间,然后 执行构造方法中的语句。 ② new运算符在为变量height, weight,head,ear,mouth, hand,foot分配内存后,将返回 一个引用给对象变量zhubajie。
3.成员变量和局部变量(1)
我们已经知道类体分为两部分。变量定义部 分所定义的变量被称为类的成员变量。在 方法体中定义的变量和方法的参数被称为 局部变量。 成员变量在整个类内都有效,局部变量只在 定义它的方法内有效。
3.成员变量和局部变量(1)
class Sun { int distance; int find() {int a=12; distance=a ; //合法,distance在整个类内有效 return distance; } void g() { int y; y=a; //非法,因为a已经失效,而方法g中没有定义a }}
8、要注意的问题
实例方法既能对类变量操作也能对实例变量操作,而类方 法只能对类变量操作。 如 class A { int a; static int b; void f(int x,int y) { a=x; //合法 b=y;//非法} static void g(int z) { b=23; //合法 a=z;//非法}
class 梯形 { float 上底,下底,高,laderArea; //变量定义部分 float 计算面积() //方法定义 { laderArea=(上底+下底)*高/2.0f; return laderArea; } void 修改高(float h) //方法定义 { 高=h; } }
3.成员变量和局部变量(1)
对象分配内存后的内存模型
3、创建多个不同的对象 一个类通过使用new运算符可以创建多个 不同的对象,这些对象将被分配不同的内 存空间,因此,改变其中一个对象的状态 不会影响其他对象的状态。如 zhubajie=new XiyoujiRenwu(); sunwukong=new XiyoujiRenwu();
8、要注意的问题
一个类中的方法可以互相调用,实例方法可以调用该类中 的其他方法;类中的类方法只能调用该类的类方法,不能 调用实例方法。如 class A { float a; void setA(float x,float y){a=get(x,y);} static float get(float x,float y) {float c=max(x,y); return c;} static float max(float x,float y) {return x>y?x:y;} }
1.类声明
class People {… } “class People”叫做类声明;“People” 是 类名。习惯上类名的第一个字母大写,但 这不是必须的。 而且类名最好容易识别。
2.类体
写类的目的是为了描述一类事物共有的属 性和功能,描述过程由类体来实现。类声 明之后的一对大括号“{”,“}”以及它们之 间的内容称做类体,大括号之间的内容称 做类体的内容。 类体的内容由两部分构:一部分是变量的 定义,用来刻画属性;另一部分是方法的 定义,用来刻画功能。
4.方法(1)
我们已经知道一个类的类体由两部分组成: 变量的定义和方法的定义。方法的定义包 括两部分:方法声明和方法体。 方法声明部分 {方法体的内容}
4.方法(1)
1、方法的声明 最基本的方法声明包括方法名和方法的类型, 如 float area() {…..} void setA(double radius,int a) {…..}
第4章
类、对象和接口
4.11 abstract 类和abstract方法 4.12 super关键字 4.13 接口 4.14 内部类 4.15 匿名类 4.16 异常类 4.17 Class类 4.18 基本类型的类包装 4.19 反编译和文档生成器 4.20 jar文件
4.3 对象
类是创建对象的模板。当使用一个类创建 了一个对象时,我们也说我们给出了这个 类的一个实例。
1.创建对象
创建一个对象包括对象的声明和为对象分 配内存两个步骤。 (1).对象的声明。 一般格式为: 类的名字 对象名字; 如: People zhangPing;
(2)为声明的对象分配内存 使用new运算符和类的构造方法为声明的对 象分配内存,如果类中没有构造方法,系 统会调用默认的构造方法(默认的构造方 法是无参数的,你一定还记得构造方法的 名字必须和类名相同这一规定)。如: zhangPing=new People();
(3)对象的内存模型 使用例子1来说明对象的内存模型 例子4.1,4.2 class XiyoujiRenwu { float height,weight; String head, ear,hand,foot, mouth; void speak(String s) { System.out.println(s); } } class A { public static void main(String args[]) { XiyoujiRenwu zhubajie; //声明对象 zhubajie=new XiyoujiRenwu(); //为对象分配内存, //使用new 运 算 符和默认的构造方法 } }
成员变量和局部变量的类型可以是JAVA中的任何 一种数据类型,包括基本类型和引用类型。 class People { int boy; float a[]; void f() {boolean cool; Workman zhangboy;} } class Workman { double x; }