初始化

Go_初始化是否为nil

空扰寡人 提交于 2020-02-26 03:19:50
package main import ( "fmt" ) func main() { //基本数据类型(默认值) var a int fmt.Println(a) //0 a = 100 fmt.Println(a) //100 //数组(零) 数组是数据结构 var arr [5]int fmt.Println(arr) //[0 0 0 0 0] arr[0] = 1000 fmt.Println(arr) //[1000 0 0 0 0] //切片(空) 切片是数据结构 var slice []int fmt.Println(slice) //[] slice = []int{1, 2, 3, 4, 5} fmt.Println(slice) //[1 2 3 4 5] //map(nil map,无法直接使用) var map1 map[int]int fmt.Println(map1) //map[] //map1[10] = 100 //fmt.Println(map1) //panic: assignment to entry in nil map map2 := make(map[int]int) fmt.Println(map2) //map[] map2[100] = 1000 fmt.Println(map2) //map[100:1000] i, ok :

ref和out的使用与区别

让人想犯罪 __ 提交于 2020-02-26 02:25:32
区别: ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是: 1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。 3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。 out 方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。 若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。 不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。 属性不是变量,不能作为 out 参数传递。 网上这么说:ref是 有进有出,而out是 只出不进。 来源: https://www

C#中out和ref之间的区别

独自空忆成欢 提交于 2020-02-26 02:22:55
首先:两者都是按地址传递的,使用后都将改变原来参数的数值。 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,ref是有进有出,out是只出不进。 ref(C# 参考) ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。 例如: class RefExample { static void Method(ref int i) { i = 44; } static void Main() { int val = 0; Method(ref val); // val is now 44 } } 传递到 ref 参数的参数必须最先初始化。这与 out 不同,后者的参数在传递之前不需要显式初始化。 尽管 ref 和 out 在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码: class CS0663_Example { //

mariadb-10.5.1二进制安装

烈酒焚心 提交于 2020-02-26 02:15:21
一、本博文内容简介: 有关mariaDB的介绍,大家可以移步到百度百科或者mariaDB官网进行查看。 本文主要是介绍mariaDB二进制包如何进行安装,以及mariaDB服务安装后的如何启动以及账户安全设置等等 mariaDB截止2020-02-24日,目前发部的最新的二进制版本是mariadb-10.5.1-linux-glibc_214-x86_64.tar.gz。本文采用这个版本的二进制安装。 二、二进制安装mariadb: 官方二进制安装文档 https://mariadb.com/kb/en/installing-mariadb-binary-tarballs/ 下载地址 https://downloads.mariadb.com/MariaDB/mariadb-10.5/bintar-linux-glibc_214-x86_64/mariadb-10.5.1-linux-glibc_214-x86_64.tar.gz 创建数据目录: useradd mysql -s /sbin/nologin -M mkdir /data/mysql/mysql3306/{data,binlog,logs,tmp} -p cd /data/mysql/;chown -R mysql.mysql mysql3306 安装相关依赖和下载解压: yum install libaio.x86

依赖注入

假装没事ソ 提交于 2020-02-26 00:11:02
一、简介 依赖注入可以通过初始化方法(或构造函数)传递所需要的参数,或者通过属性(setter)传递。这里将对这两种方法进行讲解。 初始化方法注入: - (instancetype)initWithDependency1:(Dependency1 *)d1 dependency2:(Dependency2 *)d2; 属性注入: @property (nonatomic, retain) Dependency1 * dependency1; @property (nonatomic, retain) Dependency2 * dependency2; 一般更趋向于初始化注入,如果在初始化(构造函数)的时候没办法进行注入,才通过属性进行注入。在通过初始化注入的情况下,这些依赖可能仍然需要作为属性存在,但是这些属性应该被设置为只读(readonly)的。 二、为什么使用依赖注入 依赖注入的几个重要之处: ①、明确的定义。使用依赖注入很明确的告诉了使用者要操作这个类对象需要做什么事情,初始化哪些变量,并且可以隐藏一些危险的依赖,如全局变量; ②、使用构成。 即一直坚持的 多构成少继承原则 。它能提高代码的可重用性; ③、更简单的自定义。在创建一个对象的时候通过传入指定的参数,更容易自定义。 ④、明确的所有者。 ⑤、可测试性。因为只需根据初始化方法,传入需要的参数即可进行操作

ConcurrentHashMap1.8源码

我的梦境 提交于 2020-02-26 00:08:56
/** * 初始化数组table, * 如果sizeCtl小于0,说明别的数组正在进行初始化,则让出执行权 * 如果sizeCtl大于0的话,则初始化一个大小为sizeCtl的数组 * 否则的话初始化一个默认大小(16)的数组 * 然后设置sizeCtl的值为数组长度的3/4 */ private final Node<K,V>[] initTable() { Node<K,V>[] tab; int sc; while ((tab = table) == null || tab.length == 0) { //第一次put的时候,table还没被初始化,进入while if ((sc = sizeCtl) < 0) //sizeCtl初始值为0,当小于0的时候表示在别的线程在初始化表或扩展表 Thread.yield(); // lost initialization race; just spin else if (U.compareAndSwapInt(this, SIZECTL, sc, -1)) { //SIZECTL:表示当前对象的内存偏移量,sc表示期望值,-1表示要替换的值,设定为-1表示要初始化表了 try { if ((tab = table) == null || tab.length == 0) { int n = (sc > 0) ? sc :

关键字final整理

≡放荡痞女 提交于 2020-02-25 23:55:59
关键字final整理 由于语境(应用环境)不同,final 关键字的含义可能会稍微产生一些差异。但它最一般的意思就是声明“这个东西不能改变”。之所以要禁止改变,可能是考虑到两方面的因素:设计或效率。由于这两个原因颇有些区别,所以也许会造成final 关键字的误用。final 关键字有三种应用场合:数据、方法以及类。我们在实际编程的过程中,也要考虑到某些字段是不是应该被改变,某些类是不是应该被继承,养成好的习惯,合理的使用final这个关键字。这里关于final的用法,做一个详细的整理。 1,final 数据 许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”。常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 对于编译期的常数,编译器(程序)可将常数值“封装”到需要的计算过程里。也就是说,计算可在编译期间提前执行,从而节省运行时的一些开销。在 Java 中,这些形式的常数必须属于基本数据类型(Primitives),而且要用 final关键字进行表达。在对这样的一个常数进行定义的时候,必须给出一个值。无论static还是 final字段,都只能存储一个数据,而且不得改变。若随同对象句柄使用final,而不是基本数据类型,它的含义就稍微让人有点儿迷糊了。对于基本数据类型,final 会将值变成一个常数

第四章 单例模式

一个人想着一个人 提交于 2020-02-25 23:39:04
单例模式 以下在单线程的情况理解改概念 懒汉式 懒汉式在类加载时不初始化,延迟加载。(配置文件) 饿汉式在类加载时初始化,加载慢,获取对象快。 饿汉式是线程安全的, 懒汉式需要加synchronized,否则不安全。 如何使用: 将类的构造器声明为私有化,这就使得外部无法通过构造函数创建这个类的对象了。那么如何创建这个类的唯一那个对象呢? 在该类中声明一个静态的私有的该类的变量。不初始化,或初始化为null,这是懒汉式的特点。 为该类创建一个对外公共的静态的方法访问该变量,如果该变量为null,创建它 Demo: 在这里插入代码片 饿汉式 如何使用: 将类的构造器声明为私有化,这就使得外部无法通过构造函数创建这个类的对象了。 在该类中声明一个静态的私有的该类的变量。并初始化它,这是饿汉式的特点。 为该类创建一个对外公共的静态的方法访问该变量。 在多线下面我们应该如何考虑 Demo: 在这里插入代码片 在性能方面我们应该如何考虑 Demo: 在这里插入代码片 来源: CSDN 作者: 享知 链接: https://blog.csdn.net/qq_30561643/article/details/104504187

Android课程---final关键字

前提是你 提交于 2020-02-25 23:35:23
final 在Java中声明属性、方法和类时,可使用关键字final来修饰。 final变量即为常量,只能赋值一次; final方法不能被子类重写; final类不能被继承。 1. final变量 声明 final 字段有助于优化器作出更好的优化决定,因为如果编译器知道字段的值不会更改,那么它能安全地在寄存器中高速缓存该值。final 字段还通过让编译器强制该字段为只读来提供额外的安全级别。 其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。 一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。 当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。 另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为final才可使用。 在java中,普通变量系统是自动初始化的,数值变量自动初始化为0,其余类型变量自动初始化为空。但是final类型的变量必须显示初始化,且初始化的方法必须是在申明时或者在构造方法中直接赋值,而不能通过调用函数赋值。 2. final方法 如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。

浅谈java中的static关键字

不问归期 提交于 2020-02-25 23:32:55
学习自: http://www.cnblogs.com/dolphin0520/p/3799052.html static 关键字主要有两种作用: 第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。比如一些常量 第二,实现某个方法或属性与类而不是对象关联在一起 具体而言,在Java语言中,static主要有4中使用情况:成员变量、成员方法、代码块和内部类 举例:下面的单例模式方法中为什么要用static修饰符来修饰getInstance方法。可以在不用创建对象Singlteon的时候直接通过 Singleton1.getInstance();实现此方法。 package Singleton; /** * Created by hanzhixiong on 2017/10/9. */ public class Singleton1 { private static Singleton1 instance ; //private Singleton1(){};// 构造类 public static Singleton1 getInstance(){ if ( null == instance ){ instance = new Singleton1(); } return instance ; } } importSingleton.Singleton1;