zoukankan      html  css  js  c++  java
  • 变量类型C#面试题详解

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正

        1,什么是强类型,什么是若类型?

        强若类型是指类型检查的严格程度,语言有无类型、弱类型和强类型三种。无类型的语言不检查且不辨别指令和数据;若类型的语言检查很弱,仅能严格辨别指令和数据;强类型语言则严格地在编译的时候停止检查。例如,C语言和JavaScript是若类型语言,Java和C#是强类型语言。

        技能提示:编写简单小应用,应用弱类型语言可以节俭代码量,有更高的开辟效率;而对于构建大型项目,应用强类型语言会更加规范可靠。

        2,为什么在C#中我们不担忧内存漏洞?

        剖析:考察C#的内存管理机制。C#采用渣滓回收机制来管理内存,当程序运行时,渣滓收集器在内存中建立一个托管堆,每应用一次new运算符,运行库就在上一个对象之后为新建的对象在托管堆中分配一个内存空间,渣滓收集器保存了一个指针,该指针一直指向最后一个对象的内存空间。当该指针指向托管堆以外的空间时,就需要对该托管堆中的无用内存停止回收,此时假设队中的所有的对象都需要回收。

        说明:渣滓回收机制是C#相对于C和C++的一大优点,它不需要程序员显示地删除动态分配给堆的内存。

        GC 是渣滓收集器,C#程序员不必担忧内存管理,因为渣滓收集器会自行停止管理。如果要请求渣滓收集,可以应用下面的方法之一:

        System.gc()

        Runtime.getRuntime().gc()

        3,谈谈final,finally和finalize的区别

        final是一个修饰符,如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承;而如果将变量或方法声明为final,可以保障它们在应用中不被改变。被声明为final的变量必须在申明时给定初值,而在以后的引用中只能读取,不可修改;被声明为final的方法同样也只能应用,不能重载。

        finally用来在异常处理时执行任何任何清除操作,如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。

        finalize(_)是一个方法名,是在渣滓收集器删除对象之前对这个对象调用的,它是Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整顿系统资源或者执行其它清理任务。

        4,const和readonly有什么区别?

        C#定义了两种类型的常量,一种用const关键字声明,一种用readonly关键字声明。用const声明的是真正的常量,而用readonly声明的实际上是“只读的变量”。const声明的变量在编译时停止设置并且设置后就永久不能改变,此时编译器会把所有的const常量全部替换为常数;而readonly声明的常量是在程序运行期间初始化,该操作只能停止一次。另外,const常量只能在声明中赋值,readonly常量的初始化既可以在声明中停止,也可以在构造函数中停止,应用构造函数,readonly字段可被付与不同的值。

        每日一道理
    在每一个人心中,都曾停留过那些值得怀念的人,也许还在,也许早已消逝,在茫茫人海中丢失,于是,那份怀念便得凄凉,因为模糊的记忆中只剩下一个“空壳”,没有什么,甚至连自己的心都装不下,时间把一切抹平,也把当日的泪水封锁,因为已经没有,怀念只是悲凉!

        总之,const关键字用来声明编译时的常量,readonly用来声明运行是常量。

        5,引用类型何止类型的区别?

        C#中的数据类型有两种,分别是值类型和引用类型,二者的差异在于数据的存储方法,值类型直接存储数据;而引用类型则存储实际数据的引用,程序通过此引用找到真正的数据,因此引用类型的变量通常也叫做对象。对于值类型,由于每一个变量都有自己的值,所以对一个变量的操作不会影响另一个变量;而对于引用类型来说,两个或多个引用类型的变量引用同一个对象,实际上是指这些变量在堆栈中保存的堆地址相同,因此对一个变量的操作会影响到引用相同对象的另一个变量。

        技能:值类型变量声明初始化后便可访问,引用类型变量必须先应用new关键字为其声明的变量分配内存后方可访问。

        引用类型存储在堆上,包含一个指向实例的指针,默认值为null;值类型存储在堆上,存储的是一个实际的值。未赋值前不同值类型有不同的默认值但不能为空。

        6,简述堆和栈的区别?

        栈是由编译器主动分配,释放的,在方法体中定义的变量通常在栈上。堆一般由程序员分配释放,用new运算符等分配内存方法分配得到的就是在堆上。栈是机器系统供给的数据结构,而堆是C/C++函数供给的,他们的区别如下:

        栈是系统供给的功能,特点是倏地高效,缺陷是有限制,数据不灵巧;而堆是函数库供给的功能。特点是灵巧方便,数据顺应面普遍,但是效率有必定下降。

        栈是系统数据结构,对于进程或线程式独一的;而堆是函数库内部的结构,不必定独一,不同的堆分配的内存没法互相操作。

        栈空间分静态分配和动态分配两种,其中,静态分配是编译器完成的,比如主动变量的分配;而动态分配是由啊alloca()函数完成的,栈的动态分配无需释放,但为了可移植的程序,栈的动态分配操作是不勉励的。堆空间的分配老是动态的。

        谜底:栈是编译期间就分配好内存空间,因此代码中必须就栈的巨细明确定义;堆是程序运行期间动态分配内存空间,可以根据程序的运行情况确定要分配的堆的巨细。

        7,简述枚举的作用?

        枚举通常用于定义多个常量,这些常量公用一种基本的数据类型,该类型在定义是由冒号来指定。

        谜底:枚举可以防止不合理的赋值,它表现一组有限的值,对可能的值停止约束,是代码更清晰。并且允许应用描述性的名称表现数据,应用时直观方便。

        待续....

    文章结束给大家分享下程序员的一些笑话语录:  一边用着越狱的ip,一边拜乔帮主的果粉自以为是果粉,其实在乔帮主的眼里是不折不扣的叛徒。

    --------------------------------- 原创文章 By
    变量和类型
    ---------------------------------

  • 相关阅读:
    jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token
    doT中嵌套for循环的使用
    c++ new带括号和不带括号
    python装饰器之使用情景分析
    Python中classmethod与staticmethod区别
    python作用域 scope
    duck type鸭子类型
    EAFP和LBYL 两种防御性编程风格
    c++重载、覆盖和隐藏
    c++ 名字粉碎(name mangling)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3106719.html
Copyright © 2011-2022 走看看