初始化

StringBuffer的用法

坚强是说给别人听的谎言 提交于 2020-03-28 14:55:31
1、StringBuffer对象的初始化 StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。 例如: StringBuffer s = new StringBuffer(); 这样初始化出的StringBuffer对象是一个空的对象,就是我犯的错误。 如果需要创建带有内容的StringBuffer对象,则可以使用: StringBuffer s = new StringBuffer(“abc”); 这样初始化出的StringBuffer对象的内容就是字符串”abc”。 需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的: StringBuffer s = “abc”; //赋值类型不匹配 StringBuffer s = (StringBuffer)”abc”; //不存在继承关系,无法进行强转 StringBuffer对象和String对象之间的互转的代码如下: String s = “abc”; StringBuffer sb1 = new StringBuffer(“123”); StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer String s1

C#类中的成员

筅森魡賤 提交于 2020-03-28 13:16:21
@ 目录 字段 属性 方法 构造函数 类和对象的简单解释 创建类和对象 类中成员的归属问题 字段 字段的声明与声明变量类似,可以添加访问修饰符,通常情况下字段设置为私有的,然后定义属性对字段的读写进行限制 一般的命名规范约定,私有字段使用下划线前缀、小驼峰命名 private int _age //定义一个私有字段_age 属性 属性拥有两个访问器(get和set),用于控制读取和写入,通常和字段配套使用,用来对字段进行读写限制 //定义一个Age属性,限制赋值给_age字段的值为18到60岁之间 //get和set类似于不能接受参数的方法,value是赋给Age属性的值 public int Age { get { return _age; } set { if(value >= 18 && value<=60) _age = value; } } 方法 正式的C#术语中区分函数和方法,但是在初期,我们也可以把方法当成函数来理解 //定义一个SayAge方法,传递一个int类型的变量给SayAge方法,输出“我的年龄是~” public void SayAge(int age) { Console.WriteLine($"我的年龄是{age}") } 构造函数 构造函数是在创建对象的时候调用的方法,主要作用是初始化字段(为字段赋值),构造函数支持重载,即根据不同的参数签名

C++构造函数初始化列表

ぃ、小莉子 提交于 2020-03-28 07:11:19
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。 例如: Example::Example() : ival(0), dval(0.0) {} //ival 和dval是类的两个数据成员 上面的例子和下面不用初始化列表的构造函数看似没什么区别: Example::Example() { ival = 0; dval = 0.0; } 的确,这两个构造函数的结果是一样的。但区别在于:上面的构造函数(使用初始化列表的构造函数) 显示的初始化类的成员 ;而没使用初始化列表的构造函数是 对类的成员赋值 , 并没有进行显示的初始化 。 初始化和赋值对 内置类型的成员 没有什么大的区别 ,像上面的任一个构造函数都可以。但 有的时候必须用带有初始化列表的构造函数 : (1) 成员类型是没有默认构造函数的类 。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。 (2) const 成员或引用类型的成员 。因为const对象或引用类型只能初始化,不能对他们赋值。 C++在类的构造函数中,可以两种方式初始化成员数据(data member)。 1,在构造函数的实现中,初始类的成员数据。诸如: class point { private: int x,y; public

静态变量、全局变量和局部变量

家住魔仙堡 提交于 2020-03-28 06:44:07
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 堆和栈的区别: 一、预备知识——程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack)——由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—— 一般由程序员分配(如new、malloc)和释放(delete,free), 若程序员不释放,程序结束时可能由OS回收,但这样会导致内存泄露,严重的导致系统崩溃, 如一个程序是长期运行的,申请的变量永远都得不到释放,系统内存会耗尽。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)——全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放。 4、文字常量区 —— 常量字符串就是放在这里的。 程序结束后由系统释放 。 5、程序代码区 —— 存放函数体的二进制代码。 堆区就就是就是存放new出来的变量的 1.从作用域看: C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 1、全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然

JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

前提是你 提交于 2020-03-27 22:18:53
JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别   ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用这些功能。虽然这种假设可能是正确的,但仍有可能其中一些功能对某些人来说仍然是一个谜。   ES6带来的一个新特性是 新增了通过使用let、const来声明变量 。在本文中,我们将讨论var,let和const的范围,使用和提升。在您阅读时,请注意它们之间的差异,我会指出。 VAR VAR的范围   范围本质是意味着这些变量可供使用的位置。 var声明的范围是全局作用于或者本地函数作用域 。当一个var变量声明在函数外面时它的作用域是全局的,这意味着在整个窗口中可以使用在函数块外部使用var声明的任何变量。 var变量在函数内声明时是函数作用域 。这意味着它可用,只能在该函数中访问。   我们举一个例子: <script> var greeter = "Hello"; function hello() { var hi = "Hi"; } </script>   在这里,greeter是全局范围的,因为它存在于函数外部,而hello是函数作用域。所以我们不能在函数外部访问变量hi。所以,如果我们这样做:    var变量可以重新声明和更新   这个是比较好理解的    var变量提升

spring的懒加载和depends-on

早过忘川 提交于 2020-03-27 21:42:47
①延迟初始化Bean(惰性初始化Bean)是指不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean. 配置方式很简单只需在<bean>标签上指定 “lazy-init” 属性值为“true”即可延迟初始化Bean。 配置文件: <!--HelloWorld.xml--> <bean id="helloApi" class="cn.javass.spring.chapter2.helloworld.HelloImpl" lazy-init="true"/> ②depends-on是指指定Bean初始化及销毁时的顺序,使用depends-on属性指定的Bean要先初始化完毕后才初始化当前Bean,由于只有"singleton"Bean才能被Spring管理销毁,所以当指定的Bean都是"singleton"时,使用depends-on属性指定的Bean要在指定的Bean之后销毁。 配置代码: <bean id="helloApi" class="com.feng.spring.chapter2.helloworld.HelloApi"> </bean> <bean id="decorator" class="cn.javass.spring.chapter3.bean.HelloApiDecorator" depends-on="helloApi"> <property

JVM史上最最最完整深入解析(12000字噢)

空扰寡人 提交于 2020-03-27 18:12:07
3 月,跳不动了?>>> 点点这个链接免费获取: 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 工作之余,总结一下JVM相关知识。 Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图: 1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。 2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。(1)栈帧:栈帧存储方法的相关信息,包含局部变量数表、返回值、操作数栈、动态链接a、局部变量表:包含了方法执行过程中的所有变量。局部变量数组所需要的空间在编译期间完成分配,在方法运行期间不会改变局部变量数组的大小。b、返回值:如果有返回值的话,压入调用者栈帧中的操作数栈中,并且把PC的值指向 方法调用指令 后面的一条指令地址。c、操作数栈:操作变量的内存模型。操作数栈的最大深度在编译的时候已经确定(写入方法区code属性的max_stacks项中)。操作数栈的的元素可以是任意Java类型,包括long和double

类初始化导致死锁

為{幸葍}努か 提交于 2020-03-27 14:30:42
3 月,跳不动了?>>> 本文来自 PerfMa社区,欢迎关注公众号 链接: https://club.perfma.com/article/61163 一张图简单描述死锁 如上图,Thread1 拿到了 object1,Thread2 拿到了 object2,但是现在 Thread1 需要拿到 object2 的锁才能继续往下,Thread2 又要拿到 object1 才能继续往下,于是哪个线程都无法得到满足继续往下来释放对方所需要的锁对象,从而造成了死锁。 概述 之前写过关于类加载死锁的文章“消失的死锁”,说的是类加载过程中发生的死锁,我们从线程dump里完全看不出死锁的迹象,但是确实发生了死锁,没了解的建议看看我公众号上相关的文章。 本文要说的是另外一个问题,之前在生产环境上碰到,是类初始化导致的死锁,恩,你没看错,确实是类初始化导致的死锁,我之前写过一篇文章,不可逆的类初始化过程,这篇文章可以助你了解类的初始化过程,另外也写过一篇JDK的sql设计不合理导致的驱动类初始化死锁问题,也是关于初始化死锁的,原因其实差不多,不过本文将这个问题描述的场景更加通用化了。 Demo 严格意义上说,这个Demo里提到的情况是其中一个简单的场景,和我们线上碰到的场景会有点出入,比这个会更复杂点。 为了让问题能重现,我选择了一个最简单的办法,就是debug,一般情况下,并发导致的问题

linxu服务初始化常用命令

你说的曾经没有我的故事 提交于 2020-03-27 14:19:38
3 月,跳不动了?>>> # Close SELINUX setenforce 0 sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config chkconfig iptables off echo 'PS1="\[\033[01;31m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[00m\][\[\033[01;33m\]\t\[\033[00m\]]:\[\033[01;34m\]\w\[\033[00m\]\n$ " ' >> /etc/profile echo "TMOUT=0" >> /etc/profile echo "HISTSIZE=10000" >> /etc/profile echo "set nu" >> /etc/vimrc echo "set paste" >> /etc/vimrc echo 'set ic' >> /etc/vimrc 安装ps yum -y reinstall procps 其中,procps包中包含了ps命令。 yum -y reinstall net-tools yum -y reinstall lsof yum -y reinstall iproute 允许root登陆 chage -M 99999 root sed -i 's

react的生命周期

流过昼夜 提交于 2020-03-27 12:47:23
什么是声明周期? 组件本质上就是状态机,输入确定,输出一定确定。如何理解这一点?react有两个特点,第一个就是去除了所有的手动dom操作,也就是使用jsx。第二个就是组件把状态和结果一一对应起来,从而能够直观的看出来,程序在不同的状态是的输出。属性是由父组件传递给子组件的,状态是子组件内部维护的一些数据,当状态发生变化时候,组件也会进行更新,因此我们可以理解成一个state对应一个render的结果,这样我们就可以知道在不同的state下,组件会render出什么样的结果,从而就知道组件在页面上展示的内容是什么。状态机本质上就是状态和转移的结合,我们刚才说过,不同的状态对应不同的输出,状态和状态之间有时候会发生转换,当状态发生转变的时候,会触发不同的钩子函数,从而让开发者有机会做出相应,因为状态转换是由react来进行维护的。作为开发者没有 办法直接的参与到状态转换中,但是react给我们提供了很多钩子函数,我们可以自己来编写这些钩子函数,这样react在进行状态转换的时候,就可以调用我们的状态函数。 我们也可以用事件的思路来理解状态,开发者不知道什么时候会发生事件,但是我们可以决定在发生事件的时候,执行什么动作,也就是事件的监听器,状态和事件有一些类似,他们的区别是事件和事件之间没有直接的关系,每个事件都是独立发生的,但是状态和状态之间是有关系的,组件可以处于不同的状态中