首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【《Effective C#》提炼总结】提高Unity中C#代码质量的21条准则

《Effective C# Second Edition》一书原本有50条原则,但这50条原则是针对C#语言本身以及.NET来写的,我在阅读过程中,发现是有些原则并不适用于Unity中mono版本的C#...原则9 正确地初始化静态成员变量 ● C#提供了有静态初始化器和静态构造函数来专门用于静态成员变量的初始化。...而若是要更复杂一些的逻辑来初始化静态成员变量,那么可以使用静态构造函数。 ● 使用静态构造函数而不是静态初始化器最常见的理由就是处理异常。在使用静态初始化器时,我们无法自己捕获异常。...●  一般情况下,我们习惯用class,随意创建的大都是引用类型,若下面几点都肯定,那么应该创建struct值类型: 1)该类型主要职责在于数据存储吗?...1)接口中声明的成员方法默认情况下并非虚方法,所以,派生类不能覆写基类中实现的非虚接口成员。若要覆写的话,将接口方法声明为virtual即可。

1.8K30

来聊一聊JVM

2)准备 为类的静态变量分配内存,并将其初始化为当前类型的默认值。...把类中的符号引用转换成直接引用 3.初始化 执行到Clinit方法,为静态变量赋值,初始化静态代码块,初始化当前类的父类 5.类加载器的层次 6.双亲委派机制 父类委托机制 protected Class...也就是说,如果一个对象被设置上了一个虚引用,实际上跟没有设置引用没有任何的区别 一般不用,辅助咱们的Finaliza函数的使用 常量池分类: 1.静态常量池 静态常量池是相对于运行时常量池来说的,...属于描述class文件结构的一部分 由字面量和符号引用组成,在类被加载后会将静态常量池加载到内存中也就是运行时常量池 字面量 :文本,字符串以及Final修饰的内容 符号引用 :类,接口,方法,字段等相关的描述信息...首先“aaaa”会被认为字面量,先在字符串常量池中查找(.equals()),如果没有找到,在堆中创建“aaaa”字符串对象,并且将“aaaa”的引用维护到字符串常量池中(实际是一个hashTable结构

6410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    不止面试—jvm类加载面试题详解

    校验 顾名思义,检查Class文件的字节流中包含的信息是否符合当前虚拟机的要求。 准备 这一步中将为静态变量和静态常量分配内存,并赋值。 需要注意的是,静态变量只会给默认值。...初始化 类的初始化的主要工作是为静态变量赋程序设定的初值。 还记得上面的静态变量吗: public static int value = 123; 经过这一步,value的值终于是123了。...通过数组来引用类,不会触发类的初始化。因为new的是数组,而不是类。 调用类的静态常量不会触发类的初始化,因为静态常量在编译阶段就会被存入调用类的常量池中,不会引用到定义常量的类。...哪些情况会触发类的初始化? 类在5种情况下会被初始化: 第一,假如这个类是入口类,他会被初始化。 第二,使用new创建对象,或者调用类的静态变量,类会被初始化。不过静态常量不算。...在准备阶段为静态变量分配内存。 JVM的类加载机制是什么? 双亲委派机制,类加载器会先让自己的父类来加载,父类无法加载的话,才会自己来加载。 双亲委派机制可以打破吗?

    68710

    Java面试题及答案2019版(上)

    Java中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。  3、String是最基本的数据类型吗?  答:不是。...现在的疑问是“java”这个字符串在常量池中什么时候存在了? 我最开始的猜想是“java”这个字符串是不是常驻在常量池中的?那为什么常驻在常量池中呢?...Version类时,对其静态常量字段根据指定的常量值做默认初始化,所以"java"被加载到了字符串常量池中,修改上面代码使字符串值为上面常量中的任意一个都会返回false。...方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与String对象的equals结果是true),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用...创建对象时构造器的调用顺序是:先初始化静态成员,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。

    51630

    Java面试题及答案2019版(上)

    Java中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。 3、String是最基本的数据类型吗? 答:不是。...现在的疑问是“java”这个字符串在常量池中什么时候存在了? 我最开始的猜想是“java”这个字符串是不是常驻在常量池中的?那为什么常驻在常量池中呢?...Version类时,对其静态常量字段根据指定的常量值做默认初始化,所以"java"被加载到了字符串常量池中,修改上面代码使字符串值为上面常量中的任意一个都会返回false。...方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与String对象的equals结果是true),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用...创建对象时构造器的调用顺序是:先初始化静态成员,然后调用父类构造器,再初始化非静态成员,最后调用自身构造器。

    24220

    程序员的56大Java基础面试问题及答案

    Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。 Java语言是强制面向对象的。...而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。...,若不存在则先在常量池中创建,否则直接返回常量池已经存在的字符串的引用....并放置字符串常量池中,因此最终s1和s2引用的是同一个字符串常量对象。...而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。 还有一点就是static成员变量的初始化顺序按照定义的顺序进行初始化。

    17720

    【C++】CC++内存管理

    在之前C语言的学习中,我们学过了C是如何进行动态内存管理的,也简单的了解过C/C++程序的内存开辟。 这篇文章呢,我们重点来学习一下C++的内存管理方式。 1....,这里涉及到我们之前C语言讲过的一个关于常量字符串的知识,我们先来复习一下: 相信现在大家就知道了,char2这个字符数组还是在栈上的,只是拿代码段(常量区)的一个常量字符串去初始化它了,然后*char2...再看pChar3是一个局部指针变量,在栈上,但是pChar3指向常量区的一个常量字符串,所以 *pChar3是在常量区。...如果要动态申请10个整型大小的空间: 直接这样就可以了。 ,那大家思考一下: C++搞出来这样新的动态内存管理的方式,仅仅是为了用起来比C语言方便,简洁一点吗?...,我们知道C++是一门基于面向对象的编程语言,面向对象的编程语言在发生错误时一般都是抛异常的,而C语言这些malloc函数发生错误时是不是都不会抛异常啊,像malloc如果申请失败是返回空指针,是不是不满足需求啊

    18310

    熬夜整理的万字CC++总结(一),值得收藏

     全局初始化数据区/静态数据区(data段) 该区包含了在程序中明确被初始化的全局变量、已经初始化的静态变量(包括全局静态变量和t)和常量数据(如字符串常量)。...注意: (1)这里不区分初始化和未初始化的数据区,是因为静态存储区内的变量若不显示初始化,则编译器会自动以默认的方式进行初始化,即静态存储区内不存在未初始化的变量。...(2)全局静态存储区内的常量分为常变量和字符串常量,一经初始化,不可修改。...(3)字符串常量存储在全局/静态存储区的常量区。...事实上,在c语言里,存在着多个调用惯例,而默认的是cdecl.任何一个没有显示指定调用惯例的函数都是默认是cdecl惯例。

    47011

    为什么 C# 的 string.Empty 是一个静态只读字段,而不是一个常量呢?

    使用 C# 语言编写字符串常量的时候,你可能会发现可以使用 "" 而不能使用 string.Empty。...翻译过来是: Empty 常量保存的是空字符串的值,它在启动期间由执行引擎初始化。它被 JIT 视为内在的,因此静态构造函数永远不会运行。将它保持为未初始化的状态将会使得调试器难以解释此行为。...虽然一般情况下取字符串常量实例的时候会去字符串池,但是不用担心取 "" 会造成性能问题,因为实际上 JIT 编译器已经特殊处理了,不会去找池子。...从上文中 string.Empty 的注释描述中可以知道: 编译器会将 C# 语言编译成中间语言 MSIL; 如果这是一个常量,那么编译器在不做特殊处理的情况下,就会生成 ldstr "",而这种方式不会调用到...String 类的构造函数(注意不是静态构造函数,String 类的静态构造函数是特殊处理不会调用的); 而如果这是一个静态字段,那么编译器可以在不做特殊处理的情况下,生成 ldsfld string

    1.1K00

    每日知识集之JVM篇

    本地方法栈是干嘛的? 本地方法栈和虚拟机栈类似,只不过本地方法栈为 Native 方法服务。 本地方法是使用C语言实现的。...,windows下默认初始化大小为21M,最大值为-1,及没有限制 于永久代不同,如果不指定大小,默认情况下,虚拟机会耗尽所有的可用系统内存,如果元数据区发生移除,虚拟机一样也会抛出异常OutOfMemoryError...运行时常量池中的字符串字面量若是成员的,则在类的加载初始化阶段就使用到了字符串常量池;若是本地的,则在使用到的时候(执行此代码时)才会使用到字符串常量池。...,字符串常量池是在本地内存当中,存储的也只是引用。...堆是线程共享的吗? 是的,几乎所以的对象实例都是在堆上分配内存,在栈里存放的是对象的引用地址 27. -Xms和-Xmx作用于永久代吗?

    41530

    我的C语言入门笔记~!

    在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。...765%10得到5 循环结构之三种循环比较 while, do-while和for三种循环在具体的使用场合上是有区别的,如下: 在知道循环次数的情况下更适合使用for循环; 在不知道循环次数的情况下适合使用...在C语言中,可以使用break语句进行该操作. 使用break语句时注意以下几点: 在没有循环结构的情况下,break不能用在单独的if-else语句中。...其作用域是整个源程序。 变量存储类别 mtianyan: C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。...在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数

    4.9K2319

    辛苦整理的C语言笔记,一学就会

    注意:格式符的个数要与变量、常量或者表达式的个数一一对应 不可改变的常量 在程序执行过程中,值不发生改变的量称为常量。 mtianyan: C语言的常量可以分为直接常量和符号常量。...在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。...765%10得到5 循环结构之三种循环比较 while, do-while和for三种循环在具体的使用场合上是有区别的,如下: 在知道循环次数的情况下更适合使用for循环; 在不知道循环次数的情况下适合使用...在C语言中,可以使用break语句进行该操作. 使用break语句时注意以下几点: 在没有循环结构的情况下,break不能用在单独的if-else语句中。...在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数

    90130

    C语言最全入门笔记

    注意:格式符的个数要与变量、常量或者表达式的个数一一对应 不可改变的常量 在程序执行过程中,值不发生改变的量称为常量。 mtianyan: C语言的常量可以分为直接常量和符号常量。...在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。...765%10得到5 循环结构之三种循环比较 while, do-while和for三种循环在具体的使用场合上是有区别的,如下: 在知道循环次数的情况下更适合使用for循环; 在不知道循环次数的情况下适合使用...在C语言中,可以使用break语句进行该操作. 使用break语句时注意以下几点: 在没有循环结构的情况下,break不能用在单独的if-else语句中。...在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数

    1.3K20

    这是我的C语言入门笔记

    在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。...765%10得到5 循环结构之三种循环比较 while, do-while和for三种循环在具体的使用场合上是有区别的,如下: 在知道循环次数的情况下更适合使用for循环; 在不知道循环次数的情况下适合使用...在C语言中,可以使用break语句进行该操作. 使用break语句时注意以下几点: 在没有循环结构的情况下,break不能用在单独的if-else语句中。...其作用域是整个源程序。 变量存储类别 mtianyan: C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。...在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数

    61220

    C语言最全入门笔记

    注意:格式符的个数要与变量、常量或者表达式的个数一一对应 不可改变的常量 在程序执行过程中,值不发生改变的量称为常量。 mtianyan: C语言的常量可以分为直接常量和符号常量。...在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。...765%10得到5 循环结构之三种循环比较 while, do-while和for三种循环在具体的使用场合上是有区别的,如下: 在知道循环次数的情况下更适合使用for循环; 在不知道循环次数的情况下适合使用...在C语言中,可以使用break语句进行该操作. 使用break语句时注意以下几点: 在没有循环结构的情况下,break不能用在单独的if-else语句中。...在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数

    1.9K20

    我的C语言入门笔记~!

    注意:格式符的个数要与变量、常量或者表达式的个数一一对应 不可改变的常量 在程序执行过程中,值不发生改变的量称为常量。 mtianyan: C语言的常量可以分为直接常量和符号常量。...在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。...765%10得到5 循环结构之三种循环比较 while, do-while和for三种循环在具体的使用场合上是有区别的,如下: 在知道循环次数的情况下更适合使用for循环; 在不知道循环次数的情况下适合使用...在C语言中,可以使用break语句进行该操作. 使用break语句时注意以下几点: 在没有循环结构的情况下,break不能用在单独的if-else语句中。...在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数

    1.2K3429

    【深入浅出C#】章节 2:数据类型和变量:变量和常量的声明和初始化

    遵循命名约定:在特定编程语言中,可能有命名约定的规定,如在C#中常用的命名约定是使用驼峰命名法并将类名首字母大写。 避免使用保留关键字:避免使用编程语言中的保留关键字作为变量名,以免发生冲突。...对于实例变量和静态变量,可以在声明时使用默认值进行初始化,也可以在构造函数或静态构造函数中进行赋值操作。...五、默认值和可空类型 5.1 变量的默认值规则 在C#中,变量在声明但未被显式赋值时会被赋予一个默认值。...变量的默认值是根据其类型而定的,下面是C#中常见类型的默认值规则: 类型 默认值 整数类型(如int、long) 0 浮点数类型(如float、double) 0.0 十进制数类型(如decimal)...它们可以用于类的方法、构造函数或类的任何其他成员中。常量是静态的,意味着可以在类的实例之间共享。 常量表达式: 常量的值必须在编译时确定,并且只能使用常量表达式来初始化。

    61620

    c语言入门这一篇就够了-学习笔记

    mtianyan: C语言的常量可以分为直接常量和符号常量。...在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。...765%10得到5 循环结构之三种循环比较 while, do-while和for三种循环在具体的使用场合上是有区别的,如下: 在知道循环次数的情况下更适合使用for循环; 在不知道循环次数的情况下适合使用...在C语言中,可以使用break语句进行该操作. 使用break语句时注意以下几点: 在没有循环结构的情况下,break不能用在单独的if-else语句中。...在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: extern [数据类型] 函数名([参数]) C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数

    69720

    JAVA 基础

    参考链接: Java中的默认数组值 1. Java数据类型         Java是强类型语言,所有的变量必须先声明后使用,定义变量需要显示的声明一个在编译时就能确定的类型。          ...         系统在分配元素的初值时,按一下规则: 如元素为基本类型中的整型,默认值为 0;如是基本类型中的浮点型,默认值为 0.0;如实基本类型中的字符型,默认值为 '\u0000';如实基本类型中的布尔型...在没有此类对象的情况下,就已经存在了。...静态成员变量只有一份拷贝,任何对象修改后,其他对象看到的都是新值          2)static 成员函数  可以将一个方法声明为static静态方法在没有类对象的情况下就产生了可以通过类名调用,也可以通过对象名调用静态的方法不能访问非静态的成员变量...因为静态方法在没有对象存在的情况下就已经先期存在,但是此时没有任何对象存在,也就没有对象的成员变量空间和值,所以,无法访问            static成员函数应用:  经常在一个类中定义若干多的静态方法

    56400

    【2022最新Java面试宝典】—— Java基础知识面试题(91道含答案)

    Java获取反射的三种方法 六、常用API String相关 75. 字符型常量和字符串常量的区别 76. 什么是字符串常量池? 77. String 是最基本的数据类型吗 78....什么是Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继 承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。...而非静态变量是对象所拥有的,在 创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。 还有一点就是static成员变量的初始化顺序按照定义的顺序进行初始化。 49....字符型常量和字符串常量的区别 形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符 含义上: 字符常量相当于一个整形值(ASCII值),可以参加表达式运算 字符串常量代表一个地址值...字符串常量池位于堆内存中,专门用来存储字符串常量,可以提高内存的使用率,避免开辟多块空 间存储相同的字符串,在创建字符串时 JVM 会首先检查字符串常量池,如果该字符串已经存在池 中,则返回它的引用

    70630
    领券