局部变量

JAVA Class文件和类加载机制

别等时光非礼了梦想. 提交于 2019-12-06 08:44:05
1 class文件结构 Class文件结构是了解虚拟机的重要基础之一,如果想深入的了解虚拟机,Class文件结构是不能不了解的。 Class文件是一组以8位字节为基础单位的二进制流,各项数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,如果是超过8位字节以上空间的数据项,则会按照高位在前的方式(Big-Endian)分割成若干个8位字节进行存储。(Big-Endian模式具体可见 详解大端模式和小端模式 ) Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息。 Class文件格式只有两种数据类型:无符号数和表。 无符号数属于基本的数据类型,以u1,u2,u4,u8来分别代表1个字节,2个字节,4个字节和8个字节的无符号数;可用来描述数字,索引引用,数量值或者按照UTF-8编码构成的字符串值。 表是由 多个无符号数或者其他表作为数据项构成的复合数据类型 ,所有表都习惯性地以“_info”结尾。表用于描述由层次关系的复合结构的数据。 整个Class文件本质上就是一张表 class文件的内容中没有任何的分隔符号,所以在上表中的数据项,无论是顺序还是数量,都是被严格限定的,哪个字节代表什么含义,长度多少,先后顺序如何,都不允许改变。 1.1 魔数和class文件的版本 Class文件的头4个字节成为魔数(Magic Number)

当函数返回一个局部变量的指针问题,内存是否被释放

纵饮孤独 提交于 2019-12-06 08:38:00
在学习c/c++的时候,我遇到了一个让我思考良久的问题,当一个自定义函数返回一个局部变量的指针时是否是个野指针呢?对此,我讲一下我的理解 。 按照正常的理解,当一个函数运行完毕后会使其内存释放,这就产生了一个问题。当一个函数里面有一个局部变量时,使一个指针指向这个变量的空间,最后这个空间被释放,然后指针 变为野指针,即这种理解:( 注:这是错误理解 ) 首先 然后内存释放 如果按照这样的逻辑,p定是个乱码 但是vs2019运行如下: 其实真实原因是,我们理解的内存释放,并不是真正意义上的内存释放,而是表示这个空间可以被其他内存使用,而其值仍存在,并不是内存里的东西直接就没了, 但返回一个类似的指针是一个大忌,这种程序小,可能没有问题,但是在某些大项目中,若这样写就可能使数据内存出现问题。 来源: https://www.cnblogs.com/Qsir10/p/11972807.html

连接查询 变量、if else、while

白昼怎懂夜的黑 提交于 2019-12-06 08:31:27
连接查询 变量、if else、while 一、连接查询: 通过连接运算符可以实现多个表查询。 连接 是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 常用的两个链接运算符 : 1.join on (左右连接) 2.union (上下连接) 注:只有在列的数据类型一致时才能够连接起来 二、变量 SQL语言也跟其他编程语言一样,拥有变量、分支、循环等控制语句。 在 SQL语言里面把变量分为 局部变量 和 全局变量 ,全局变量又称系统变量(@@)。 局部变量: 使用 declare 关键字给变量声明,语法非常简单: declare @<变量名 > <变量类型 > 对变量的赋值可以使用 set 关键字,使用 set关键字时对变量的赋值一次只能赋值一个。 我们也可以在查询语句里面对这个变量进行赋值。 1 --局部变量 @变量 数据类型 2 --的定义和使用,临时存储数据,作用范围是函数内部 3 --局部变量是用户可自定义的变量,它的作用范围仅在程序内部。局部变量的名称是用户自定义的,命名的局部变量名要符合SQLserver2012标识符命名规则,局部变量名必须以@开头。 4 declare @hello varchar(60) 5 --变量赋值 为变量赋值的方式一般有两种,一种是使用select语句,一种是使用set语句。 6 --使用select语句赋值SQL:

SQL中的全局变量和局部变量(@@/@)

核能气质少年 提交于 2019-12-06 08:25:41
在SQL中,我们常常使用临时表来存储临时结果,对于结果是一个集合的情况,这种方法非常实用,但当结果仅仅是一个数据或者是几个数据时,还要去建一个表,显得就比较麻烦,另外,当一个SQL语句中的某些元素经常变化时,比如选择条件,(至少我想)应该使用局部变量。当然MS SQL Server的全局变量也很有用。 >>>>局部变量 声明:DECLARE @local_variable data_type @local_variable 是变量的名称。变量名必须以 at 符 (@) 开头。data_type 是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。 示例: use master declare @SEL_TYPE char(2) declare @SEL_CUNT numeric(10) set @SEL_TYPE = 'U'/*user table*/ set @SEL_CUNT = 10 /*返回系统中用户表的数目*/ select @SEL_CUNT = COUNT(*) from sysobjects where type = @SEL_TYPE select @SEL_CUNT as 'User table ''s count' 如果要返回系统表的数目,可以用set @SEL_TYPE = 'S'

js全局变量和局部变量

戏子无情 提交于 2019-12-06 07:44:18
JS中声明全局变量主要分为 显式声明 或者 隐式声明 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量 声明方式二: 没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。 声明方式三: 使用window全局对象来声明,全局对象的属性对应也是全局变量 全局变量的优点: 可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗。 缺点: 1 占用较多的内存单元 2 破坏了函数的封装性能 使函数对全局变量产生依赖 3 降低代码可读性 注意事项: 一、Javascript的变量的scope(范围)是根据方法块来划分的(也就是说以function的一对大括号{ }来划分) 。 切记,是function块,而for、while、if块并不是作用域的划分标准 二、Javascript在执行前会先对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定实变量的作用域 。 三,当全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回到全局变量的scope var a = 10; function test() {

【前端性能优化】高性能JavaScript整理总结

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-06 05:27:41
高性能JavaScript整理总结 关于前端性能优化:首先想到的是 雅虎军规34条 然后最近看了《高性能JavaScript》 大概的把书中提到大部分知识梳理了下并加上部分个人理解 这本书有参考雅虎特别性能小组的研究成果,所以跟34 军规有很多相似之处 有不当之处请在评论区指正,感谢~ 约定 :很多单词语法都是简写比如doc指document,点点点代表不重要代码省略,码字不易(/双手合十) 1. 加载和执行 JavaScript是单线程,所以JavaScript的加载和执行是从上至下加载执行完一个再继续加载执行下一个文件,会阻塞页面资源的加载,所以一般情况下JavaScript文件放在body标签 内 底部,很多后端开发人员放在body标签外下面,这样做不好的地方有两处:1、不规范 2、 可能 会造成js获取不到页面元素而导致报错。而放在body标签内底部可以确保js执行前页面渲染完成  <body> js... //正确 </body> <!-----------------------分界线----------------------------> <body> </body> js... //错误 合并脚本,每个<script>标签初始化下载都会阻塞页面渲染,所以减少页面的<script>标签数量可以起到优化作用,内嵌脚本外链脚本通用,另外HTTP会带来的额外的性能消耗

Java成员变量和局部变量

社会主义新天地 提交于 2019-12-06 03:24:45
目录 Java成员变量和局部变量 成员变量 实例变量 类变量 局部变量 形参变量 方法局部变量 代码块局部变量 关于命名 Java成员变量和局部变量 变量相当于一个有名称的容器,用于装不同类型的数据。而Java中根据变量定义位置的不同,又把变量分为 成员变量 和局部变量。 由于对修饰符还没有系统学习,就暂且以public访问权限最高的作为修饰符。 还是先上一段代码: package com.my.pac03; /** * @author Summerday * @date 2019/11/29 14:44 */ public class VariablesTest { //成员变量会默认初始化 public int value;//定义实例变量 public static String name;//定义类变量,属于类,而不是类的单个实例。 //main方法,程序入口 public static void main(String[] args) { VariablesTest test = new VariablesTest(); //实例访问实例变量 test.value = 10; //类访问类变量 VariablesTest.name = "typeName"; System.out.println(VariablesTest.name);//typeName /

Java的内存划分

那年仲夏 提交于 2019-12-06 02:52:18
1,栈(Stack): 存放的都是方法中的局部变量,方法的运行一定要在栈当中。   局部变量:方法的参数或者方法内部的变量   作用域:一旦超出作用域,立刻从栈内存当中消失 2,堆(Heap):凡是 new 出来的东西,都在堆当中。   堆内存里面的东西都有一个地址值:16进制   堆内存里面的数据,都有默认值:     如果是整数:默认为0     如果是浮点数:默认为0.0     如果是字符:默认为'\u0000'     如果是布尔:默认为false     如果是引用类型:默认为null 3,方法区(Method Area):存储 .class 相关信息,包含方法的信息。 4,本地方法栈(Native Method Stack):与操作系统相关。 5,寄存器(pc Register):与CPU相关。 来源: https://www.cnblogs.com/3b2414/p/11959146.html

js闭包处理

亡梦爱人 提交于 2019-12-05 22:00:27
闭包 就是把局部变量变成全局变量的一种技术手段 可以把闭包简单理解成‘定义在一个函数内部的函数’。 所以,在本质上,闭包就是将函数内部和函数外部连接的一座桥梁。 优点: 1 希望一个变量长期驻扎在内存中 2 避免全局变量的污染 3 私有成员的存在 解决方法: 在函数的内部,再定义一个函数 闭包 (closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包的作用:通过一系方法,将函数内部的变量 (局部变量)转化为全局变量 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。   var n=999;   function f1(){     alert(n);   }   f1(); // 999 另一方面,在函数外部无法读取函数内的局部变量。   function f1(){     var n=999;   }   alert(n); // error 这里有一个地方需要注意, 函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!   function f1(){     n=999;   }   f1();   alert(n); // 999 二、如何从外部读取局部变量? 出于种种原因

JVM(二) 栈内存结构

孤街醉人 提交于 2019-12-05 20:43:47
栈内存是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、返回出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。栈帧(Frame)是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接(Dynamic Linking)、方法返回值和异常分派(Dispatch Exception)。栈帧随着方法调用而创建,随着方法结束而销毁——无论方法是正常完成还是异常完成(抛出了在方法内未被捕获的异常)都算作方法结束。 局部变量表 局部变量表(Local Variables Table)也可以称之为本地变量表,它包含在一个独立的栈帧中。顾名思义,局部变量表主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类原始数据类型、对象引用(reference),以及returnAddress类型。局部变量表所需的容量大小在编译期就可以被完全确定下来,并保存在方法的Code属性中。大家思考一下,既然方法体内定义的局部变量是存储在栈帧中的局部变量表里的,那么原始数据类型的成员变量的值是否也存储在局部变量表中呢?其实如果是定义在方法体外的成员变量,不止是作用域发生了变化,更重要的是,其值也并非还是存储在局部变量表里,而是存储在对象内存空间的实例数据中