局部变量

day09

我怕爱的太早我们不能终老 提交于 2019-11-30 02:33:39
变量的分类:按照变量声明的位置划分 1,局部变量 2,成员变量 (1)实例变量:没有static修饰的属性 (2)类变量:使用static修饰的属性 局部变量和成员变量的区别 1,声明位置 局部变量的声明位置 (1)方法的形参列表 (2)方法体中 (3)代码块 成员变量声明的位置:类中方法、代码块等外面 2,初始化的方式 局部变量初始化 (1)形参的初始化必须在调用时由实参赋值 (2)其他局部变量必须手动初始值 成员变量初始化 (1)有默认值 (2)显示初始化 (3)构造器 (4)set方法可再次修改值 3,值的存储位置不同 局部变量:栈 成员变量:(1)实例变量:堆 (2)类变量:? 4,生命周期 局部变量:短 当代码执行到局部变量声明处开始,到它的作用域结束 成员变量:相对长 随着对象的创建而创建,随着对象被垃圾回收而消亡;每个对象的成员变量是独立的 5,修饰符不同 局部变量:final 成员变量:权限修饰符(4个),static,final,volatile等 二,继承(extends) 概念:延续、保留、并且扩展 1,继承的目的(好处)(意义): 代码的复用、代码的扩展、可以表示事物之间is-a的关系。 2,继承的语法格式: 【修饰符】 class 子类 extends 父类{ } 3,继承的特点: (1)Java只支持单继承 一个子类只能有一个直接的父类 (2

python之路——函数进阶

我的未来我决定 提交于 2019-11-29 21:30:32
阅读目录  楔子  命名空间和作用域  函数嵌套及作用域链  函数名的本质  闭包  本章小结 返回顶部 楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print(bigger) 之前是不是我告诉你们要把结果return回来你们就照做了?可是你们有没有想过,我们为什么要把结果返回?如果我们不返回m,直接在程序中打印,行不行? 来看结果: >>> def my_max(x,y): ... m = x if x>y else y ... >>> my_max(10,20) >>> print(m) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'm' is not defined 报错了!错误是“name 'm' is not defined”。变量m没有被定义。。。为啥?我明明定义了呀! 在这里我们首先回忆一下python代码运行的时候遇到函数是怎么做的。 从python解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来。 但是

ThreadLocal

被刻印的时光 ゝ 提交于 2019-11-29 18:21:45
一、概述 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。 从线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)。 通过ThreadLocal存取的数据,总是与当前线程相关,也就是说,JVM 为每个运行的线程,绑定了私有的本地实例存取空间,从而为多线程环境常出现的并发访问问题提供了一种隔离机制。 ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单,在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本。 概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问

Java基础知识总结

我们两清 提交于 2019-11-29 17:15:43
本博文内容参考相关博客以及《Java编程思想》整理而成,如有侵权,请联系博主。 转载请注明出处: http://www.cnblogs.com/BYRans/ PDF版下载链接: 《Java基础知识总结》 。 如果您想在此基础上做一些修改,请联系dingyu.sdu@gmail.com,我把word原版发给您。 一:java概述: 1,JDK:Java Development Kit, java的开发和运行环境,java的开发工具和jre。 2,JRE:Java Runtime Environment, java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。 3,配置环境变量: 让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1 ): 永久配置方式:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin 2 ): 临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 classpath的配置: 1 ): 永久配置方式:classpath=.;c:\;e:\ 2 ):

python - - 函数

若如初见. 提交于 2019-11-29 16:52:00
python -- -- 函数 普通函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。 规则: 以 def 关键词开头,后接函数标识符名称和圆括号 ()。 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。(参数可以没有) 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数名所有都小写 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 注意:若定义的函数名在程序前面定义的函数名相同则将程序前面的函数名覆盖 定义方式: def 函数名(参数列表):   函数体 函数调用 你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。 参数传递 注意:类型属于对象,变量是没有类型的 a=[1,2,3] a="Runoob" 解析: [1,2,3] 是 List 类型,“Runoob” 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。 固定参数 形参 定义函数时,括号里的参数,没有具体值 补充: 形参可以有默认值,调用时,该参数可以不赋值,如果赋值就会覆盖掉默认值

JVM指令手册

蓝咒 提交于 2019-11-29 11:22:09
文章目录 栈和局部变量操作 将常量压入栈的指令 将栈中的值存入局部变量的指令 wide指令 通用(无类型)栈操作 类型转换 整数运算 逻辑运算 移位操作 按位布尔运算 浮点运算 对象和数组 对象操作指令 数组操作指令 控制流 条件分支指令 比较指令 无条件转移指令 表跳转指令 异常 方法返回指令 线程同步 JVM指令助记符 栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入栈 iconst_5 将int类型常量5压入栈 lconst_0 将long类型常量0压入栈 lconst_1 将long类型常量1压入栈 fconst_0 将float类型常量0压入栈 fconst_1 将float类型常量1压入栈 dconst_0 将double类型常量0压入栈 dconst_1 将double类型常量1压入栈 bipush 将一个8位带符号整数压入栈 sipush 将16位带符号整数压入栈 ldc 把常量池中的项压入栈 ldc_w 把常量池中的项压入栈(使用宽索引) ldc2_w

java方法执行流程解析

*爱你&永不变心* 提交于 2019-11-29 10:07:25
Java程序运行时,必须经过编译和运行两个步骤。首先将后缀名为.java的源文件进行编译,最终生成后缀名为.class的字节码文件。然后Java虚拟机将编译好的字节码文件加载到内存(这个过程被称为类加载,是由加载器完成的),然后虚拟机针对加载到内存的java类进行解释执行,显示结果。 Java的运行原理 在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。 Java代码编译和执行的整个过程 Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码编译机制 类加载机制 类执行机制 Java源码编译机制 Java

js基础-作用域和作用域链以及闭包

十年热恋 提交于 2019-11-29 08:26:39
作用域概念: 作用域是可访问变量的集合。 在 JavaScript 中, 对象和函数同样也是变量。 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 JavaScript 函数作用域: 作用域在函数内修改。 作用域分类:   全局作用域 和 局部作用域 局部作用域:   变量在函数内声明,只能在函数内部访问,即局部变量   函数参数也是局部变量 因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。 全局作用域:   变量在函数外定义,即为全局变量   全局变量有 全局作用域: 网页中所有脚本和函数均可使用。 如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。 在 HTML 中, 全局变量是 window 对象: 所有数据变量都属于 window 对象。 1 var a = 100;//全局 2 function fn(){ 3 var a =200; 4 console.log('函数作用域',a); 5 } 6 console.log('全局作用域',a); //全局作用域 100 7 fn();//函数作用域 200 JavaScript 变量生命周期: JavaScript 变量生命周期在它声明时初始化。 局部变量在函数执行完毕后销毁。 全局变量在页面关闭后销毁。 js中无块级作用域 1 if(true){ 2 var

JDK10.0新特性

自作多情 提交于 2019-11-29 06:24:07
JDK10.0新特性 1.局部变量类型推断 2.垃圾收集器优化 3.新增加73个新功能扩展API类库 4.copyof方法 5.ByteArrayOutputStream下的toString()方法 6.Java.io.PrintStream、java.io.PrintWriter 7.Java.io.Reader:transferTo方法 8.java.util.Formatter、java.util.Scanner 使用jdk10需要最新版eclipse 局部变量类型推断 var:保留类型,不是关键字 意味着我们还可以用var来定义变量名字或方法名 只针对局部变量 所有定义类型或返回值类型都可以用var表示 var 不允许赋值null /** * JDK10新特性讲解:局部变量类型推断 * @author Administrator * 定义一个javabean */ class Users{ private String username; private Integer userage; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getUserage

JavaScript闭包如何工作?

本秂侑毒 提交于 2019-11-29 05:46:31
您将如何向了解其闭包概念(例如函数,变量等)的人解释JavaScript闭包,但却不了解闭包本身? 我已经在Wikipedia上看到 了Scheme示例 ,但是不幸的是它没有帮助。 #1楼 我知道已经有很多解决方案,但是我猜想这个小而简单的脚本可以用来说明这个概念: // makeSequencer will return a "sequencer" function var makeSequencer = function() { var _count = 0; // not accessible outside this function var sequencer = function () { return _count++; } return sequencer; } var fnext = makeSequencer(); var v0 = fnext(); // v0 = 0; var v1 = fnext(); // v1 = 1; var vz = fnext._count // vz = undefined #2楼 面向初学者的JavaScript关闭 莫里斯在2006年2月2日星期二提交。 从此开始由社区编辑。 关闭不是魔术 本页说明了闭包,以便程序员可以使用有效的JavaScript代码来理解闭包。 它不适用于专家或功能性程序员。 一旦核心概念浮出水面,关闭