## 面向对象 ##
> **面向过程:当需要实现一个功能时,每个具体的步骤都得自己写,亲力亲为
> 面向对象:当需要实现一个功能时,不关心具体的步骤,找一个已经具有该功能的东西替我做事**
示例代码:
import java.util.Arrays;
public class a05_面向对象 {
public static void main(String[] args) {
int[] array01 = { 0,1,5,4,6};
// 使用两种不一样的方法来打印数组
// 使用面向过程
System.out.print("[");
for (int i = 0; i < array01.length; i++) {
if (i == array01.length - 1){
System.out.println(array01[i] + "]");
}else {
System.out.print(array01[i] + ", ");
}
}
System.out.println("-------------------------------------------");
// 使用面向对象
// 找一个JDK给我们提供好的类
// 里面有toString方法直接提供这个效果
System.out.println(Arrays.toString(array01));
}
}
![在这里插入图片描述][20200725113800410.png]
#### 1、介绍 ####
> a)面向过程强调的是步骤,面向对象强调的是对象
> b)面向对象三大基本特征:**封装、继承和多态**
#### 2、类和对象的关系 ####
> a)**类**:是一组相关**属性**和**行为**的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物
> b)**属性**(成员变量):就是该事物的状态信息 | **行为**(成员方法):就是该事务能够做什么
> c)类是对一类事物的描述,是抽象的 | 对象是一类事物的实例,是具体的
> d)类是对象的模板。对象是类的实体
> 例如下图,类就相当于设计图,对象相当于真正的手机
> ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDgzODU4OQ_size_16_color_FFFFFF_t_70]
> e)**注意事项**:
> 1.成员变量是直接定义在类当中,在方法外
> 2.成员方法不要写static关键字
> e)过程
> 1.导包:指出需要的类在什么位置
> `import 包名称.类名称`
> `import java.util.Arrays;`
> 对于和当前类属于同一个包的情况,可以省略到导包语句不写
> 2.创建
> 格式:`类名称 对象名 = new 类名称();`
> `Student stu = new Student();`
> 3.使用
> 使用成员变量:`对象名.成员变量名`
> 使用成员方法:`对象名.成员方法名(参数)`
> 4.**局部变量和成员变量的区别**
> ⚪**定义的位置**不一样
> 局部变量定义在方法内部
> 成员变量定义在方法外部,直接写在类当中
> ⚪**作用范围**不一样
> 局部变量只有在方法当中才可以用,出了方法就不能用了
> 成员变量则是在整个类都可以使用
> ⚪**默认值**不一样,
> 局部变量没有默认值得自己赋值
> 全局变量没有赋值的话会有默认值
> ⚪内存位置不一样
> 局部变量位于栈内存
> 成员变量位于堆内存
> ⚪生命周期不一样
> 局部变量随着方法进栈诞生,出栈消失
> 成员变量随着对象创建诞生,对象被垃圾回收而消失
> ⚪方法的参数也是局部变量
> 相关代码:
//a05_面向对象.java
public static void main(String[] args) {
// 导包
a05_面向对象01 stu = new a05_面向对象01();
// 使用成员变量
System.out.println("未赋值↓");
System.out.println(stu.name);
System.out.println(stu.age);
stu.age = 18;
stu.name = "jack";
System.out.println("赋值后↓");
System.out.println(stu.name);
System.out.println(stu.age);
// 使用成员方法
stu.eat();
stu.sleep();
stu.study();
}
//a05_面向对象01.java
public class a05_面向对象01 {
// 成员变量(全局变量)
String name;
int age;
// 成员方法
public void study(){
System.out.println("学习");
}
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
![在这里插入图片描述][20200725184802403.png]
#### 3、使用对象类型作为方法参数####
内存变化过程
相关代码:
//a05_面向对象.java
public static void main(String[] args) {
a05_面向对象01 stu01 = new a05_面向对象01();
stu01.name = "lucy";
stu01.age = 18;
idea01(stu01);
}
public static void idea01(a05_面向对象01 parma) {
System.out.println(parma.name);
System.out.println(parma.age);
parma.study();
parma.sleep();
parma.eat();
}
//a05_面向对象01.java
public class a05_面向对象01 {
// 成员变量(全局变量)
String name;
int age;
// 成员方法
public void study(){
System.out.println("学习");
}
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
![在这里插入图片描述][20200726115152402.png]
[20200725113800410.png]: /images/1613552077542.png
[watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDgzODU4OQ_size_16_color_FFFFFF_t_70]: /images/1613552064323.png
[20200725184802403.png]: /images/1613552052443.png
[20200726115152402.png]: /images/1613552040288.png