局部变量

(转)Java 详解 JVM 工作原理和流程

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

类变量、成员变量、局部变量

可紊 提交于 2019-11-28 13:02:11
Java的中共有三种变量,分别是类变量,成员变量和局部变量。他们分别存放在JVM的方法区,堆内存和栈内存中。 / ** * @author win * / public class Variables { / ** *类变量 * / private static int a; / ** *成员变量 * / private int b; / ** *局部变量 * @param c * / public void test( int c){ int d; } } 来源: https://www.cnblogs.com/lujiahua/p/11408084.html

C语言--static变量及其作用

允我心安 提交于 2019-11-28 12:52:53
  在 C 语言中,static 关键字不仅可以用来修饰变量,还可以用来修饰函数。在使用 static 关键字修饰变量时,我们称此变量为静态变量。   静态变量的存储方式与全局变量一样,都是静态存储方式。但这里需要特别说明的是,静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态变量。例如,全局变量虽然属于静态存储方式,但并不是静态变量,它必须由 static 加以定义后才能成为静态全局变量。 隐藏与隔离的作用   上面已经阐述过,全局变量虽然属于静态存储方式,但并不是静态变量。全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,全局变量在各个源文件中都是有效的。   如果我们希望全局变量仅限于在本源文件中使用,在其他源文件中不能引用,也就是说限制其作用域只在定义该变量的源文件内有效,而在同一源程序的其他源文件中不能使用。这时,就可以通过在全局变量之前加上关键字 static 来实现,使全局变量被定义成为一个静态全局变量。这样就可以避免在其他源文件中引起的错误。也就起到了对其他源文件进行隐藏与隔离错误的作用,有利于模块化程序设计。 保持变量内容的持久性   有时候,我们希望函数中局部变量的值在函数调用结束之后不会消失,而仍然保留其原值。即它所占用的存储单元不释放,在下一次调用该函数时,其局部变量的值仍然存在,也就是上一次函数调用结束时的值。这时候

《Java 8 in Action》Chapter 3:Lambda表达式

帅比萌擦擦* 提交于 2019-11-28 10:48:21
1. Lambda简介 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 匿名——我们说匿名,是因为它不像普通的方法那样有一个明确的名称:写得少而想得多! 函数——我们说它是函数,是因为Lambda函数不像方法那样属于某个特定的类。但和方法一样,Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表。 传递——Lambda表达式可以作为参数传递给方法或存储在变量中。 简洁——无需像匿名类那样写很多模板代码。 2. Lambda写法 (parameters) -> expression 或 (parameters) -> { statements; } eg:(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); Lambda表达式有三个部分: 参数列表——这里它采用了Comparator中compare方法的参数,两个Apple。 箭头——箭头->把参数列表与Lambda主体分隔开。 Lambda主体——比较两个Apple的重量。表达式就是Lambda的返回值了。 3. 函数式接口和函数描述符 函数式接口就是只定义一个抽象方法的接口。接口上标有 @FunctionalInterface

JavaScript 中的闭包及使用

烈酒焚心 提交于 2019-11-28 10:11:33
闭包的概念 闭包就是能够读取其他函数内部变量的函数。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 Js代码   var n=999;   function f1(){     alert(n);   }   f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。 Js代码  function f1(){     var n=999;  }  alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! Js代码 function f1(){     n=999; } f1(); alert(n); // 999 二、如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。 那就是在函数的内部,再定义一个函数。 Js代码    function f1(){    n=999; function f2(){       alert(n); // 999    }  } 在上面的代码中,函数f2就被包括在函数f1内部

js 关于全局变量和局部变量的简单理解

 ̄綄美尐妖づ 提交于 2019-11-28 06:13:12
js 关于全局变量和局部变量的简单理解 1.简单来说在 函数里边定义的变量是局部变量,在函数外边访问不到; 全局变量是在函数外边的,在函数内外都可以被访问; var a = 10; function test() { var b = 100; console.log(a);//打印结果是10 a=100; //a前面没有var 所以这是全局变量。执行函数之后被赋值。 } test(); console.log(a); //打印结果为100 console.log(b);//报错 b is not defind var a = 10; function test() { var b = 100; console.log(a);//打印结果是undefined  var a=100; //a有var 所以这是局部变量。执行函数之后被赋值 } test(); console.log(a); //打印结果为10 console.log(b);//报错 b is not definded 说明: 因为a 是全局变量所以在函数内部可以被访问且被赋值;第一次打印结果为10; 执行函数后a的值变为100 ; b是局部变量;在函数外部被打印,访问不到b的值 所以报错; 2.如果局部变量和全局变量的变量名相同的情况; 1 var a = 10; 2 3 function test() { 4 5

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

霸气de小男生 提交于 2019-11-28 06:03:28
1.从作用域看: C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。 1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。 3>局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。 4>静态全局变量也具有全局作用域, 它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。 2.从分配内存空间看: 1> 全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间 2>全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同

成员变量、类变量、局部变量的区别

ぃ、小莉子 提交于 2019-11-28 06:01:44
变量名首写字母使用小写,如果由多个单词组成,从第2个单词开始的其他单词的首写字母使用大写。 如果局部变量的名字和成员变量的名字相同, 要想在该方法中使用成员变量,必须使用关键字this [java] view plain copy class People { String name = "类体重定义的name"; //类中的成员变量并赋值 People(){ } public void speak() { String name = "类体方法中定义的name"; //在方法speak中定义和成员变量名字相同的name并赋值 System.out.println(name); System.out.println( this.name); //通过this来访问类中的成员变量 } } public class TestThis { //源文件中只能有一个类是public类,并且源文件的名字必须与这个类的名字完全相同,如 //果没有public类,那么源文件的名字只要和某个类的名字相同就可以了。 public static void main(String[] args) { People myPeople = new People(); myPeople.speak(); } } 输出结果: 成员变量和局部变量的区别 成员变量: 1、成员变量定义在类中,在整个类中都可以被访问。

小菜鸟之java内存结构

无人久伴 提交于 2019-11-28 04:51:11
JVM启动流程: JVM基本结构图: 《深入理解Java虚拟机(第二版)》中的描述是下面这个样子的: Java中的内存分配: Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对数据进行了不同空间的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。 具体划分为如下5个内存空间:(非常重要) 栈:存放局部变量 堆:存放所有new出来的东西 方法区:被虚拟机加载的类信息、常量、静态常量等。 程序计数器(和 系统 相关) 本地方法栈 1、程序计数器: 每个线程拥有一个PC寄存器 在线程创建时创建 指向下一条指令的地址 执行本地方法时,PC的值为undefined 2、方法区: 保存装载的类信息   类型的常量池   字段,方法信息   方法字节码 通常和永久区(Perm)关联在一起 3、堆内存: 和 程序开发 密切相关 应用系统对象都保存在Java堆中 所有线程共享Java堆 对分代GC来说,堆也是分代的 GC管理的主要区域 现在的GC基本都采用分代收集算法,如果是分代的,那么堆也是分代的。如果堆是分代的,那堆空间应该是下面这个样子: 上图是堆的基本结构,在之后的文章中再进行详解。 4、栈内存: 线程私有,生命周期和线程相同 栈由一系列帧组成(因此Java栈也叫做帧栈) 帧保存一个方法的局部变量、操作数栈、常量池指针 每一次方法调用创建一个帧,并压栈 解释:

JAVA之变量总结

帅比萌擦擦* 提交于 2019-11-28 04:17:54
变量 1.用于存储数据,是可变的。 2.分类 (类型)基本数据类型和引用数据类型 >byte,short,int,long,float,double >char,boolean >class,interface,[],枚举,注解 #数据默认值和字节数# #字母所对应的数字# #基本数据类型和引用数据类型的区别# #进制转换# (位置)成员变量和局部变量 >实例变量,类变量 >形参,方法中变量,代码块中变量 >1.静态上下午只能访问静态属性和方法 >2.局部变量没有默认值,必须显示赋值。 #为什么局部变量没有默认值# #成员变量和局部变量的区别# 3.自动类型转换和强制类型转换。 >1.强制转换前,须做instanceof的强转判断 >2.大容量转小容量,要注意精度的丢失和容量溢出。 #为什么0.1+0.2结果不是0.3# 来源: https://www.cnblogs.com/200709qwerasdfg/p/11392043.html