面向对象 (1) 面向对象思想概述 第一步 第二步 (2) 面向对象思想概述 找对象(第一步,第二步) (3) 举例 买煎饼果子;洗衣服 (4) 面向对象的思想特点 是一种更符合我们思想习惯的思想; 可以将复杂的事情简单化; 将我们从执行者变成指挥者。 (5) 面向对象开发: 就是不断的创建对象,使用对象,指挥对象做事情 (6) 面向对象设计: 就是管理和维护对象之间的关系 (7) 面向对象的特征 封装 继承 多态
面向对象(类与对象概述) (1) 编程 为了把日常生活中实物用学习语言描述出来。 (2) 如和描述现实世界 属性:就是该事物的描述信息(事物身上的名词) 行为:该事物能做什么(事物身上的动词) (3) Java中最基本的单位是类,Java中用class描述事物也如此 成员变量:就是事物的属性 成员方法:就是事物的行为 (4) 定义类其实就是定义类的成员(成员变量和成员方法) 成员变量:和以前定义变量是一样的,只不过是位置发生了变化。在类中,方法外。 成员方法:和以前的定义方法是一样的,只不过是把static去掉,后面详解static的作用。 (5) 类和对象的概念 类:是一组相关的属性和行为的集合 对象:是该类事物的具体体现 举例: 类:学生 对象:具体的某个学生就是一个对象
面向对象(学生的定义) (1) 学生事物 (2) 学生类 (3) 案例演示 属性:姓名,年龄,性别 行为:学习,睡觉
class Student { String name; //姓名 int age; // 年龄 String gender; //性别 public void study() { //定义学习的方法 System.out.println(“学生学习”); } public void sleep() { //定义睡觉的方法 System.out.println(“学生睡觉”); } } 面向对象(手机类的定义) 属性:品牌(brand)价格(price) 行为:打电话(call),发信息(sendMessage),玩游戏(playGame) class Phone { String brand; int price; public void call() { System.out.println(“打电话”); } public void sendMessage() { System.out.println(“发信息”); } public void playGame() { System.out.println(“玩游戏”); } } 面向对象(学生类的使用) (1) 文件名问题 在一个java文件中写两个类:一个基本的类,一个测试的类。 建议:文件名称与测试类名称一致。 (2) 如何使用对象 创建对象并使用。 格式:类名 对象名 = new 类名(); (3) 如何使用成员变量呢? 对象名.变量名 Class Demo1_Student { public static void main(String[] args) { //创建对象格式:类名 对象名 = new 类名(); //对象名:就是合法的标识符,如果是一个单词所有字母小写,如果是多个单词,从第二个单词开始首字母大写 Student s = new Student(); //使用成员变量:对象名.变量名 s.name = “张三”; s.age = 23; System.out.println(s.name + “…” +s.age); //使用成员方法:对象名.方法名(…) s.study(); s.sleep(); } } class Student { String name; //姓名 int age; // 年龄 String gender; //性别 public void study() { //定义学习的方法 System.out.println(“学生学习”); } public void sleep() { //定义睡觉的方法 System.out.println(“学生睡觉”); } } 面向对象(手机类的使用) class Demo2_Phone { Public static void main(String[] args) { //创建对象 Phone p = new Phone(); //调用对象中的属性,并赋予值 p.brand = “锤子”; p.price = 998; System.out.println(p.brand + “…” +p.price); //调用成员方法 p.call(); p.sendMessage(); p.playGame(); } } class Phone { String brand; int price; public void call() { System.out.println(“打电话”); } public void sendMessage() { System.out.println(“发信息”); } public void playGame() { System.out.println(“玩游戏”); } } 面向对象(一个对象的内存图) 面向对象(两个对象的内存图) 面向对象(三个引用两个对象的内存图) 面向对象(成员变量和局部变量的区别) (1) 在类中的位置不同 成员变量:在类中的方法外。 局部变量:在方法定义中或者方法声明上。 (2) 在内存中的位置不同 成员变量:在堆内存(成员变量属于对象,对象进堆内存) 局部变量:在栈内存(局部变量属于方法,方法进栈内存) (3) 生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失。 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失。 (4) 初始化值不同 成员变量:有默认初始化值 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。注意事项: 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。 基本数据类型变量包括:byte,short,int ,long,float,double,boolean,char 引用数据类型变量包括:数组,类,接口,枚举
class person { String name ; //成员变量 Public void speak(int x) { int num; //x和num 都是局部变量 } } 面向对象(方法的形式参数是类名的时候如何调用) (1) 方法的参数是类名public void print(Student s){} //print(new Student()); 如果你看到了一个方法的形式参数是一个类型(引用类型),这里其实需要的是该类的对象。 class Demo_Student { public static void main(String[] args) { print(10); ptudent s = new Student(); //创建对象,并将对象的地址赋值给s print(s); } public static void print(int x) { //基本数据类型当作形式参数 System.out.println(x); } public static void print(Student stu) { //引用数据类型当作形式参数,将地址值S赋给stu Stu.name = “张三”; Stu.age = 23; Stu.speak(); } } 面型对象(匿名对象的概述和应用) (1) 什么是匿名对象 没有名字的对象 class Demo_Car { public static void main(String[] args) { Car c1 = new Car(); //创建有名字的对象 c1.run(); new Car().run(); //创建匿名对象 } } class Car { String color; int num; public void run() { System.out.println(“车运行”); } }(2) 匿名对象的应用场景 调用方法,仅仅只调用一次的时候。匿名对象可以节省代码;调用多次的时候,不适合使用,匿名对象调用完之后就是垃圾,可以被垃圾回收期回收。 匿名对象可以作为实际参数传递。
class Demo_Car { public static void main(String[] args) { method(new car()); method(new car()); } //抽取方法,提高代码的复用率 public static void method(car cc) { //将new car 的地址值赋值给cc cc.color = “red”; cc.num = 8; cc.run(); } class Car { String color; int num; public void run() { System.out.println(“车运行”); } } 面向对象(封装的概述) (1) 封装的概述 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。 (2) 封装的好处 隐藏实现细节,提供公共的访问方式。 提高代码的复用性。 提高安全性。面向对象(private关键字的概述和特点) (1) 人类赋值年龄的问题 (2) Private关键字的特点 A. 是一个权限修饰符 B. 可以修饰成员变量和成员方法 C. 被其修饰的成员只能在本类中访问 (3) 案例演示 封装和private的应用 a. 把成员变量用private修饰 b. 提供对应的getXxx()和setXxx()方法 c. Private仅仅是封装的一种体现形式,不能说封装就是私有的。 class Demo_Person { public static void main(String[] args) { Person p1 = new Person(); p1.name = “张三”; p1.setAge (-17); System.out.println(p1.getAge()); } class Person { String name; private int age; //用private堆age进行封装 public void setAge(int a) { //设置年龄 if(a > 0 && a < 200) { age = a; }else { System.out.println(“请回火星,地球不适合你”); } } public int getAge() { //获取年龄 return age; } public void speak() { System.out.println(name + “…” + age); } } 面向对象(this关键字的概述和应用) (1) this关键字的应用 代表当前对象的引用 (2) 案例演示: this的应用场景 用来区分成员变量和局部变量重名 class Demo_Person { public static void main(String[] args) { Person p1 = new Person(); p1.setName (“张三”); p1.setAge (17); System.out.println(p1.getName() + “…” + p1.getAge()); Person p2 = new Person(); p2.setName (“李四”); p2.setAge (24); System.out.println(p2.getName() + “…” + p2.getAge()); } } class Person { private String name; private int age; //用private对age进行封装 public void setAge(int age) { //设置年龄 if(a > 0 && a < 200) { this.age = age; //this.age表示成员变量 }else { System.out.println(“请回火星,地球不适合你”); } } public int getAge() { //获取年龄 return age; } public void setName(String name) { //设置年龄 this.name = name; } public void getName() { //设置年龄 return name; } } 面向对象(手机分类代码及其测试) 请把手机类写成一个标准类,然后创建对象测试功能。 class Demo_Phone { public static void main(String[] args) { Phone p1 = new Phone(); p1.setBrand (“三星”); p1.setPrice (5228); System.out.println(p1.getBrand () + “…” + p1.getPrice ()); p1.call; p1.sendMessage(); p1.playGame(); } } class Phone { private String brand; private int price; //Java bean public void setBrand (String brand) { //设置品牌 this.brand = brand; } public int getBrand() {//获取品牌 return this.brand; } public void setPrice (int price) { //设置价格 this. price = price; } public int getPrice () {//获取价格 return this. price; } public void vall() { System.out.println(“打电话”); } public void sendMessage() { System.out.println(“发短信”); } public void playGame() { System.out.println(“玩游戏”); } }