当前位置:文档之家› 3.2-类的定义与对象的创建使用

3.2-类的定义与对象的创建使用

见Java文档中描述(JDK文档)
程序员自己定义的类
安徽科技学院.计算机系
2 设计:刘斌
修饰符: public 、 、 接口名] [类的修饰符]class 类名 [extends 父类名 ] private [implements { protected、abstract、 [修饰符] 类型 成员变量1; final、static
安徽科技学院.计算机系 设计:刘斌
举例:Class类,类名和文件名不一致
如果声明时使用class,则类名称和文件名 可以不一致,但是执行的时候肯定执行的 是生成的类名称。
安徽科技学院.计算机系 设计:刘斌
举例:public 类,类名和文件名不一致
类声明时使用public class 进行声明,则类名称 和文件名要完全一致。否则,编译时将产生如 下问题。
安徽科技学院.计算机系
设计:刘斌
举例:对象的创建和使用
对象的创建格式
方法一:
类名 对象名=new 类名();
方法二: 类名 对象名=null;
//声明对象
对象名=new 类名();//实例化对象
安徽科技学院.计算机系 设计:刘斌
类是引用类型,使用类定义的对象,只有使用 new方法开辟内存空间才能使用。
安徽科技学院.计算机系 设计:刘斌
类的UML图 类的名字 属性1 属性2
Lader
- above:float - bottom:float - height:float - area:float + computerArea():float +setHeight(float):void
…… 方法1()
效性与它在类体中书写的先后位置无关
安徽科技学院.计算机系
设计:刘斌
局部变量:在方法体中声明的变量和方法的参数。
•局部变量只在方法内有效,而且与其声明的位置有关。 •方法的参数在整个方法内有效 •方法内的局部变量从声明它的位置之后开始有效 •如果局部变量的声明是在一个复合语句中,那么该局部变 量的有效范围是该复合语句 •如果局部变量的声明是在一个循环语句中,那么该局部变 量的有效范围是该循环语句
设计:刘斌
如果局部变量的名字与成员变量的名字相同,则成员变 量被隐藏,即该成员变量在这个方法内暂时失效。 如果想在该方法中使用被隐藏的成员变量,必须使用关 键字this class Tom { int x = 10,y; void f() { int x = 5; y = x+x; } } class Tom { int x = 10,y; void f() { int x = 5; y = x+this.x; } }
安徽科技学院.计算机系
设计:刘斌
类的对象内存空间分配说明
People p1=null; p1=new People(); 类是引用数据类型 类的对象实际上保存在栈内存中 //声明对象 //实例化对象
实例化后对象会在堆内存中开辟对应的空间,存放对 象的各个属性,并符初值
栈内存
p1
堆内存
name=null
保护 protected
私有 private


*

* 指子类与父类不在同一个包中的情况
安徽科技学院.计算机系
41 设计:刘斌
本节小结
1. 2.
类的定义(成员属性、成员方法) 类的UML
3.
4.
对象的创建与使用
属性的封装
安徽科技学院.计算机系
设计:刘斌
安徽科技学院.计算机系
设计:刘斌
成员变量有默认值,但局部变量没有默认值,因此在使用
局部变量之前,必须保证局部变量有具体的值 。 class InitError { int x = 10,y; void f() { int m; x = y+m; } }
安徽科技学院.计算机系
设计:刘斌
3.1.2.类的UML
安徽科技学院.计算机系 设计:刘斌
举例:类定义举例
主方法main是类的入口,没有main方法的类不 能直接运行
安徽科技学院.计算机系 设计:刘斌
类的访问权限修饰符:Public class 和class
在类的声明是可以用两种方式定义类 如果一个类声明时使用public class 进行声明,则类名称和文 件名要完全一致。否则,编译时将产生如下问题。 如果声明时使用class,则类名称和文件名可以不一致,但是 执行的时候肯定执行的是生成的类名称。(编译生成的.class文 件名称是和类名称完全一致) 在一个*.Java文件中,可以同时声明多个类,但只允许有一个 public class声明的类(该类的名字必须和文件名一致,且main 方法也应该在该类在),其余均为class声明的类。文件中有几 个类,则编译就会生成几个二进制字节码.class文件
[访问权限修饰符] 方法返回类型 方法名 () [throws 异常名] { 方法体; }

类型:基本类型,复合类型(数组、类和接口)
安徽科技学院.计算机系
39 设计:刘斌
类的成员(变量、方法)的访问权限修饰符

public:公共访问控制符,该类的成员可以被其他所有的 类访问 protected:保护访问控制符,该类的成员可以被同一 个包中的类或其他包中的该类的子类访问
Java语言自动管理内存,可以自动进 行垃圾收集属性的封装
请观察下面的这段程序、运行结果
安徽科技学院.计算机系
设计:刘斌
由实例分析可知:

年龄可以为任意整数值,这显然与现实世 界不相符合。 主要原因:当前类的成员属性和所有操作 都是对外界可见的。即:外界可以直接访 问类的成员属性。 解决方法:封装----让外界只能通过自定义 的类方法来访问类的成员属性。
3.2 类的定义与对象的创建、使用
1. 类的定义(成员属性、成员方 2. 3. 4. 5.
法) 类的UML 对象的创建与使用 属性的封装 类的成员访问修饰符
安徽科技学院.计算机系
1 设计:刘斌
源程序就是一个个的Java类及其对象构成 类是对象的抽象描述,而对象是类的实例

Java本身提供的类(核心API)
设计:刘斌
安徽科技学院.计算机系
设计:刘斌
安徽科技学院.计算机系
设计:刘斌
安徽科技学院.计算机系
设计:刘斌
3.3.3.类的实例化(对象的创建)与使用
类是一个抽象的定义 没有main方法的类不能直接执行
创建类的实例—对象
使用对象进行访问(属性、方法)
类是引用类型,使用类定义的对象,只有 使用new方法开辟内存空间才能使用。
举例: 封装
安徽科技学院.计算机系
设计:刘斌
安徽科技学院.计算机系
设计:刘斌
3.1.5 类的成员的访问权限修饰符

成员变量定义
[访问权限修饰符] 类型 变量名; [访问权限修饰符] 类型 变量名 [=初值]; [访问权限修饰符] 类型 变量名 [=初值] [,变量名 [= 初值]…];

成员方法定义
UML(Unified Modeling Language Diagram)图属于结 构图,常被用于描述一个系统的静态结构。
•类(Class)的UML图
•接口(Interface)的UML图 •泛化关系(Generalization)的UML图 •关联关系(Association)的UML图 •依赖关系(Dependency)的UML图 •实现关系(Realization)的UML图
age=0
安徽科技学院.计算机系 设计:刘斌
Exam04类的内存空间分配说明 栈内存 堆内存
p1 p2 name=null age=0 name=null age=0
安徽科技学院.计算机系
设计:刘斌
Exam06类的内存空间分配说明
栈内存
p1
堆内存
name=张三 age=22
p2

name=李四 age=44


安徽科技学院.计算机系
设计:刘斌
对类的成员属性,使用private修饰符进行 限制 定义相应的属性操作方法,对成员属性进 行存取操作 setXxx() , getXxx()。其中Xxx表示对应 的属性名,且属性名首字母大写
安徽科技学院.计算机系
设计:刘斌
举例: 封装
安徽科技学院.计算机系
设计:刘斌
在方法体内可以对成员变量和方法体中声明的局部变量进
行操作。
安徽科技学院.计算机系 设计:刘斌
public class A { int m = 10,sum = 0; //成员变量,在整个类中有效 void f() { if(m>9) { int z = 10; //z仅仅在该复合语句中有效 z = 2*m+z; } for(int i=0;i<m;i++) { sum = sum+i; //i仅仅在该循环语句中有效 } m = sum; //合法,因为m和sum有效 z = i+sum; //非法,因为i和z已无效 } int getSum(int n) { //参数变量n是局部变量 int sum=0; // 声明局部变量sum for(int i=1;i<=n;i++) { sum=sum+i; } return sum; } } 安徽科技学院.计算机系


无权限修饰符:默认权限访问控制符,该类的成员能被 同一个包中的类访问
private:私有访问控制符,该类的成员只能被同一个类 中的成员访问
安徽科技学院.计算机系 设计:刘斌

类成员访问权限修饰符小结
名称 访问权修饰符 类本身 公共 public 默认 -- 子类 包 所有类
相关主题