美文网首页软件必备模块
软件必备模块-变量,对象类,数据结构

软件必备模块-变量,对象类,数据结构

作者: 于桓 | 来源:发表于2018-01-01 13:36 被阅读6次

    为什么写这篇?

    我想设计一个安卓,iOS或者Web应用的时候,开始做软件的时候一般都会找一个趁手的工具,一般是一门语言,java, objective-c,swift,c#等等。但是这些语言也是有共通的地方的。
    很有可能会很想做一个东西,却必须新学一门语言。这篇可能有些纰漏,后面会继续修改。但是这篇是一个雏形。新学一个语言先理解它的变量。

    变量

    一般想学一个语言,先学变量,变量一般分为两种,值类型和引用类型。Java,C#,Objective-C,python。都有这些东西。入手一个语言先熟悉,这门语言的两种变量,值变量,引用变量。

    值类型

    值类型是地址里面直接存一个值。这些类型传递的是值和传递地址的类型有很多不同的特性。值类型分配在栈上。装箱的值类型会分配在堆上。值类型包括:数值类型,结构体,bool型,用户定义的结构体,枚举,可空类型。值类型的变量直接存储数据,分配在托管栈中。变量会在创建它们的方法返回时自动释放。
    byte
    short
    int
    long
    long long

    char

    double
    float

    boolean
    。。。。。。。

    引用类型

    一般想学一个语言,一般都会有一类引用类型。引用类型包括:数组,用户定义的类、接口、委托,object,字符串,null类型,类。引用类型的变量持有的是数据的引用,数据存储在数据堆,分配在托管堆中,变量并不会在创建它们的方法结束时释放内存,它们所占用的内存会被垃圾回收机制释放。

    引用类型-结构类型

    结构类型,主要是用来组织变量。用来实现常见的数据结构。栈,队列,二叉树,图。。。。等等。
    字符串
    集合
    列表
    字典

    可变类型
    时常我们会遇到一个概念是可变的类型和不可变的类型,这个可变与不可变是对地址来说的。对于不可变的字符串不管多少个拷贝,我们都将引用指向同一个地方就可以,这个问题实际就是编程中写出来的一些bug的源头。

    拷贝
    深拷贝,浅拷贝,对于可变和不可变类型的意义是不一样的。实际本质是我们是用一个地址指向了同一个地址,还是从新分配了一片内存,重新将值赋给新分配的内存。

    引用类型-过程类型

    过程类型主要用来调用或者封装调用,将对变量的各种操作封装成函数,函数多了不便于组织将很多函数可以封装成类,类可以单继承,多继承,有类方法,实例方法。需要组织多个类就出现了包,一个包不想让别人知道实现细节变出现了库。函数时常被我们理解成一个调用过程,实际它也存在一个地址只,异步回调的是函数,调用的是函数的地址,函数的指针。接口,委托,函数,类中的函数都可以理解为函数,函数指针。接口和代理是实现函数指针的抽象,类是将函数指针和变量做为一个整体。写程序时常是调用系统的包,类,函数,其实都是这样一个过程,我们要在会用的同时知道原理。
    函数
    学各种语言写hello world都会调用函数。

    接口
    委托

    值类型和引用类型的区别

    这个总结很常见也很实用,面试百分之90中奖。

    值类型

    存储方式:存储值
    内存分配:分配在栈上
    内存回收:用完回收
    效率:效率高
    转换:装箱才能变成引用类型

    引用类型

    存储方式:存储地址
    内存分配:分配在堆上
    内存回收:手动回收和垃圾回收
    效率:效率低
    转换:引用类型需要拆箱才能变成值类型

    内存-作用域-生命周期-垃圾回收

    内存

    这篇讲的是变量,所有变量怎么跑也跑不出内存。一旦有不理解的问题请向内存追寻。这就是大学学操作系统的原因。内存是怎么分配的就是问题的源泉。

    作用域

    最近写代码犯过一个教科书式的错误,#define的变量为什么不生效,#define变量的作用域只是当前文件。注意变量的作用域。

    垃圾回收

    强引用,弱引用,引用环。垃圾回收时机,垃圾回收的方式。也是学习一个语言时要想明白的问题。

    相关文章

      网友评论

        本文标题:软件必备模块-变量,对象类,数据结构

        本文链接:https://www.haomeiwen.com/subject/zhqagxtx.html