1.面向对象思想
面向对象是基于面向过程的编程思想.
面向过程是面向对象的基础.
面向过程: 其实就是面向着具体的每一个步骤和过程.(程序员是实施者)
面向对象: 强调的是对象,然后由对象调用功能. (程序员是指挥者)
举例: 买电脑
面向过程:了解电脑—了解自己的需求—找到对应的参数信息-到电脑城-讨价还价—买了电脑,帮回寝室
面向对象:我想买台电脑—叫班长帮我去买回来—班长给我送到寝室,我就可以用了.
举例:吃饭:
面向过程: 买菜—洗菜—切菜-炒菜-煮饭-吃饭-洗碗
面向对象: 我想吃饭 –美团外面 – 送过来,喂你吃.
2.面向对象的开发,设计和特征
面向对象开发:就是不断的创建对象,使用对象,指挥对象做事情.
面向对象的设计:其实就是管理和维护对象之间的关系.
面向对象的特征:封装、继承、多态
3. 类与对象
/* * 类的定义 * 现实世界是由事物组成的.那么,我们怎么表示一个事物? * 事物由两部分组成 * 属性:事物的描述信息 * 行为:该事物能干什么 * * java中,我们用类来表示事物. * 类也由2部分组成(就现在而言): * 成员变量:对应事物的属性 * 成员方法:对应的是事物的行为 * * 类是一组相关属性和行为的集合. * * 举例: * * 学生 * 属性:姓名,年龄,... * 行为:学习,睡觉 * * 学生类 * 成员变量:name,age * 成员方法:study(),sleep() * * 那么,我们如何定义一个类? * 格式: * class 类名 { * 成员变量 * 成员方法 * } * * 如何定义成员方法:跟以前定义方法类似,只是去掉static关键字 */ class Student { // 成员变量 String name; int age; // 成员方法 public void study() { System.out.println("good good study, day day up!"); } public void sleep() { System.out.println("学生上课不能睡觉"); } } /* * 学生类写玩了,我如何测试自己写得对不对?如何调用学生类中的成员变量和成员方法? * * 如何创建对象? 格式:类名 对象名 = new 类名(); 如何调用成员变量? 格式:对象名.成员变量名; 如何调用成员方法? * 格式:对象名.成员方法名(); * * 注意: * (1) 现在的java文件中有多个类,这是为了上课的方便,以后一个java文件中只能有一个类. * (2) Student类前面不能有public修饰符.一个java文件中,只能有一个公共的类 * (3) 测试类的名字必须和java文件的名字相同. * */ //测试类 public class Demo { public static void main(String[] args) { // 创建对象 Student s = new Student(); // 调用对象s的成员变量 s.name = "班长"; s.age = 19; System.out.println(s.name + "---" + s.age); // 调用对象s 的成员方法 s.study(); s.sleep(); } } |
/* * 定义一个手机类 * * 分析: * 手机(事物) * 属性:品牌,价格,颜色 * 行为:打电话,玩游戏 * * 手机类(Phone) * 成员变量:brand,price,color * 成员方法:call(),playGame() */ class Phone { // 成员变量 String brand; double price; String color; // 成员方法 public void call() { System.out.println("手机都能打电话"); } public void playGame() { System.out.println("新工科班的学生不能用手机玩游戏"); } } // 测试类 public class Demo2 { public static void main(String[] args) { // 创建Phone对象 Phone p = new Phone(); //调用成员变量 p.brand = "华为"; p.price = 3999; p.color = "土豪金"; System.out.println(p.brand + "--- " + p.price + "---" + p.color); //调用成员方法 p.call(); p.playGame(); } } |
4.对象的内存图
5.成员变量和局部变量的区别
(1) 在代码中的位置不同.
成员变量在类中方法外
局部变量在方法体内或方法参数的位置
(2) 在内存中的位置不同
成员变量:存放在堆区
局部变量:存放在栈区
(3) 生命周期不同
成员变量:随着对象的存在而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,调用结束消失
(4) 默认值不同
/* * 成员变量和局部变量的默认值 */ class Student01 { // 成员变量 String name; int age; // 成员方法 public void study() { System.out.println("good good study, day day up!"); } public void sleep() { System.out.println("学生上课不能睡觉"); } public void fun(){ int a;//a是局部变量 //System.out.println(a);//局部变量没有默认值 } } public class Demo3 { public static void main(String[] args) { Student01 student = new Student01(); //成员变量有默认值 //String类型的成员变量默认值是null //int类型的成员变量默认值是0 //其他数据类型的默认值是什么?自己编程看看 System.out.println(student.name+"---" + student.age); } } |
/* * 成员变量和局部变量的访问问题 */ class Thecher { String name; String age; public void fun1(){ System.out.println(name); } public void fun2(){ name = "刘老师"; System.out.println(name); } public void fun3(String name){ name = "刘老师"; System.out.println(name); } public void fun4(String name){ name = "刘老师"; System.out.println(name); } } public class Demo4 { public static void main(String[] args) { Thecher t = new Thecher(); //t.fun1(); //t.fun2(); /*t.name="廖老师"; String name = "陈老师"; System.out.println(name);*/ //t.fun3("刘德峰老师"); t.name="廖老师"; System.out.println(t.name); } } |
6. 匿名对象
匿名对象就是没有名字的对象.
应用场景:
(1) 仅仅只调用一次方法,以后再也不用了.
思考 匿名对象有什么好处?
匿名对象调用方法结束后,就会马上变成垃圾,被垃圾回收器回收.
(2) 当作方法的实参传递.
class Student { // 成员变量 String name; int age; // 成员方法 public void study() { System.out.println("good good study, day day up!"); } public void sleep() { System.out.println("学生上课不能睡觉"); } } public class Demo { public static void main(String[] args) { //以前的做法 Student s = new Student(); //s.study(); //匿名对象的使用 //new Student().study(); //创建一个学生对象作为方法的参数 //fun(s); //用匿名对象作为方法的参数 fun(new Student()); } public static void fun(Student s){ s.sleep(); } } |
作业:
1. 自己编写学生类和手机类.
2. 自己编写一个Person类.并测试.