初始化

动手动脑篇之类与对象

六月ゝ 毕业季﹏ 提交于 2020-03-01 08:26:36
动手动脑篇之类与对象 (一)进行实验 请输入并运行以下代码,得到什么结果 ? (二)动手动脑 以下代码为何无法通过编译?哪儿出错了? 答:Foo obj1=new Foo()在此处调用的时候没有参数 (三)自找麻烦 如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算? 答:执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。 执行类的构造函数。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。 (四)进行实验 使用上页幻灯片中定义的类,以下代码输出结果是什么? 答:结果是100 300 依据代码的输出结果,总结 Java 字段初始化的规律。 答:执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。 执行类的构造函数 ,当有多个构造函数时,要通过参数区分。 类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。 (五)动手动脑 当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。 class GrandFather { static { System.out.println("GrandFather的静态初始化块 "); } } class Father

Spring-理解IOC容器(DI)

妖精的绣舞 提交于 2020-03-01 08:20:03
Spring-理解IOC容器 序言 IoC粗理解 IoC细理解 Spring中IoC的应用 IoC容器 容器的两种表现形式 BeanFactory的IoC实现过程: IoC容器初始化过程 BeanDefinition的定位 BeanDefinition的载入 IoC容器的依赖注入 IoC小结 参考文章: 序言 IoC(Inversion of Control) 控制反转,两种实现: 依赖查找(DL) 依赖注入(DI) IoC包括 依赖查找(DL) 和 依赖注入(DI) ;只不过DL因为有 侵入性 (它需要用户自己去是使用 API 进行查找资源和组装对象),已经被抛弃。所以现在提到IoC,更多的想到的就是依赖注入(DI)了。 依赖注入(DI)包括Set注入和构造器注入!其实还有一个通过实现接口的方式实现依赖注入,不过不常用,就不说了。 注意:Java 使用 DI 方式实现 IoC 的不止 Spring,包括 Google 的 Guice,还有一个冷门的 PicoContainer(极度轻量,但只提供 IoC)。 如图所示: 但其实 IOC 和DI 相当于一回事,只不过是看待问题的角度不同而已: IOC: Spring 反向控制应用程序需要的资源。 DI: 应用程序依赖Spring为其提供资源。 IOC 是站在Spring 的角度,而DI 是站在应用程序的角度。 如下图所示:

动手动脑三

喜夏-厌秋 提交于 2020-03-01 07:40:54
一、以下代码为何无法编译 public class Test{ public static void main(String[] args){ Foo obj1=new Foo(); } } class Foo{ int value; public Foo(int initVaule){ vaule=initVaule; } } 原因:下面自己写的构造方法带有1个参数,但是在新建对象的时候却没有参数,所以无法进行初始化。 如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。同一个类可以有多个构造函数,多个构造函数之间通过参数来区分,这是方法重载的一个实例。构造函数之间可以相互调用 二、 ava进行初始化的地方有两个:初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块。静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。 如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,如果在主函数中创建对象时有形参,则调用类中对应的构造函数。 三、 静态初始化块只执行一次。 创建子类型的对象时,也会导致父类型的静态初始化块的执行。 来源: https://www.cnblogs.com/love-nan/p/9826115.html

静态成员函数和静态成员变量

≡放荡痞女 提交于 2020-03-01 07:40:51
静态成员变量 作用:实现多个对象间数据共享。相当于不同对象间共享一个成员变量 例: 用_total 统计建立了多少个对象,每建立一个新的对象,total++,每个对象都可以访问total,且结果相同。 class A { 11 public : 12 static int _total ; 13 A ( ) { 14 _total ++ ; 15 } } ; 一个类可以有多个静态成员变量,所有对象共享 **static 成员变量和普通 static 变量一样,都在内存分区中的全局数据区分配内存,到程序结束时才释放。**所static成员变量不会随着对象的创建而分配内存,也不会随对象销毁而释放内存。 必须初始化 且在类外进行,可以不赋值默认为0 因为 全局数据区的变量都有默认的初始值 0,而动态数据区(堆区、栈区)变量的默认值是不确定的,一般认为是垃圾值。 对于静态成员变量不同 对象既可以通过对象名访问,也可以通过类名访问,访问的都是内存上的同一块空间(this指针也可以访问) 初始化 前面说过类只是一个模板,只有在建立对象后才能在内存放存放数据,在类中是不能对成员函数进行初始化的,因为没有地方存储。而静态成员变量是不依赖对象存在的,故其初始化在类外,没有初始化的静态成员变量是无效的。 (实际上是初始化在内存上开辟空间,才能存储数据) type 类名:: 成员变量名 = value

Linux系统引导过程及修复

三世轮回 提交于 2020-03-01 07:04:56
目录 一. bios 初始化 二. 磁盘引导 三. grub2文件引导 四. 内核加载 五. 系统初始化镜像 六. 系统启动级别 七. 超级用户密码忘记 通电 一. bios 初始化 对硬件检测 初始化硬件时钟 二. 磁盘引导 mbr主引导记录 位置:0磁道1扇区446字节 作用:记录grub2引导文件的位置 当mbr数据丢失,系统会因找不到启动分区而停止启动 问题模拟方式 系统磁盘 /dev/nvme0n1 dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1 ##清空系统/dev/nvme0n1上的mbr数据 恢复方式: 用光盘进入系统挽救模式 chroot /mnt/sysimag grub2-install /dev/xxxxxx ##重新安装grub2到系统硬盘上 三. grub2文件引导 rhel7中: 文件位置: /boot/grub2/grub.cfg 作用: 指定/boot位置 指定系统启动时加载文件名称 rhel8中: /boot/grub2/grub.cfg /boot/loader/entries/xxxxxx.conf 模拟问题 rhel7中: rm -rf /boot/grub2/grub.cfg rhel8中: rm -rf /boot/loader/entries/xxxxxx.conf 修复: rhel7:

SpringIOC——DI循环依赖

ε祈祈猫儿з 提交于 2020-03-01 06:28:27
要弄清楚循环依赖 1、需要知道Bean初始化的两个阶段 ① Bean实例化创建实例对象(new Bean()) ② Bean实例对象初始化(DI在自动注解注入) 2、DefaultSingletonBeanRegistry类中的5个容器 /** 记录已将创建的单例<beanName,singletonBean> */ private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); /** 记录singletonFactory<beanName,singletonFactory> singeletonFactory中存放beanName和上面的①:Bean实例化实例对象(还未初始化DI)*/ private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16); /** 记录早期的singletonBean 存放的也是① */ private final Map<String, Object> earlySingletonObjects = new HashMap<>(16); /** 存放已经初始化后的beanName,有序 */ private final Set<String>

C++子类显示调用父类的构造函数

那年仲夏 提交于 2020-03-01 04:10:01
C++子类显示调用父类的构造函数 加入有父类是这样定义的: class CA { public: CA() { cout << "using ca's constractor/n"; } CA(int k) { cout << "using ca's 2nd constractor, k is " << k << endl; m = k; }; virtual ~CA() { cout << "using ca's disconstractor/n"; } void output() { cout << "the m is " << m << endl; } private: int m; }; 注意A类里面有一个私有成员m. 假设有一个子类是这样定义的: class CB : public CA { public: CB(int k) { m = k; } }; 显然是错误的,B类不能够直接访问A类的成员m 这样定义也是错误的: class CB : public CA { public: CB(int k) { __super::CA((int)k); } }; 这样实际上是在CB(int k)中构造了一个CA类的临时变量实例,函数执行完之后就没有了。如果有: CB b(2); 执行的结果是: using ca's constractor using ca's 2nd

tf.constant_initializer

断了今生、忘了曾经 提交于 2020-03-01 03:44:05
tf.constant_initializer() 参数: value: Python标量、值列表或元组,或n维Numpy数组。初始化变量的所有元素将在value参数中设置为对应的值。 dtype: 数据类型。 verify_shape: 布尔值,用于验证value的形状。如果为真,如果value的形状与初始化张量的形状不兼容,初始化器将抛出错误。 1. 大小正好的初始化 import numpy as np import tensorflow as tf value = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] # value = np.array(value) # value = value.reshape([2, 4]) 效果一样 init = tf . constant_initializer ( value ) print ( 'fitting shape:' ) with tf . Session ( ) : x = tf . get_variable ( 'x' , shape = [ 2 , 4 ] , initializer = init ) x . initializer . run ( ) print ( x . eval ( ) ) 结果为: [ [ 0 . 1 . 2 . 3 . ] [ 4 . 5 . 6 . 7 . ] ] 2

brk和sbrk及内存分配函数相关

空扰寡人 提交于 2020-03-01 03:30:04
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这 一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管理 下将虚拟地址空间映射到内存,供malloc函数使用。(参见linux内核情景分析) #include <unistd.h> int brk(void *end_data_segment); void *sbrk(ptrdiff_t increment); DESCRIPTION brk sets the end of the data segment to the value specified by end_data_segment, when that value is reasonable, the system does have enough memory and the process does not exceed its max data size (see setrlimit(2)). sbrk increments the program's data space by increment

malloc 和alloc及calloc的区别

筅森魡賤 提交于 2020-03-01 03:05:14
C语言跟内存分配方式   (1) 从静态 存储 区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。   (2) 在栈上创建。在执行函数时,函数内局部变量的 存储 单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。   (3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多   C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等.   其中alloca是向栈申请内存,因此无需释放. malloc分配的内存是位于堆中的,并且没有初始化内存的内容,因此基本上malloc之后,调用函数memset来初始化这部分的内存空间.   calloc则将初始化这部分的内存,设置为0. 而realloc则对malloc申请的内存进行大小的调整.申请的内存最终需要通过函数free来释放. 而sbrk则是增加数据段的大小;   malloc/calloc/free基本上都是C函数库实现的,跟OS无关.C函数库内部通过一定的结构来保存当前有多少可用内存