【Java 02】 面向对象(上) - 类、对象、成员变量、方法

一 面向对象

大纲
在这里插入图片描述

  1. Java类及类的成员:属性、方法、构造器;代码块;内部类
  2. 三大特征:封装性、继承性、多态性(抽象性)
  3. 其他关键字:this、super、static、final、abstract、interface、package、import…

1 面向过程(POP) 与 面向对象(OOP)

  1. 面向过程(Procedure Oriented Programming):强调的是功能行为,以函数为最小单位,考虑怎么做

    //C
    //① 把冰箱门打开
    //② 把大象塞进冰箱
    //③ 把冰箱门关闭
    
    void FriOpen(){
        
    }
    
    void EleInFri(){
        
    }
    
    void FriClose(){
        
    }
    -----------
    int main(){
        FriOpen();
        EleInFri();
        FriClose();
    }
    
  2. 面向对象(Object Oriented Programming):强调的是具备了功能的对象,以类/对象为最小单位,考虑谁来做

    //Java
    class 大象{
        public static void in(){
                “装进大象”
        } 
    }
    
    class 冰箱{
        public static void open(){
                “打开冰箱门”
        }
        public static void close(){
                “关闭冰箱门”
        }
    }
    ------------------
    class TestDemo{// 人 \ 测试类
        public static void main(String[] args){
            冰箱.open();//冰箱调用开门
            大象.in();//大象调用进去
            冰箱.close();//冰箱调用关门
        }
    }
    

    像这样子,在解决问题的过程中,分析出每个参与解决问题的对象(冰箱),并确定这些对象的行为(开门,装大象,关门),最终由这些对象解决问题的编程思想,被称为面向对象的编程思想(Object Oriented Programming,简称OOP)。

    在面向对象编程中,这张图纸就被称为,而按照这张图纸生产出来的一台台冰箱,则被称为类的实例或者对象,这一生产过程,就被称为类的实例化

    也许有人会问:我要这图纸有何用?我写个函数,一样可以实现这个功能,只要在需要开门的时候调用这个函数就行了,又何需考虑自动开门的冰箱怎么设计?

    这个想法固然好,但问题在于,每当冰箱换个型号,我们就要因为其中的微小变动而重写一遍这个函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RJOQ2EAQ-1596500527479)(C:\Users\吴淼杰\Desktop\笔记\Java\Snipaste_2020-08-04_01-17-20.png)]

程序员从面向过程的执行者转化成了面向对象的指挥者

2 类和对象

两个要素:类(Class)、对象(Object)

  • 是对一类事物的描述,是抽象概念的定义 = 抽象概念的人

  • 对象实际存在的该类事物的每个个体 = 实实在在的人

2.1 类

  • 属性(field):对应类中的成员变量
  • 行为(method):对应类中的成员方法
class Person{
    
    //属性
    Sting name;
    int age;
    boolean isMale;
    
    //方法
    public void eat(){
        ----
    }
    public void sleep(){
        ----
    }
    public void talk(String language){
        ----
    }
    
}

2.2 对象

java类的设计完成之后,就是java类的实例化,即创建类的对象(类的实例化 = 实例化类 = 创建类的对象)

public class PersonTest{
    public static void main(String[] args){
        //创建类的对象
        Person p1 = new Person();
        
        //调用对象的结构:属性、方法
        //调用属性:“对象.属性”
        p1.name = "Tome";
        p1.isMale = true;
        
        //调用方法:“对象.方法”
        p1.eat();
        p1.sleep();
        p1.talk("----");
    }
}

2.3 类和对象的使用

  1. 创建类,设计类的成员和方法
  2. 创建类的对象
  3. 通过“对象.属性” “对象.方法”调用对象的结构

3 赋值与复制

将p1变量保存的对象地址值赋给p2,导致p1和p2指向堆空间的同一个实体

Person p2 = p1;
Sytem.out.println(p2.name);//Tom

p2.age = 10;
Sytem.out.println(p1.age);//10

4 内存解析

在这里插入图片描述
在这里插入图片描述

5 成员变量(属性)与局部变量

5.1 声明位置不同

成员变量:类中方法外面

局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中),

即在方法内√、方法形参√、代码块内、构造器形参、构造器内部…的变量

5.2 内存位置不同

成员变量:堆内存的对象中(而static修饰的放在方法区中的静态区)

局部变量:栈内存的方法中

5.3 生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的运行而存在,随着方法的弹栈而消失

5.4 初始化不同

成员变量:有默认初始值

整型(byte、short、int、long):0

浮点型(float、double):0.0

字符型(char):0(或‘\u0000’)

布尔型(boolean):false

引用数据类型(类、数组、接口…):null

局部变量:没有默认初始值,使用之前需要赋值,否则编译器会报错

6 方法

6.1 声明

权限修饰符 返回值类型 方法名(形参列表){
    方法体
}
pubili void eat(String foods){
    System.----.println("----");
}
6.1.1 权限修饰符

private、public、缺省、protected

static、final、abstract

6.1.2 返回值类型
6.1.3 方法名
6.1.4 形参列表
6.1.5 方法体
  • 注意递归要设计好,否则会导致栈溢出
  • 可以调用自身的属性,方法
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页