战之都 发表于 2020-5-29 10:21

【笔记】小小白的java从0开始,第四节

# 面向对象
##面向对象概述
        “面向对象”(英语:Object Oriented,简称OO)是一种以事物为中心的编程思想。
       
面向对象程序设计(英语:Object-oriented programming,缩写:OOP),是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

面向对象是相对于面向过程而言的(c则是一个典型的面向过程的语言),站在面向对象的角度去看问题,你则是对象的动作指挥者。如果站在面向过程的角度去看问题,你则是动作的执行者。
面向对象与面向过程
举例解释比如:
### 面向过程:

| 买电脑 |
| -------- |
| 查资料    |
| 电脑城砍价    |
| 被坑    |
| 痛苦归来    |

### 面向对象


| 买电脑 |
| -------- |
|找对象。懂电脑的人(小明)    |
| 小明.砍价   |
| 小明.检测电脑    |
| 电脑成功购买   |

PS:这个对象不是脱单的那个对象

## 区别
### 面向过程:
强调的是功能行为,面向过程”是一种以过程为中心的编程思想。“面向过程”他们不支持丰富的“面向对象”特性(比如继承、多态),就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向过程在这一系列工作的执行中,强调的是工作的执行
### 面向对象:
强调的是具备某种功能的对象
其实以后开发程序就是找对象和创建对象(没有对象创建对象)的过程

**开发**就是一个寻找对象,使用对象的过程,没有对象就创建对象
**设计**就是维护对象与对象之间的关系

## 使用Java描述事物
我们写程序就是为了方便日常生活,其实就是将生活中的事物通过编程语言使用程序描述,我们使用Java语言描述生活中的事物
### 案例:
通过Java语言定义一个汽车类,并生产出汽车,有颜色,轮胎个数,有跑的功能。
**分析:**如何描述现实世界中的事物?其实是描述该事物的属性和行为,汽车具有颜色和轮胎数的属性,具备跑的行为。
### 如何使用Java语言进行转换?
根据对应关系:
**属性**:类中的成员变量
**行为**:类中的成员函数(方法)
那么定义Java类就是定义一个类的成员。汽车类具备的成员是:颜色,轮胎数,运行方法。
Car类定义流程:
```
该类是用来描述汽车
属性:
        轮子
        颜色
行为:
        跑
       
        public class Car{
                //描述轮子
                public int wheel;
                //描述颜色
                public String color;
               
                //行为:会跑,一个什么颜色,几个轮子的车在跑
                public void run() {
                        System.out.println("一辆“+wheel+"个轮子”+color+”色的五菱宏光在马路上嘟嘟嘟……);
                }
        }
```

## 创建对象
### 创建Car对象
1.使用**new关键词**,就像new数组一样
2.需要给型的汽车起一个名字,**car**
3.变量都是有**类型**的,car属于什么**类型**,属于**Car类型**,叫做**类类型**
4.`Car car=new Car();`

图纸画好了,类定义成功了。如何根据图纸生产汽车,在Java中如何根据**类**来生产一个**对象**。

Java中生产汽车比较简单,通过一个关键字”new”, 通过 **newCar(); **就在内存中产生了一个实体,汽车对象就生产出来了。

汽车对象生产出来后,还没有名字,为了方便使用,需要起一个名字。就用小写的C 来表示新车的名字。

Java中的变量都需要有**类型**。那么c 是什么类型呢?c 是**Car类型**,所以c也叫做**类类型变量**。

```
//测试汽车类

public class CarTest {
        public static void main (String[] args) {
                //要让汽车跑起来,应该是一个实实在在的汽车
                //所以需要创建汽车类的对象
                //怎么创建对象?   使用new关键字
                //new Car(); 就是创建对象,为了方便使用该对象,
                //给该对象起一个名字与变量一样
                //Java作为一门强类型的编程语言,必须指定变量的数据类型,
                //类型就是类名
               
                car = new Car();
                //调用汽车跑的方法
                //如何使用成员? 通过对象名 (car) ,的方式调用成员
                //给车的颜色和轮子赋值
                car.wheel = 4;
                car. color = "绿";
                car.run();
        }
}
```

## 部变量和成员变量
### 局部变量和成员(全局)变量的区别
                  0.定义位置
                          局部变量:声明在局部位置,方法或者语句(for循环等语句)上
                          成员变量:定义在类中,
                  1.存储位置
                          局部变量:局部变量在栈内存存放
                          成员变量:存储在堆内存
                  2.默认值
                          局部变量:没有默认值,必须初始化
                          成员变量:有默认值,默认值与数据类型有关
                  3.生命周期
                          局部变量:根据语句的结束自动释放
                          成员变量:随着对象的存在而存在,随着对象的消失而消失
                  4.作用范围
                          局部变量:作用在方法或语句中
                          成员变量:作用在整个类中
        注意:如果成员变量和局部变量名相同,遵循就近原则,使用局部的
       
        `public class VariableDemo {
                //全局变量
                public int i;
                public void show() {
                        //局部变量
                        int i = 10;
                        System.out.println(i);
                }
                public static void main(String[] args) {
                        //创建对象,可以在任意位置创建,只要语法不错
                        VariableDemo vd = new VariableDemo();
                        //调用方法
                        vd.show();
                }
        }`
       
##         匿名对象
概述:匿名对象就是没有名字的对象

应用:
        0.调用且只调用一次方法时使用
        1.可以将匿名对象当做方法的实际参数进行传递
好处:匿名对象会直接变成垃圾回收,节省内存空间
注意:如果该对象要频繁使用,就给对象起名字
案例:将汽车送到修理厂进行改装
### 汽车类
```
        public class SportCar{
                //描述轮子
                public int wheel;
                //描述颜色
                public String color;
                //速度
                public double speed;
               
                //行为:跑
                public void run() {
                        System.out.println("一辆"+color+"色"+wheel+"个轮子的红标思域在以"+speed+"迈狂飙");
                }
        }
```

### 修理厂类
```
public class repairFactory{
        public String name;//名字
        public String address;//位置

        //改装,需要送进来一辆车,需要定义形式参数
        public void repair(SportCar sportCar){
                //将传进来的车修改
                sportCar.color = "荧光紫";
                sportCar.wheel = 4;
                sportCar.speed = 120;
                System.out.println("欢迎你下次再来"+address+name);
        }
}
```

### 测试类
```
//测试类
        public class SportTest{
                public static void main(String[] args){
                        //将车的对象创建出来
                        SportCar sc = new SportCar();
                        //赋值
                        sc.color = "白";
                        sc.speed = 60;
                        sc.wheeel = 8;
                        //将修理厂创建出来
                        RepairFactory repairFactory = new RepairFactory();
                        repairFactory.address = "中国钓鱼岛";
                        repairFactory.name = "中国钓鱼岛国际汽修厂";
                        //调用改装之前跑的方法
                        sc.run();
                        //调用修理厂改装的方法
                        repairFactory.repair(sc);
                        //再调用改装后跑的方法
                        sc.run();


                        /*
                        下面是另一种简洁而优雅的写法
                        // ------------------
                        //匿名对象,要让他跑
                        new SportCar().run();
                        RepairFactory repairFactory = new RepairFactory();
                        repairFactory.address = "中国钓鱼岛";
                        repairFactory.name = "中国钓鱼岛国际汽修厂";
                        //在创建对象时给对象赋值
                        repairFactory.repair(new sportCar());
                        */
                }
        }
```

战之都 发表于 2020-5-29 10:56

那年夏天52 发表于 2020-5-29 10:37
面对对象编程,可是我还没找到对象呀,目前只能面对基友

面对着基友面向对象编程{:301_1001:}

那年夏天52 发表于 2020-5-29 10:37

面对对象编程,可是我还没找到对象呀,目前只能面对基友

bie.ren 发表于 2020-5-29 11:40

写得非常详细,楼楼厉害

靓仔小黄 发表于 2020-5-29 20:36

那年夏天52 发表于 2020-5-29 10:37
面对对象编程,可是我还没找到对象呀,目前只能面对基友

可以自己new一个{:301_997:}

那年夏天52 发表于 2020-5-29 20:49

靓仔小黄 发表于 2020-5-29 20:36
可以自己new一个

我new三个,早中午各一位{:301_973:}

战之都 发表于 2020-5-30 08:49

那年夏天52 发表于 2020-5-29 20:49
我new三个,早中午各一位

就怕你一个也new不出来{:301_998:}

那年夏天52 发表于 2020-5-30 12:17

战之都 发表于 2020-5-30 08:49
就怕你一个也new不出来

我去,太扎心了老铁。{:301_980:}

靓仔小黄 发表于 2020-5-30 15:52

那年夏天52 发表于 2020-5-29 20:49
我new三个,早中午各一位

注意身体{:301_988:}
页: [1]
查看完整版本: 【笔记】小小白的java从0开始,第四节