6.2 对象和类
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
stu2:Student
id = "019936" name = "曹舟" birthDate = null average = 0.0
stu1:Student
id = "019907" name = "张敏" birthDate = null average = 0.0
不再被引用的 对象stu1,将 被运行时系统 自动回收
签名: public void setPropertyName(DataType value)
toString( )方法
(1)Object类中定义的toString()方法:
getClass().getName()+"@"+Integer.toHexString(hashCode()); ① getClass().getName():返回对象所属类的包名.类名 ② Integer.toHexString(hashCode()):将对象的哈希值用16进制表示, 其中hashCode() 返回该对象的哈希值。
stu1 对象的引用
stu1:Student
id = "019907" name = "张敏" birthDate = null average = 0.0
赋值前 i
j
基本类型 int i = 1;
1
int j = 2; 2
赋值后 i
j
i = j; 2
2
引用类型
Student stu1 = new Student(“019907”, “张敏”);
整型byte、short、int、long的基本类型变量的默认值为0。 单精度浮点型float的基本类型变量的默认值为0.0f。 双精度浮点型double的基本类型变量的默认值为0.0d。 字符型char的基本类型变量的默认值为“\u0000”。 布尔型的基本类型变量的默认值为false。 数组引用类型的变量的默认值为null。如果创建了数组变量
stu2 对象的引用
st百度文库2:Student
id = "019936" name = "曹舟" birthDate = null average = 0.0
变量作用域
成员变量(实例变量和静态变量)的作用域是整个 类,与声明的位置无关。
如果一个变量的初始化依赖于另一个变量,则 另一个变量必须先声明
堆区
类成员
类成员
属性
类常量 成员变量
实例变量(非静态变量) 静态变量(类变量)
方法
构造方法 静态方法(类方法) 非静态方法(实例方法) 访问器方法 toString()方法 业务方法
类常量是用static final修饰的变量。 例如,Math类中的常量PI定义为:
public static final double PI = 3.14159265358979323846;
访问器方法
通常为私有(private)成员变量提供Getter和Setter方法。 例如:成员变量为DataType propertyName ① Getter方法用于获取成员变量的值
签名: public DataType getPropertyName() ② Setter方法用于设置成员变量的值
(2)在实际开发中,通常重写toString()方法返回需要的信息。
业务方法
业务方法是类中用于处理业务逻辑而定义的方法块。 可以是静态的,也可以是非静态的。
例如:Student类定义如下业务方法:
创建对象
使用new关键字创建对象 语法: new ClassName(arguments); 例如:
对象引用变量可以是静态变量,也可以是实例变量。 声明引用变量语法:
ClassName objectRefVar; 例如:Student stu1; 引用变量初始化 objectRefVar = new ClassName(arguments); 例如:stu = new Student();
同时声明和创建对象引用变量 ClassName objectRefVar = new ClassName(arguments); 例如: Student stu1 = new Student(“019907”, “张敏”);
this关键字
(1) this表示当前对象
在构造方法或实例方法中,实例变量被局部变量或方 法参数隐藏,可以通过this.instanceVariable访问实例 变量。
不可用于静态方法内。
(2) 调用当前类的其它构造方法。
this(actualParameterListopt) 必须是构造方法的第1条语句。
类的定义
类成员访问控制
类中代码可以访问自身的所有成员。 其它类的代码访问类的成员,受访问控制符的限制: ① private: 只能当前类自身可以访问。 ② 无访问修饰符的成员:只有相同包中的代码可以访问。 ③ protected: 子类、同一包中的类可以访问。 ④ public: 所有其它类都可以访问。
实例方法(non-static method)是没用static修饰的方法,也称非静 态方法。
(1) 可通过对象引用变量调用。 (2) 可被其他实例方法调用,不可在静态方法中直接调用。 静态方法(static method)是用static修饰的方法,也称为类方法。
例如: main(),Math.random()等。 (1) 静态方法可以通过类名、对象引用变量或在类的实例方法中直 接调用。 (2) 静态方法只能访问类的静态成员,不能访问类中的非静态成员。
如果一个局部变量具有与类中的变量相同的名 称,那么局部变量优先,成员变量被隐藏。
对象数组
与基本数据类型一样,可以声明并创建对象数组。 当创建对象数组时,数组元素的缺省初值为null。
例:Student[] studentArray = new Student[10];
studentArray
2.创建对象,返回对象的引用 3.将对象的引用赋值给变量stu1
1.声明一个引用变量,变量类型为Student,变量名为stu1
访问对象的实例变量和 实例方法
访问对象的实例变量语法: objectRefVar.data 例如: stu1.name; //访问对象stu1的name成员变量
调用对象的实例方法 objectRefVar.method(arguments) 例如: stu1.test(); //调用对象的test()实例方法
的实例,但没有显式地为每个元素赋值,则数组中的元素初 始化值采用数组数据类型对应的默认值。
构造方法
构造方法: 特殊的方法,用于初始化对象。 在使用 new 运算符创建一个对象时调用的。
语法: modifieropt className (parameterList) { statementsopt }
对象和类
1. 理解对象和类的概念以及它们之间的关系; 2. 学会用UML表示类与对象; 3. 掌握类成员、类成员访问控制符、this关键词; 4. 掌握静态变量、实例变量、静态方法、实例方法; 5. 掌握构造方法、访问器方法、toString()方法; 6. 掌握创建对象、对象引用变量、对象数组、对象作为方 法参数、变量作用域; 7. 掌握代码块、类代码执行顺序、不可变类与对象。
stu1:Student
stu1 对象的引用
id = "019907" name = "张敏" birthDate = null average = 0.0
Student stu2 = new Student(“019936”, “曹舟”);
stu2 对象的引用
stu1 = stu2;
stu1 对象的引用
类的UML表示
类名 实例变量 (非静态变量) 类变量(静态变量) 构造方法
实例方法 (非静态方法)
类方法(静态方法)
Student
- String id; // 学号 - String name; // 姓名 Date birthDate; //出生日期 # double average;//平均分 -static int count; //类的对象数
访问控制是在类的层次上进行的,相对于类而言的, 而不是在每个对象上。
类属性
声明成员的属性语法如下: [public|protected|private][static] [final] <type> <variable_name> public、protected、private:用于表示成员变量的访问权限。 static:表示该成员变量为类变量,也称为静态变量。 final:表示将该成员变量声明为常量,其值无法更改。 type:表示变量的类型。 variable_name:表示变量名称。
缺省构造方法: 如果类未定义任何类型的构造方法,编译器会自
动提供一个不带参数的构造方法。 如果已存在带参数的构造,则不会提供不带参数
的构造方法。
① 必须具备和所在类相同的名字。 ② 没有返回值类型,甚至连 void 也没有。 ③ 可以重载;即一个类可以定义多个方法签名不同的构造 方法; ④ 可以没有参数,没有参数的构造方法称为无参构造方法。 ⑤ 如果类未定义任何类型的构造方法,编译器会自动 提供一个不带参数的构造方法。 ⑥ 如果已定义的构造方法,则不会提供无参构造方法。
① 对象(object)表示现实世界中可以明确识别的实体。 例如,学生、圆、按钮等。对象具有属性和行为。
学习 选课
考试
姓名:张敏
学号:0001 平均分:97
行为 (方法)
......
学生类
② 类(class)定义了一类对象共有的属性和方法。 ③ 类是对象的模板、蓝图;对象是类的实例。
属性(变量): 学号、姓名、 平均分...
//构造方法 +Student() +Student(String id, String name) //访问器方法 +void setId(String id) +String getId() ...... +String toString(); //业务方法 +double test() +static int getInstanceCount()
基本类型变量和引用类型 变量的区别
变量表示存储数据的内存单元。
基本类型变量存储的是基本类型的值。
引用类型变量存储的是对象的引用。当变量未引用任何对
象时,它的值为null。
基本类型
int i = 1;
i
1
Student stu1; 引用类型
stu1 null
Student stu1 = new Student(“019907”, “张敏”);
new Student( ); //调用无参构造方法 new Student(“019907”, “张敏”); //调用参数的构造方法
Java虚拟机为新创建的对象分配内存,并返回对象的引用。
对象引用变量
对象通过引用变量(reference variable)进行访问,引用变量中 存储的是对象的引用地址。
对象名
实例变量 (非静态变量) 类变量(静态变量)
stu1:Student
id = "019907" name = "张敏" birthDate = 2003-07-10 average = 98 count = 2
方法区
count:2
......
stu2:Student
id = "019936" name = "曹舟" birthDate = 2003-06-16 average = 96 count = 2
数组的引用
栈
堆
studentArray[0] null studentArray[1] null
… studentArray[9] null
对象数组初始化后,数组元素的值为对象的引用 例:Student[] studentArray = new Student[10]; for(int i = 0; i < studentArray.length; i++) { studentArray[i] = new Student(); }
实例变量(instance variable): 未用static修饰的成员变 量,属于类的具体实例(对象),只能通过对象引用 变量访问。存储于堆中。
静态变量(static variable): 用static修饰的变量,在一 个类的所有实例间共享,也称类变量。静态变量可 以通过类名或对象引用变量访问。存储于方法区。