• CoreJava学习第五课 --- 进入第二阶段:面向对象编程思想


    面向对象编程思想

    1.面向过程

    ​ 从计算机执行角度出发 ,代码执行过程核心为从程序的运行过程出发,构建编程思路,例: 哥德巴赫猜想

    // 面向过程
        1 用户输入一个数n
        2 验证数字的正确性
            2.1 正确就继续向下
            2.2 错误就重复输入
        3 拆数    循环 n=a+b
        4.判断 a和b同为质数 则打印

    2.1对象

    计算机中的需求来自现实世界,现实世界是由对象组成。 

    对象:万物皆对象!


    对象有属性和方法:

      a.属性: 对象有什么
      b.方法: 对象能做什么

    2.2 对象间的关系:

        1. 继承关系    is    a      (一般--特殊  从属关系)
            例:宝马汽车是汽车
        2.  关联关系    has   a     (对象的属性又可以是另一个对象)
            例:汽车有发动机
        3.  依赖关系    use   a     (一个对象调用另外一个对象的方法)
            例:司机和汽车

    3.面向对象思想

    先找到解决问题所需要的对象,再建立对象间的关系, 以及利用对象所形成的过程.

    4.计算机如何处理现实中的对象

    计算机中的对象: 在计算机中,用一块特定的存储空间表示生活中的对象 
    计算机中的对象之间可以形成生活中对象之间的关系 (继承 关联 依赖)

    5.类的概念

    ​ 类是数据类型,对象是数据

    类: 对象共性的抽象, 是人对对象的认识, 是对象的模板

    6.类的属性(成员变量)【重点】

    ​ 属性: 是成员变量

    1.有默认值  数字类型默认值为0 ,boolean类型为false ,字符串类型为null
    2.作用范围: 全类内部
    3.成员变量可以和局部变量同名,同名时局部变量优先

    成员变量和局部变量在内存中不一样?

    7.类的方法

    ​java中没有函数的概念,函数是面向过程开发中的东西,在java中只有方法的概念。
    
    声明(5个部分组成): 修饰符(顺序无关紧要) 返回值类型 方法名 (形式参数表) 抛出的异常
        --->声明代表对象具有什么功能  
          
    实现: {}  代表对象怎么做

    8.方法重载【重要】

    方法重载 : 让对象方法由于参数表的不同所造成的差异,对用户屏蔽
    
    由编译器根据实参来匹配相应的方法 (编译时多态)
    
    方法重载:  方法名相同,参数表不同. 对返回值不做要求
    参数表不同: 参数个数不同,参数类型不同,参数类型排列不同    (如果只有形参名不同,不算重载)

    9.构造方法

    ​ 注:如果一个类中没有定义任何构造方法,则系统提供默认公开无参构造方法

    构造方法: 特殊的方法
    
    构造方法特点:
    1.没有返回值类型  区分构造方法和普通方法的唯一标志
    2.方法名必须和类名相同
    3.不允许直接调用, 在对象构造的过程中自动调用一次
    
    对象构造的三个步骤:(没有继承的情况)​
    1. 分配空间       属性被赋予默认值  ----> 根据对象的属性分配空间,不同对象所占的空间大小不同。
    2. 初始化属性     属性被赋予初始值
    3. 调用构造方法   属性通常被再次赋值
    class Student{
        //1. 分配空间  属性被赋予默认值:name被赋值为null,age被赋值为0,score被赋值为0.0
        String name;
        int age = 10;//2. 初始化属性  属性被赋予初始值:age被赋值为10
        double score;
        
        public Student(){
            age = 20;//3. 调用构造方法   属性通常被再次赋值
        }
        public Student(String n , int a , double s){
            name = n;
            age = a;
            score = s;
        }
    }

    10.new 创建对象

    ​a.创建对象: 类名 引用名 = new 类名(构造参数)
    ​b.访问对象的属性或调用对象的方法:
    ​  引用名.属性
    ​  引用名.方法()
    c.引用中存储对象的地址。 null表示空指针, 引用没有指向任何对象

    11.Java中变量的数据类型

    ​      Java中的变量按照数据类型划分,分为两种

            1.基本变量类型 : 存数值

            2.引用类型(除了 8 种基本类型之外) : 存对象的地址

    12.方法参数传递

    参数传递: 基本类型参数传值, 对象类型参数传地址 (形参和实参指向同一对象)
    //基本类型参数传值
    public class TestReference{
        public static void main(String[] args){
            
            int a = 10;
            int b = a; 
            b++;//b的值变成11
            System.out.println(a); //10
            
            changeInt(a);
            System.out.println(a); //10     
        }   
        static void changeInt(int a){
            a++;//changeInt()方法中的a变成11,但是没有返回给方法调用处,并没把方法返回值赋值给原来的a
        }
    }
    //对象类型参数传地址
    public class TestReference{
        public static void main(String[] args){
                
            MyClass mc  = new MyClass();
            MyClass mc2 = mc;//mc是一个引用,这句代码把mc的引用复制给mc2,意思是mc和mc2指向的是同一个对象
            mc2.value++;
            System.out.println(mc.value); //21
                    
            MyClass mc = new MyClass();
            /*
            首先,在主方法中,调用了 changeValue()方法,并且把 mc 作为实参,传递给形参 mc。
            要注意的是,由于 mc 是一个引用,保存的是一个对象的地址,因此进行传递时,传递给 mc
            的值就是一个对象的地址。这样,实参 mc 引用和形参 mc 引用中保存的内存地址相同,也
            就是说,这两个引用指向同一个对象。   
            */
            changeValue(mc);
            System.out.println(mc.value); //21
            
        }   
        static void changeValue(MyClass mc){
            mc.value++;
        }
    }
    class MyClass{
        int value = 20;
    }

    13.this关键字

    作用:

    1. 引用 表示当前对象, 在类中访问自己的属性和方法时,如果不加引用,引用默认为 this.用this可以区分成员变量和局部变量

      class Student{
          String name;
          int age;
          public Student() { }
          public Student(String name, int age) {
              this.name = name;
              this.age = age;
          }
      }
    2. this(...) 用在构造方法中, 调用本类其他的构造方法 用于构造方法之间相互调用 必须是构造方法的第一条语句

    class MyClass{
        int value;
        public MyClass(){
            this(10);
            System.out.println("MyClass()");
        }
        public MyClass(int value){
            this(); //对 this()的调用必须是构造方法的第一个语句
            this.value = value; //对 this.的调用位置没有限制
        }
    }   
  • 相关阅读:
    Scala 插入排序
    win10下安装使用mysql-8.0.18
    Autofac注入多数据库(DbContext)
    缓存一致性问题以及方案(一) Redis
    Java编程中,一些好的习惯从一开始就值得坚持
    IDEA项目无法引用本地Class类,引用路径正确但报错标红
    git怎么撤销已经push到远端的commit?
    git的命令大全及如何修改git账号和提交的邮箱和用户名
    renren-fast-vue无法运行相关问题解决办法n ./src/assets/scss/index.scss Module build failed: Error: ENOENT: no su
    VsCode系列(一):下载安装及汉化
  • 原文地址:https://www.cnblogs.com/chenpeisong/p/9775219.html
Copyright © 2020-2023  润新知