资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章 补充案例案例3-1 定义学生类一、案例描述 1、 考核知识点编号:00103002名称:类和对象2、 练习目标 掌握类定义的方式 掌握如何在类中定义成员变量和成员方法3、 需求分析在面向对象的思想中最核心就是对象,在程序中创建对象的前提是需要定义一个类。为了让初学者掌握类的定义方式,本案例将设计一个表示学生的类,该类具有表示姓名的属性name和表示年龄的属性age,同时还具有表示说话行为的方法speak(),用于输出学生的姓名和年龄。 4、 设计思路(实现原理)1)使用class关键字定义一个表示学生类型的类,类名为Student。 2)在Student类中定义两个成员变量name和age,分别用来表示姓名和年龄。其中,name的数据类型为String,变量age的数据类型为int。 3)在Student类中定义一个表示说话行为的speak()方法,用于输出学生的姓名和年龄。二、案例实现class StudentString name; int age; void speak() System.out.println(我的名字是 +name+,今年 +age+岁); 三、案例总结1、Java语言严格区分大小写,class和Class是不同的,在定义类时只能使用class关键字2、在Student类中,成员变量name是String类型,String表示一个字符串,后面的章节会详细讲解3、思考一下:自己定义一个手机(Phone)类,在类中定义品牌(brand)和价格(price)属性,定义打电话的call()方法,代码如下所示public class Phone String brand; double price; void call() System.out.println(hi,how are you doing); 案例3-2 同一对象被多个变量引用一、案例描述1、 考核知识点编号:00103003名称:对象创建与使用2、 练习目标 掌握如何创建类的对象 掌握如何使用两个或者多个变量引用同一个实例对象。3、 需求分析在程序中,一个对象可能在多处使用,这样就可能需要有多个变量来引用这个对象。为了让初学者更好地掌握对象的创建和使用,本案例将基于案例3-1,创建三个学生对象,它们的引用变量分别是s1、s2和s3,首先分别使用s1和s2引用,为name和age赋值,然后调用speak()方法,最后将s2变量赋值给s3, s3也调用speak()方法。4、 设计思路(实现原理)1)编写Example01类2)在main()方法中,创建Student类的第一个对象,其引用变量为s1,使用s1调用name和age变量分别为它们赋值为“张三”和“19”,然后调用speak()方法。3)创建Student类的第二个对象,其引用变量为s2,使用s2分别为name和age赋值为“李四”和“20”,然后调用speak()方法。4)创建Student类的第三个对象,其引用变量为s3,将s2的值赋给s3,然后使用s3调用speak()方法。二、案例实现public class Example01 public static void main(String args) Student s1 = new Student();s1.name=张三;s1.age=19;s1.speak(); Student s2 = new Student();s2.name=李四;s2.age=20;s2.speak(); Student s3 = new Student();s3=s2;s3.speak();运行结果如图3-1所示。图3-1 运行结果三、案例总结1、Student s3 = s2这句代码的作用是将s2引用的内存地址赋值给s3,换句话说,就是使变量s3和s2引用了同一个Student对象,因此s3.speak()方法和s2.speak()方法打印的结果相同。为了更加深刻地了解这句代码的含义,下面通过一张内存图来演示,具体如图3-2所示。图3-2 内存图2、可以使用两个或者多个变量引用同一个实例对象,只要通过其中一个变量对该对象的属性进行修改,使用其它引用变量访问时,访问的都是修改后的属性。案例3-3 类的封装一、案例描述1、 考核知识点编号:00103004名称:类的封装2、 练习目标 了解为什么要对类进行封装 了解如何实现类的封装3、 需求分析在案例3-2中,s1对象的年龄是可以随便赋值的,如果将age的值赋值为-30,显然违背了事实。为了解决这类问题,我们需要对类进行封装,防止外界对类中的成员变量随意访问。为了让初学者更好地掌握类的封装,本案例将使用private关键字对成员变量name和age进行私有化,同时分别提供一个setName(String n)和setAge(int a)方法用于外界的访问,其中setAge(int a)中需要对age进行判断。4、 设计思路(实现原理)1) 编写测试类Example02,将属性age的值设为-30,演示不合理现象。2) 对Student类进行修改,将name和age属性使用private修饰,然后定义getName()、setName(String n)、getAge()和setAge(int a)四个对外访问name和age的方法。3) 在setAge(int a)方法中对传入的参数进行检查,如果输入值为负数,则打印出“设置的年龄不合法”,如果不为负数,才将其设置为age属性的值。4)对Example02类进行修改,在main()方法中创建Student类的实例对象,通过调用对象的setName(String n)和setAge(int a)方法来设置的name属性和age属性值,并调用speak()方法。二、案例实现1、定义Example02类,代码如下所示:public class Example02 public static void main(String args) Student s1 = new Student();s1.name = 小新;s1.age = -30;s1.speak();运行结果如图3-3所示。图3-3 运行结果 从上图可以看出,当将age的值设置为-30后,程序不会报错,但却违背了现实。2、对Student类进行封装,其代码如下:class Student private String name = 张三;private int age = 19;public String getName() return name;public void setName(String n) name = n;public int getAge() return age;public void setAge(int a) / 对传入的参数进行检查if(a 0)System.out.println(设置的年龄不合法);elseage = a;void speak() System.out.println(我的名字是 + name + ,今年 + age + 岁);public class Example02 public static void main(String args) Student s1 = new Student();s1.setName(小新);s1.setAge(-30);s1.speak();运行结果如图3-4所示。图3-4 运行结果三、案例总结1、Student的name和age属性使用private关键字修饰为私有后,在Example02类中不能再使用s1.name和s1.age的方式访问这两个属性,只能通过public类型的setName(String n)和setAge(int a)方法进行访问。在上面的代码中,调用setAge(int a)方法时的传入参数为-30,由于参数小于0,会打印出“设置的年龄不合法”,并不会将负数赋值给age属性。由此可见,只要实现了封装就能对外界的访问进行控制,避免对私有变量随意修改而引发问题。2、思考一下:定义一个Division类(除法),类中定义两个int类型的私有成员变量dividend(被除数)和divisor(除数),默认值都为1。定义四个公有方法setDividend(int mDividend )、getDividend()、setDivisor(int mDivisor)和getDivisor(),用于对私有属性进行设置和访问。在setDivisor(int mDivisor)方法中对传入的参数进行检查,如果传入值为零,则打印“除数不能为零”,如果不为零,才将其设置为divisor属性的值。定义Example03类,在类的main()方法中创建Division对象,分别调用setDividend(int mDividend)和setDivisor(int mDivisor)方法给两个私有属性dividend和divisor赋值,然后打印出dividend和divisor的结果。(1)定义Division类,代码如下所示:public class Division private int dividend = 1;private int divisor = 1;public void setDividend(int mDividend) dividend = mDividend;public int getDividend() return dividend;public void setDivisor(int mDivisor) if (mDivisor = 0) System.out.println(除数不能为零); else divisor = mDivisor;public int getDivisor() return divisor;(2)定义Example03类,代码如下所示:public class Example03public static void main(String args) Division division = new Division();division.setDividend(10);division.setDivisor(0);int dividend = division.getDividend();int divisor = division.getDivisor();System.out.p
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号