面向对象
一、谈谈什么是面向对象的思维
二、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,学历必须是大专,本科,研究生这几个值的范围内,默认为大专。创建对象,测试其相关方法 代码如下:
代码如下:
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;
}
}