局部变量

JVM 的内存模型

折月煮酒 提交于 2020-01-26 18:56:17
为什么要了解? 很多做Android开发的同学会问,我们为什么要了解这个呢?首先移动端资源有限,我们了解jvm的内存模型,便于我们更好的管理客户端的内存。 什么是JVM? java代码的执行过程如下图: 运行时数据区可分为:方法区、堆、虚拟机栈、本地方法栈、程序计数器五个部分。 概述 方法区:线程共享数据,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 堆:线程共享数据,主要是存放对象实例和数组。内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB)。可以位于物理上不连续的空间,但是逻辑上要连续。 虚拟机栈:线程隔离数据,每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。 本地方法栈:线程隔离数据,区别于 Java 虚拟机栈的是,Java 虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。 程序计数器:线程隔离数据,字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成。 1.方法区  

Java技术与Java虚拟机

时光怂恿深爱的人放手 提交于 2020-01-26 00:21:12
Java技术与Java虚拟机   说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成: Java编程语言 、 Java类文件格式 、 Java虚拟机 和 Java应用程序接口 (Java API)。它们的关系如下图所示: 图1 Java四个方面的关系   运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件)。最后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被 即时代码发生器 有选择的转换成机器码执行。从上图也可以看出Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平台上。这个平台的结构如下图所示: 图2 Java平台结构图   在Java平台的结构中, 可以看出,Java虚拟机(JVM) 处在核心的位置,是程序与 底层操作系统 和 硬件 无关的关键。它的下方是 移植接口 ,移植接口由两部分组成: 适配器 和 Java操作系统 , 其中依赖于平台的部分称为适配器;JVM 通过移植接口在具体的平台和操作系统上实现;在JVM 的上方是Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java

Objective-C中的Block(闭包)

纵饮孤独 提交于 2020-01-25 10:41:18
转自http://www.cnblogs.com/ludashi/p/3903054.html?utm_source=tuicool&utm_medium=referral 学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西。学过Javascript的小伙伴对闭包应该不陌生吧~学过PHP的应该也不陌生,在PHP5.3版本以后也支持闭包, 也就是OC中所提到的Block。 到底什么是闭包或者block呢?用大白话说就是匿名函数,也就是在函数中可以包含这函数。就是在函数中可以定义匿名函数然后在函数中调用。学习OC中的block之前也小担心一下,Block在OC中属于高级的部分,心里有又有个疑问:学起来难不难?看过Block的部分,感觉Block挺好理解的,用起来也挺顺手的,Block没我想象中的那么难理解。 废话少说,学习一门新的编程语言是少不了代码量的支持的,所以代码是少不了的。下面就通代码来认识一下OC中的block的使用。 Block基础部分 1.Block的声明 Block的定义和函数的声明差不多,就是把函数名改成(^blockName)即可。下面是block声明的代码。 有返回值的 1 int (^sumBlock) ( int , int ); 无返回值的 1 void (^myBlock)( int , int ); 2

Objective-C中的Block

大憨熊 提交于 2020-01-24 09:50:27
来源: 伯乐在线 - 青玉伏案 链接:http://ios.jobbole.com/83229/ 学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西。学过Javascript的小伙伴对闭包应该不陌生吧~学过PHP的应该也不陌生,在PHP5.3版本以后也支持闭包, 也就是OC中所提到的Block。 到底什么是闭包或者block呢?用大白话说就是匿名函数,也就是在函数中可以包含这函数。就是在函数中可以定义匿名函数然后在函数中调用。学习OC中的block之前也小担心一下,Block在OC中属于高级的部分,心里有又有个疑问:学起来难不难?看过Block的部分,感觉Block挺好理解的,用起来也挺顺手的,Block没我想象中的那么难理解。 废话少说,学习一门新的编程语言是少不了代码量的支持的,所以代码是少不了的。下面就通代码来认识一下OC中的block的使用。 Block基础部分 1.Block的声明 Block的定义和函数的声明差不多,就是把函数名改成(^blockName)即可。下面是block声明的代码。 有返回值的 int ( ^ sumBlock ) ( int , int ); 无返回值的 void ( ^ myBlock )( int , int ); 2.给block块赋值 给声明好的block,赋值。block的值就是个函数体

函数补充:动态参数,函数嵌套,global与nonlocal关键

时间秒杀一切 提交于 2020-01-24 03:53:24
一丶动态参数    1.*args 位置参数,动态传参 def func(*food): print(food) print(func("米饭","馒头","福建人","犹太人"))   将所有的位置参数都赋给*food    2.**kwargs 关键字参数,动态传参 # 关键字的动态传参 def eat(**food): print(food) print(eat(广东人= "福建人",goodeat = "饼干",我的天="飞天"))   将关键字参数,以字典的形式赋给**food    3.默认参数与动态参数的关系      如果以位置参数,关键字参数,默认参数排列会报错,我们改一下默认参数的位置,发现只有在位置参数后面,关键字参数前面,默认参数才不会报错 def func(*name,gender="男",**hobby): print(name,hobby,gender) print(func("周杰伦","谢霆锋","吴京",hobby1="看电影",hobby2="唱歌"))    总结一下顺序:       位置参数>*args>默认值参数>**kwargs   如果想接收所有参数,可以用*arge 和 **kwargs组合 def trans_para(*args,**kwargs): print(args) print(kwargs) trans_para(

【Finish】Python Day 10

扶醉桌前 提交于 2020-01-24 03:34:39
# 函数:可读性强 复用性强 # def 函数名():   # 函数体   # return 返回值 # 所有函数:只定义不调用则一定不执行;       # 先定义后调用 # 函数名()不接受返回值 # 返回值 = 函数值()接受返回值 # 返回值:   # 没有返回值;     不写return:函数内的代码执行完毕则自动结束,     只写return:结束一个函数     return none   # 返回一个值;结束了函数且返回一个值,可以是任意值   # 返回多个值:多个值之间用逗号隔开,接收的时候 可以使用1个或者等量的多个变量接收(元祖) # 参数   # 形参:定义函数的时候       # 位置参数:必须传       # *args:动态参数 可以接受任意多个按照位置传入的参数       # 默认参数:可以不穿 —— 陷阱       # **kwargs:动态参数 可以接受任意多个按照关键字传入的参数   # 实参:调用函数的时候       # 按照位置传参数       # 按照关键字传参数         # 可以混用 位置参数必须在关键字传参之前         # 不能对一个参数重复赋值        # 如果默认参数的值是一个可变的数据类型,那么每一次调用函数的时候,如果不传值就公用这个数据类型的资源 # 函数的进阶# 命名空间和作用域#

java 局部变量和成员变量区别

六月ゝ 毕业季﹏ 提交于 2020-01-21 17:52:49
相同点 1.遵循变量的声明格式:数据类型 变量名 = 初始化值 2.都有作用域 局部变量和成员变量的不同: 1、定义的位置不一样 局部变量:定义在方法内部 成员变量:在方法外部,直接写在类中 2、作用范围不一样 局部变量:只有方法中能使用,除了方法就不能用 成员变量:整个类都可以用 3、默认值不一样 局部变量:无默认值,先赋值在使用 成员变量:如果没有赋值有默认值 4、内存的位置不一样 局部变量:位于栈内存 成员变量:为于堆内存 5、生命周期不一样 局部变量:随着方法的进栈而诞生,随着方法出栈而消失 成员变量:随着对象的创建而诞生,随着对象被垃圾回收而消失 来源: CSDN 作者: hyp187 链接: https://blog.csdn.net/hyp187/article/details/104063623

python函数入门

送分小仙女□ 提交于 2020-01-21 03:15:14
知识内容: 1.函数的作用 2.函数的定义与调用 3.函数的返回值 4.函数的参数 5.局部变量与全局变量 6.作用域 一、函数的作用 1.复用代码 将可能重复执行的代码封装成函数,并在需要执行的地方调用函数,不仅可以实现代码的复用,还可以保持代码的一致性,便于日后的维护 2.提高可读性 使用函数可以提高代码的可读性,便于后期的代码维护,同时也有利于软件测试的进行 3.可拓展性 使用函数可以方便地进行功能的拓展,方便地进行功能添加,因为一个函数内部发生改变了,调用它的地方都可以发生改变。 二、函数的定义与调用 1. 函数的定义 (1)函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 (2)在python中定义函数的语法如下: 1 def 函数名(参数): 2 # 注释 3 函数体 在python中使用def关键字定义函数,然后是一个空格和函数名称,接下来是一对圆括号,在圆括号中是函数的参数,也就是形式参数列表, 多个参数用逗号隔开,圆括号之后是冒号,然后换行,最后是注释和函数体代码 (3)定义函数注意: 函数形参不需要声明变量,也不需要指定函数返回类型;即使函数不需要接受任何参数,也必须保留一对空的圆括号;括号后的冒号不能少;函数体相对于def关键字必须保证一个缩进(4个空格1个tab) (4)函数名: 函数名:函数名是包含字母,数字

全局变量与局部变量

£可爱£侵袭症+ 提交于 2020-01-21 02:29:39
下面的例子使用了局部变量: # include <iostream> using namespace std ; int g ; // 全局变量声明//在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。 //全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。 int main ( ) { int a , b ; // 全局变量声明//在函数或一个代码块内部声明的变量,称为局部变量。 //它们只能被函数内部或者代码块内部的语句使用。 a = 10 ; // 实际初始化 b = 20 ; // 实际初始化 g = a + b ; // 实际初始化 cout << g ; } 请点赞!谢谢! 来源: CSDN 作者: dgxdgh 链接: https://blog.csdn.net/dgxdgh/article/details/104048906

Axure 25 局部变量:增减商品数量(1)

我的未来我决定 提交于 2020-01-20 17:57:41
案例来源 天猫-商品详情 案例效果 初始状态,如图: 案例描述 单击“增加”按钮时,商品数量增加1;单击“减少”按钮时,商品数量减少1;商品数量最低为1。 元件准备 包含命名 文本框(用于显示商品数量):GoodsNumber 思路分析 ①单击“增加”按钮时,让文本框中的数量自增1,需要获取到文本框的内容,进行加1的计算后,再填写到到文本框(见操作步骤01)。 ②单击“减少”按钮时,不能直接减少,而是需要符合文本框内数值大于1的符合条件,才能够减少(见操作步骤02~03)。 操作步骤 01 为“增加”按钮的【鼠标单击时】事件添加case1,设置动作为【设置文本】到文本框“GoodsNumber”;新的数值为通过【添加局部变量】“n”获取到的“GoodsNumber”【元件文字】加1,即“[[n+1]]”。 case动作设置:见图8-36。 局部变量设置:见图8-37。 02 为“减少”按钮的【鼠标单击时】事件添加case1,设置条件判断为【元件文字】“GoodsNumber”【>】【值】“1”。 条件判断设置:见图8-38。 03 继续上一步,设置符合条件的动作为【设置文本】到文本框“GoodsNumber”;新的数值为通过【添加局部变量】“n”获取到的“GoodsNumber”【元件文字】减1,即“[[n-1]]”(见操作步骤01)。 事件交互设置:见图8-39。 来源: