• 【Java】步入OOP 面向对象


    面向对象编程 OOP Object Oriented Programming

    面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
    面向对象是相对于面向过程来讲的,面向对象方法,
    把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式

    面向过程编程 POP Procedure Oriented Programming

    是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。

    面向对象的几个重要特性

    - 封装 Encaosulation 隐藏具体的实现细节,提供一个可访问的途径

    - 继承 Inheritic 提高代码可重用性,抽取事物的共性

    - 多态 Polymorphism  具体可实现的实例多样化

    - 抽象 Abstract 对类的本身也抽象化了

    面向对象程序设计的重点是对类的设计

    设计类,就是设计类的成员

    类和对象的关系?

    什么是类? 类是对一类事物的描述,是概念的定义

    理解类,对自然事物的归类,所具有的共性,就可归为一类

    例如,人,猫,狗,就是对这些实际存在的动物进行归类,这只是笼统的描述,不是具体的实例 instance

    就像说吃水果,只是描述,并没有具体指出是什么水果

    对象,即描述的具体展现,是实际存在的事物,因此称为实例,

    对象由类产生,具有类所描述的一切特性,主要包括特征和行为

    特征即是对象的属性,行为即是对象的方法

    package cn.dai;
    
    public class Person {
        // 类的主要部分
        
        // 属性 == 字段 == 成员变量 == 域 == field
        int age;
        String name;
        
        // 行为 == 方法 == 成员方法 == 函数 == method == function
        public void walk(){
            System.out.println("行走,散步");
        }
        
        public void talk(){
            System.out.println("交流,谈吐");
        }
    }

    实例化与调用

    package cn.dai;
    
    public class Create {
        public static void main(String[] args) {
            
            // 创建我们定义的类的实例
            
            // 类名 引用名 引用指向 类实例
            Person person = new Person();
            
            // 引用可以访问我们的属性 .引用
            person.name = "张三";
            
            person.age = 22;
            
            // 还可以是我们的方法
            person.talk();
            person.walk();
        }
    }

    1 创建类,设计类成员

    2 创建类的实例

    3 调用实例的属性或者方法

    类的多个对象的关系

    - 每个创建出来的实例,在内存空间都有独立的存储空间 ,new 即代表新的意思

    - 所以每个对象的属性和方法,是独立存在,而不是公用的

    - 修改对象A的属性不会影响对象B的属性

    关于new 关键字的解释:

    https://blog.csdn.net/yanyuan904/article/details/80022647

    https://blog.csdn.net/topdeveloperr/article/details/81194654

    - 为对象开辟内存空间。

    - 调用类的构造方法。

    - 将生成的对象的地址返回。 

    属性与局部变量

    成员变量和局部变量的区别?

    https://www.cnblogs.com/huangminwen/p/5935130.html

    - 属性定义在类体当中

    - 属性可以只声明不初始化赋值,当实例创建时,赋值为默认缺省值

    - 属性的作用域可以在类中的所有成员方法中

    - 局部变量 只声明在方法中

    - 局部变量 声明必须要在方法中赋值

    - 局部变量的作用域只作用在这个方法之内

    - 属性加载在堆空间中,而局部变量加载在栈空间

    访问权限的设置

    - private 修饰的方法和属性或者内部类 只能作用在本类之内,外部无法访问

    - default 默认不写的,允许在同一个包下访问

    - protected 所继承的子类可以访问,子类可以不同包

    - public 可以被任意访问

    访问修饰级别的解释

    https://blog.csdn.net/qq_41174684/article/details/90677921

    方法/函数的用法

    https://www.cnblogs.com/lavender-li/p/5681790.html

    - 状态修饰  访问修饰

    - 返回类型

    - 方法名称

    - 参数列表

    - 返回值

    - return 表示方法的结束,在方法体return之后写下的代码都不再执行,第二时携带返回值,要注意的是 return 不能声明执行语句

    - 方法可以递归,但不能在方法中声明方法

    package cn.dai;
    
    public class Person {
    
        // [状态类型][访问级别] 返回类型 方法名称(参数列表) { 方法体 }
        public int summation(int ...args){ // 参数列表,可以是一个或者多个参数,没有类型限制,参数就是要执行方法前必需注入的数据,这里采用了一个可变参数
            
            // 具体执行实现的细节 也就是方法体
            int sum = 0;
            for (int param : args){
                sum += param;
            }
            return sum; // 方法的返回值,定义的int返回类型,所以值也必须是int类型的值,void 表示空,所以可不写return
        }
    }

    递归算法

    https://blog.csdn.net/f5465245/article/details/77946468

    构造方法 / 构造器 Constructor

    https://blog.csdn.net/qiuzhongweiwei/article/details/78965788

    https://blog.csdn.net/zqixiao_09/article/details/50550035

     构造重载 在初始化的同时注入参数

    对象 / 实例 instance 的内存解析

    匿名对象的介绍

    https://blog.csdn.net/lxxiang1/article/details/82085271

    - 匿名对象没有声明引用指向

    - 匿名对象可以调用属性和方法

    - 因为没有引用指向,在不是建造者模式的情况下,只能调用一次方法或者属性;

    重载 Overload

    https://www.cnblogs.com/xdp-gacl/p/3637321.html

    - 在本类中允许一个以上的同名方法 但是此参数的个数和参数的类型不能相同

    - 重载允许不同的返回类型和权限访问

    可变参数 Variable Number Of Arguments

    https://blog.csdn.net/lxxiang1/article/details/82312799

    - 可变参数的本质是一个Object数组

    - 可变指的是这个参数的个数可变

    - 要注入多个参数,可变参数必须放在参数列表的最后一个

    - 单个参数和同类型可变参数符合重载的规定

    - 最多只允许声明一个可变参数

    实参的值传递机制

    - 当形参是基本类型时,是注入实参的数据值传递给形参【给的字面值】

    - 当形参是引用类型时,是注入实参的地址值传递给形参【给的内存地址】

    final关键字的解释:


    - 可修饰类、方法、属性、

    - 修饰类  被修饰的类不能被洽谈类所继承 

    - 修饰方法  被修饰的方法不能被重写

    - 修饰变量  

      被修饰的属性,有且只有一次赋值的机会  可以 1 显示初始化声明、2 代码块中初始化赋值、3 构造器中初始化

      被修饰的局部变量  表示是一个常量

    - static final 表示为全局常量 

    https://www.cnblogs.com/dolphin0520/p/3736238.html

    static关键字的解释:

    - 表示静态的,常态的

    - 用来修饰 属性、方法、代码块、内部类

    - 类创建的实例共享静态变量

    - 静态变量随类的加载而加载

    - 静态修饰的类成员优先实例加载,类只会加载一次,静态成员再内存中只存在一个,再方法区的静态域中

    - 所以静态的,也可以称为是类的

    - 静态方法 只能调用静态属性和静态方法

    - 成员方法,静态非静态皆可

    - 不能使用this,super

    https://www.cnblogs.com/dolphin0520/p/10651845.html

    静态代码块与非静态代码块

    - 都是用来初始化类或者对象

    - 静态的代码块,随着类加载而加载,可以设置加载信息,优先非静态代码块加载

    - 非静态代码块,随着对象加载而加载,可以对属性注入

    - 代码块按照编写顺序执行,不论是否静态

    属性注入的位置;

    - 声明即赋值   显示初始化

    - 默认缺省

    - 构造器注入

    - setter注入

    - 对象访问属性赋值

  • 相关阅读:
    结构体怎么组包发送
    开源语音代码eSpeak1.06 的移植到单片机的过程(二)之分析下speak.c 文件
    看看深圳的房价
    开源语音代码eSpeak1.06 的移植到单片机的过程(一)0之分析下espeak.c 文件
    开源语音代码eSpeak1.06 的学习入门
    利尔达模组CAT1 UIS8910指令的 TCP相关中文解释
    将博客搬至CSDN
    【原创】大叔问题定位分享(39)azkaban定期出现fullgc
    【原创】大叔经验分享(129)mac下启动MAT报错
    【原创】大数据基础之Doris(1)编译安装和启动
  • 原文地址:https://www.cnblogs.com/mindzone/p/12711888.html
Copyright © 2020-2023  润新知