5.16 本章要点
- 面对对象的三大特征:封装,继承,多态
- 类与对象的关系:类是对象的模板;对象是类的实例。类只能通过对象才可以使用
- 类的组成为属性和方法。所有属性都应该被封装
- 对象的产生格式: 类名称 对象名称 = new 类名称();
- 如果一个对象没有被实例化而直接使用,则使用时会出现空指向异常
- 类属于引用数据类型。 进行引用传递时,传递的是堆内存的使用权
- 类的封装性: 通过private关键字来修饰类的属性或者方法,被封装的属性不能被外部直接调用,而只能通过setter()和getter()方法来完成。 *****只要是属性,则必须全部进行封装*****
- 构造方法可以为类中的属性初始化,构造方法与类名称相同,没有返回值类型声明!如果在类中没有明确的定义出构造方法,则会自动生成一个无参的、什么都不做的构造方法。 ******* 一个类中的构造方法可以重载,但是每一个类都至少有一个构造方法!!*******
- String类在java中较为特殊,String可以使用直接赋值的方法,也可以通过构造方法进行实例化。前者只产生一个实例化对象,而且此实例化对象可以重用;后者将产生两个实例化对象,其中一个是垃圾空间!!!!! 在String中比较内容时使用equals()方法,而“==”比较的知识两个字符串的地址值。字符串的内容一旦声明则不可改变
- 在java中使用this关键字可以表示当前对象;
通过“this.属性”可以调用本类中的属性;
通过"this.方法()"可以调用本类中的其他方法;
也可以通过this()的形式调用本类中的构造方法,但是调用时要放在构造方法的首行!
- 使用static声明的属性和方法可以由类名称直接调用,static属性是所有对象共享的,所有对象都可以对其进行操作。
- 如果需要限制类对象的产生,则可以将构造方法私有化
- 对象数组的使用分为声明数组(开辟栈内存空间)和为数组开辟堆内存空间两步。
开辟空间后数组中的每个元素的内容都是null - 内部类是一个在类的内部定义另外的一个类。使用内部类可以方便地访问外部类的私有操作。在方法中声明的内部类要想访问方法的参数,则参数前必须加上final关键字!
5.17 习题
- 编写并测试一个代表地址的Address类,地址信息由国家、省份、城市、街道、邮编组成,并可以返回完整的地址信息
- 定义并测试一个代表员工的Employee类。员工属性包含“编号”、“姓名"、”基本薪水“、”薪水增长额“,还包含计算薪水增长额及计算增长后的工资总额的操作方法
- 编写程序,统计出字符串”want you to know one thing"中字母n和字母o的出现次数
- 设计一个Dog类,有名字、颜色、年龄等属性,定义构造方法来初始化类的这些属性,定义方法输出Dog信息,编写应用程序使用Dog类
- 设计一个表示用户的User类,类中的变量有用户名、口令和记录用户个数的变量,定义类的3个构造方法(无参、为用户名赋值、为用户名和口令赋值)、获取和设置口令的方法和返回类信息的方法
- 字符串操作:(1) 从字符串“Java技术学习班 20141125”中提取开班日期 (2) 将“CSDN JAVA”字符串中的“JAVA”替换为“J2EE” (3) 取出“Java技术学习班 20141125”中的第8个字符 (4) 清除“Java技术学习班 20141125”中的所有0 (5) 清除“Java技术学习班 20141125 CSDN 老师”中的所有空格 (6) 从任意给定的身份证号码中提取此人的出生日期
- 编写一个公司员工类 (1) 数据成员: 员工号、姓名、薪水、部门 (2) 方法: a. 利用构造方法完成设置信息: 单参,值传递员工号,则员工姓名:无名氏,薪水:0;部门:未定。 双参,传递员工号、姓名,则员工薪水为1000,部门:后勤 。 4参, 传递员工号、姓名、部门、薪水。 无参,均为空置 b. 显示信息
- 构造一个银行账户类,类的构造包括以下内容: (1) 数据成员用户的账户名称、用户的账户余额(private) (2) 方法包括开户(设置账户名及余额),利用构造方法完成 (3) 查询余额
- 声明一个图书类,其数据成员为书名、编号(利用静态变量实现自动编号)、书价,并拥有静态数据成员册数、记录图书的总册数,在构造方法中利用此静态变量为对象的编号赋值,在主方法中定义对象数组,并求出总册数