第八天
来源:互联网 发布:电脑花样机打版软件 编辑:程序博客网 时间:2024/05/05 05:47
面向对象
一、谈谈什么是面向对象的思维
二、Java中的面向对象(类和对象)
掌握面向对象的基本语法:Java最基本的单位是类
在Java中有两个重要的概念,类和对象。
身高,年龄,性别,星座,血型,省份
现有数据类型不能够表示这么多信息?
解决方案:创建一个类型来表示这些信息
案例1:创建一个老师类
Public class 类名{
数据类型 变量名;
访问修饰符 返回值类型 方法名(参数列表){
方法体;
}
}
案例2:创建一个老师对象
类已经有了,但是类是抽象的概念,真正可以干活的是具体的对象,怎么具体化?
对象
创建对象的语法是什么?
类名 对象名 = new 类名();//这跟创建数组类似
对象名.属性
对象名.方法
三、封装及this
封装有两层含义,对功能的封装,比如就是我们的方法,方法就代表一个功能的实现;
另一层含义,是对数据的封装,比如手机的价格等等
问题:
上述案例都有共同的问题,老师的年龄或手机的价格都可以给其负数,但应该是不合理的,怎么解决这样的问题?
Java为我们提供了一种解决方案(面向对象的三大特征之一:封装)
步骤:
1.属性私有化
2.对属性提供get和set方法
新问题:
名字相同的问题
解决方案引入this关键字
案例演示:
编写标准的封装特性代码,分别解决上述的学生和手机类存在的问题
this访问本类的构造方法:
小结:
l this访问本类的成员属性
l this访问本类的成员方法
l this访问本类的构造方法(讲到构造方法的时候,我们再来补充)
四、构造方法
什么是构造方法,当我们要创建一个对象的时候就会使用到构造方法,可以实现对象的创建及对象信息的初始化工作
构造方法的使用及细节
1.构造方法的语法格式
访问修饰符 类名(参数列表){
方法体;
}
2.默认构造方法
3.带参的构造方法
4.默认特性,系统默认会给我们提供一个无参的构造方法
练习:采用带参的构造方法来实现对象的创建,并验证系统提供无参构造方法的机制。
五、考点:成员变量和局部变量的区别
成员变量和局部变量的区别?笔试考点
成员变量:
定义在类中,跟成员方法同级别
局部变量:
方法的参数,或者定义在方法内的变量
(1),位置不同,导致作用域不同
(2),生命周期不同
(3),内存的位置不同(后面讲对象内存图时再讲)
(4),初始值不同,局部变量默认不给初始化,需要你自己去初始化,才能使用
(5),奇葩考点,成员变量和局部变量同名的情况,考优先级问题
六、作业
1.课堂案例
2.举生活案例说明面向对象和面向过程的思想区别
面向过程:面向过程的思想是把一个项目、一件事情按照一定的顺序,从头到尾一步一步地做下去,先做什么,后做什么,一直到结束。这种思想比较好理解,其实这也是一个人做事的方法。
面向对象:面向对象的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更小的部分,每一部分负责什么方面的功能,最后再由这些部分组合而成为一个整体。这种思想比较适合多人的分工合作,就像一个大的机关,分成各个部门,每个部门分别负责某样职能,各个部门可以充分发挥自己的特色,只要符合一定前提就行了。
比如:在一个玩具工厂。
从面向过程来看,是三天生产飞机,三天生产火车,三天生产船,再过一天运去码头销往海外。
从面向对象来看,是分:生产部,监督部,销售部,采购部,包装部。
3.编写一个学生类,我们关注姓名,年龄,学历等信息,要求年龄必须在19-40岁之间,默认为19,学历必须是大专,本科,研究生这几个值的范围内,默认为大专。创建对象,测试其相关方法
代码如下:
public class Student1 {String name;private int age;private String degree;public void setAge(int age){if(age>=19||age<=40){this.age = age;}else{this.age = 0;System.out.println("默认为19");}}public void setDegree(String degree){if(!degree.equals("大专")&&!degree.equals("本科")&&!degree.equals("研究生")){this.degree = degree;}else{this.degree = "大专";System.out.println("默认为大专");}}public int getAge(){return age;}public String getDegree(){return degree;}}
public class Student1Test {public static void main(String[] args){Student1 student = new Student1();student.setAge(20);student.name = "易建联";student.setDegree("本科");System.out.println("名字:"+student.name);System.out.println("学历:"+student.getDegree());System.out.println("年龄:"+student.getAge());}}
4.封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩,封装方法,求总分,平均分,最高分,最低分,以及打印学生的信息。创建对象,测试其相关方法
代码如下:
public class Student2 {private String name;private int age;private String sex;private int English;private int Chinese;private int Math;public void setAge(int age){this.age = age;}public void setName(String name){this.name = name;}public void setSex(String sex){this.sex = sex;}public void setEnglish(int English){this.English = English;}public void setChinese(int Chinese){this.Chinese = Chinese;}public void setMath(int Math){this.Math = Math;}public int getAverage(){return (Math+English+Chinese)/3;}public int getTotal(){return Math+English+Chinese;}public int getMaxGrade(){int a = Math>English?Math:English;int b = Chinese>a?Chinese:a;return b;}public int getMinGrade(){int a = Math<English?Math:English;int b = Chinese<a?Chinese:a;return b;}public void showInfo(){System.out.println("名字:"+name);System.out.println("年龄:"+age);System.out.println("性别:"+sex);}}
public class Student2Test {public static void main(String[] args){Student2 student = new Student2();student.setAge(20);student.setName("易建联");student.setSex("男");student.setEnglish(118);student.setChinese(103);student.setMath(118);student.showInfo();System.out.println("总分:"+student.getTotal());System.out.println("平均分:"+student.getAverage());System.out.println("最高分:"+student.getMaxGrade());System.out.println("最低分:"+student.getMinGrade());}}
5.难度:编写一个随机点名系统,两个功能,一个是抽取学员回答问题,一个是记录学员被命中的次数
本次抽中学员为:保罗
是否继续抽取学员回答问题?(y/n)
y
本次抽中学员为:韦德
是否继续抽取学员回答问题?(y/n)
y
本次抽中学员为:安东尼
是否继续抽取学员回答问题?(y/n)
y
本次抽中学员为:科比
是否继续抽取学员回答问题?(y/n)
y
本次抽中学员为:安东尼
是否继续抽取学员回答问题?(y/n)
y
本次抽中学员为:保罗
是否继续抽取学员回答问题?(y/n)
y
本次抽中学员为:安东尼
是否继续抽取学员回答问题?(y/n)
n
谢谢使用!本次学员命中信息如下:
姓名 命中次数
科比 1
詹姆斯 0
安东尼 3
保罗 2
韦德 1
Student
name+count
String[]
Student[]
代码如下:
import java.util.Scanner;public class dianMing{public static void main(String[] args){Student3[] stu = new Student3[5];for(int i = 0;i<=4;i++){Student3 stu1 = new Student3();stu[i]=stu1;}stu[0].setInfo("科比");stu[1].setInfo("詹姆斯");stu[2].setInfo("安东尼");stu[3].setInfo("保罗");stu[4].setInfo("韦德");Scanner sc = new Scanner(System.in);int lucky;String choose;do{lucky = (int)(Math.random()*5);System.out.println("本次命中学员为:"+stu[lucky].name);stu[lucky].count++;System.out.println("是否继续抽取学员回答问题?(y/n)");choose = sc.next();}while(choose.equals("y"));System.out.println("谢谢使用!本次学员命中信息如下:");System.out.println("姓名命中次数");for(int i = 0;i<=4;i++){System.out.println(stu[i].name+""+stu[i].count);}}}
public class Student3 {String name;int count = 0;public void setInfo(String name){this.name = name;}}
- 第八天
- 第八天
- 第八天
- 第八天
- 第八天
- 第八天
- 第八天
- 第八天
- 第八天
- 第八天
- 第八天
- 第八天
- 世界杯第八天
- IBM实习第八天
- 第八天 架构设计
- 上海-项目-第八天
- 第八天 多线程
- 第八天:听课笔记
- For input string : "null"
- URL?param=问号传参中文乱码的解决办法
- Ubuntu14.04下C++程序编辑、编译、运行入门篇
- 程序员面试经典--字串压缩
- OVS vxlan 底层结构分析
- 第八天
- CSS创建三角形(小三角)的几种方法
- windows虚拟机性能调优
- 一种反射机制
- Windows 双击打开程序
- expected declaration specifiers or '...' before string constant
- jquery 获取父级元素、子级元素、兄弟元素的方法
- 使用QSignalMapper 创建按钮数组同时响应一个事件
- ssh登陆认证过程详解