-
2020-07-12 09:46:09
使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
x = 10 local i = 1 -- local to the chunk while i<=x do local x = i*2 -- local to the while body print(x) --> 2, 4, 6, 8, ... i = i + 1 end if i > 20 then local x -- local to the "then" body x = 20 print(x + 2) else print(x) --> 10 (the global one) end print(x) --> 10 (the global one)
注意
,如果在交互模式下上面的例子可能不能输出期望的结果,因为第二句local i=1是一个完整的chunk,在交互模式下执行完这一句后,Lua将开始一个新的chunk,这样第二句的i已经超出了他的有效范围。可以将这段代码放在do..end(相当于c/c++的{})块中。应该尽可能的使用局部变量,有两个好处:
1. 避免命名冲突
2. 访问局部变量的速度比全局变量更快.我们给block划定一个明确的界限:do..end内的部分。当你想更好的控制局部变量的作用范围的时候这是很有用的。
do local a2 = 2*a local d = sqrt(b^2 - 4*a*c) x1 = (-b + d)/a2 x2 = (-b - d)/a2 end -- scope of 'a2' and 'd' ends here print(x1, x2)
更多相关内容 -
java入门之代码块和全局变量/局部变量
2018-08-26 14:59:361、代码块:Java中代码块分为静态代码块和非静态代码块。 2、特点:静态代码块只在类加载时执行一次;静态代码块每次创建对象时都会执行。 { System.out.println(age); } static { System.out.println(name...一、代码块
1、代码块:Java中代码块分为静态代码块和非静态代码块。
2、特点:静态代码块只在类加载时执行一次;静态代码块每次创建对象时都会执行。{ System.out.println(age); } static { System.out.println(name); }
3、static修饰符:可修饰变量,代码块,方法。 public class Dui { static int age=1;//成员变量被static修饰,则其被所有对象共享。 //非静态数码块 { int age = 1;//无初始值,且不能加访问控制符和static。 System.out.println(age); } //静态的比非静态的早执行 static int a=2;//加载时赋初值 static {//加载时执行 System.out.println(a); } public static void print(int age) {//类加载时分配地址 System.out.println(age); } public static void main (String[] args) {//类加载时分配地址 System.out.println(a); new Dui();//静态的可以通过对象创建,使用非静态的变量。 new Dui().prints(14);//静态的可以通过对象创建,执行非静态的方法,不能直接调用(静态的先执行) print(24);//静态的可以直接调用静态方法。 } //非静态 int b =12;//创建对象时赋初值 { System.out.println(b);//创建对象时执行 } public void prints(int age) {//创建对象时分配地址 System.out.println(age); print(12);//非静态的可以直接调用静态方法 System.out.println(a);//非静态的可以直接使用静态变量 }
二:全局变量/局部变量
1、全局变量:直接在类中声明的变量叫成员变量(又称全局变量)。注:如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而自定义类型则分配初始值null。
2、作用范围:成员变量定义后,其作用域是其所在的整个类。注:成员变量的定义没有先后顺序,但是最好将成员变量的定义集中在类的顶部。
3、局部变量:方法中的参数、方法中定义的变量和代码块中定义的变量统称为局部变量。注:局部变量在使用以前必须显式初始化或赋值,局部变量没有默认值。
注:声明局部变量时,数据类型前除final外不允许有其他关键字,即其定义格式为: [final] 数据类型 变量名 = 初始值;
4、作用范围:局部变量的作用域范围从定义的位置开始到其所在语句块结束。//局部变量,只作用于所在代码块(即一个大括号),局部变量没有初始值,从定义到所属代码块结束。 { int age = 1;//无初始值,且不能加访问控制符和static。 System.out.println(age); }
5注意点:
1、如果局部变量的名字与全局变量的名字相同,则在局部变量的作用范围内全局变量被隐藏,即这个全局变量在同名局部变量所在方法内暂时失效。
2、如果在局部变量的作用域范围内访问该成员变量,则必须使用关键字this来引用成员变量。public static void print() { System.out.println(age);//当局部变量和全局变量重名时,(不强调数据类型),从局部变量定义到期结束作用范围,全局变量起作用,除非加上this. int age=9; System.out.println(age); if(age==1) { String names ="wangming"; System.out.println(names); } }
-
简单解读局部变量和全局变量
2021-05-20 17:41:53今天课课家笔者为大家详细介绍局部变量和全局变量的概念和作用。在函数的参数和返回值中我们认识到形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量只能在函数内部使用,离开该函数就...什么是C语言中的变量?局部和全局变量又是什么?它们在编写程序的过程中发挥怎样的作用?今天课课家笔者为大家详细介绍局部变量和全局变量的概念和作用。
在函数的参数和返回值中我们认识到形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量只能在函数内部使用,离开该函数就无效了。
所谓作用域(Scope),就是变量的有效范围。不仅对于形参变量,C语言中所有的变量都有自己的作用域。决定变量作用域的是变量的定义位置。
◎局部变量
所谓局部变量(LocalVariable),简而言之就是定义在函数内部的变量,它的作用域仅限于函数内部,离开该函数后就是无效的,再使用就会报错。比如:
intf1(inta){
intb,c;//a,b,c仅在函数f1()内有效
returna+b+c;
}
intmain(){
intm,n;//m,n仅在函数main()内有效
return0;
}
这里需要我们注意以下四点:
①在main函数中定义的变量也是局部变量,只能在main函数中使用;同时main函数中也不能使用其它函数中定义的变量。main函数也是一个函数,与其它函数地位平等。
②形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。
③可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。
④在语句块中也可定义变量,它的作用域只限于当前语句块。
以下是局部变量的一个任意例子(图1)
图1
◎全局变量
所谓全局变量(GlobalVariable),简而言之就是在所有函数外部定义的变量,它的作用域默认是整个程序,也就是所有的源文件,包括.c和.h文件。比如:
inta,b;//全局变量
voidfunc1(){
//TODO:
}
floatx,y;//全局变量
intfunc2(){
//TODO:
}
intmain(){
//TODO:
return0;
}
a、b、x、y都是在函数外部定义的全局变量。C语言代码是从前往后依次执行的,由于x、y定义在函数func1()之后,所以在func1()内无效;而a、b定义在源程序的开头,所以在func1()、func2()和main()内都有效。
下面笔者给大家看看局部变量和全局变量的代码例子:
代码例子1:输出变量的值:
#include
intn=10;//全局变量
voidfunc1(){
intn=20;//局部变量
printf("func1n:%d\\n",n);
}
voidfunc2(intn){
printf("func2n:%d\\n",n);
}
voidfunc3(){
printf("func3n:%d\\n",n);
}
intmain(){
intn=30;//局部变量
func1();
func2(n);
func3();
//代码块由{}包围
{
intn=40;//局部变量
printf("blockn:%d\\n",n);
}
printf("mainn:%d\\n",n);
return0;
}
运行结果:
func1n:20
func2n:30
func3n:10
blockn:40
mainn:30
代码中虽然定义了多个同名变量n,但它们的作用域不同,在内存中的位置(地址)也不同,所以是相互独立的变量,互不影响,不会产生重复定义(Redefinition)错误。
①对于func1(),输出结果为20,显然使用的是函数内部的n,而不是外部的n;func2()也是相同的情况。当全局变量和局部变量同名时,在局部范围内全局变量被“屏蔽”,不再起作用。或者说,变量的使用遵循就近原则,如果在当前作用域中存在同名变量,就不会向更大的作用域中去寻找变量。
②func3()输出10,使用的是全局变量,因为在func3()函数中不存在局部变量n,所以编译器只能到函数外部,也就是全局作用域中去寻找变量n。
③由{}包围的代码块也拥有独立的作用域,printf()使用它自己内部的变量n,输出40。
④在C语言中规定,只能从小的作用域向大的作用域中去寻找变量而不能反过来执行,我们使用更小的作用域中的变量。对于main()函数,即使代码块中的n离输出语句更近,但它仍然会使用main()函数开头定义的n,所以输出结果是30。
代码例子2:根据长方体的长宽高求它的体积以及三个面的面积。
#include
ints1,s2,s3;//面积
intvs(inta,intb,intc){
intv;//体积
v=a*b*c;
s1=a*b;
s2=b*c;
s3=a*c;
returnv;
}
intmain(){
intv,length,width,height;
printf("Inputlength,widthandheight:");
scanf("%d%d%d",&length,&width,&height);
v=vs(length,width,height);
printf("v=%d,s1=%d,s2=%d,s3=%d\\n",v,s1,s2,s3);
return0;
}
运行结果:
Inputlength,widthandheight:102030↙
v=6000,s1=200,s2=600,s3=300
根据事先定下的目标,我们要通过一个函数得到三个值:分别是体积v以及三个面的面积s1、s2、s3,但由于C语言中的函数只能有一个返回值,我们只能将其中的一份数据也就是体积v放到返回值中,而将面积s1、s2、s3设置为全局变量。全局变量的作用域是整个程序,在函数vs()中修改s1、s2、s3的值,从而会影响到包括main()在内的其它函数。
本次简单解读局部变量和全局变量的教程到此暂告一段落,如果以后有补充的话笔者会在此继续补充,同时欢迎大家的继续补充。最后希望这次教程对大家学习C语言能够起到一定的帮助作用!
-
一起学JAVA 方法 局部变量 成员变量
2021-04-01 23:59:302.2 局部变量 位置:定义在方法里或者局部代码块中 注意:必须手动初始化来分配内存.如:int i = 5;或者int i; i = 5; 作用域:也就是方法里或者局部代码块中,方法运行完内存就释放了 2.3 成员变量 位置:定义在类里方法...1 变量
1.1 概念
可以改变的数,称为变量。在Java语言中,所有的变量在使用前必须声明。
一般通过“变量类型 变量名 = 变量值 ;”这三部分来描述一个变量。如:int a = 3 ;
变量的使用原则:就近原则,即尽量控制变量的使用范围到最小1.2 局部变量
位置:定义在方法里或者方法的声明上
注意:必须手动初始化来分配内存.如:int i = 5;或者int i; i = 5;
生命周期:随着方法的调用而存在,方法运行完毕就释放了1.3 成员变量
位置:定义在类里方法外
注意:不用初始化,也会自动被初始化成默认值
生命周期:整个类中,类消失了,成员变量才会释放
1.4 练习:变量的默认值测试
创建包: cn.tedu.basic
创建类: TestVariable1.javapackage cn.tedu.design; /*本类用于测试各种类型变量的默认值*/ public class TestVariable1 { static String name; static byte b;//整数类型默认值都是0 static short c; static int d; static long e; static float f;//小数类型的默认值是0.0 static double g; static char j;//char类型的默认值是\u0000 static boolean h;//boolean类型的默认值是false public static void main(String[] args) { System.out.println(name);//null,引用类型的默认值 System.out.println(b); System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(g); System.out.println(h); System.out.println(j); System.out.println(h); } }
1.5 练习:局部变量与成员变量测试
创建包: cn.tedu.basic
创建类: TestVariable2.javapackage cn.tedu.oop; /**本类用于测试变量的使用*/ public class TestVariable2 { //2.定义成员变量: //1)位置:类里方法外 //2)无需手动初始化,会自动赋予对应类型的默认值 //3)作用域:在整个类中生效,类消失,变量才会消失 static int count; //3.变量有一个使用的原则:就近原则 static int sum = 200; public static void main(String[] args) { //1.定义局部变量: //1)位置:在方法里/局部代码块里 //2)必须手动初始化 //3)作用域:在方法/局部代码块中,对应的代码执行完局部变量就被释放 int sum = 100;//定义在方法中的局部变量sum System.out.println(sum);//变量的就近原则:使用的都是自己附近的变量,100 System.out.println(count); for (int i = 0; i < 10; i++) {//局部变量i只能在循环中使用 System.out.println(i); } //System.out.println(i);//报错:无法引用变量i:i cannot be resolved to a variable } }
2 方法
2.1 概述
被命名的代码块,方法可以含参数可以不含参数,可以提高代码的复用性。
2.2 方法定义的格式
2.3 方法调用顺序图
顺序执行代码,调用指定方法,执行完毕,返回调用位置
2.4 练习:测试方法的调用顺序/参数/返回值
创建包:cn.tedu.method
创建类:TestMethod .javapackage cn.tedu.method; /**本类用于测试方法*/ public class TestMethod { //1.创建程序的入口函数main() public static void main(String[] args) { System.out.println(1); /**2.我们通过方法名+参数列表的方式来调用方法的功能*/ method1();//调用method1() System.out.println(2); method2(3);//调用method2() int result = method3(1,2);//调用method3() System.out.println(result); } /**3.如果方法想要返回值,必须修改返回值类型 * 并且return对应类型的结果 * 如果方法的返回值类型是void,不允许有返回值 * */ /*本方法用来测试方法的返回值类型*/ public static int method3(int i, int j) { /**4.通过return关键字将方法结果返回到调用位置*/ return i+j; } /**1.方法的修饰符 方法的返回值类型 方法名(方法参数){方法体}*/ /*method1()想测试方法的调用顺序*/ public static void method1() { System.out.println(5); System.out.println(6); System.out.println(7); } /*本方法用来测试方法的参数,参数的位置在小括号里*/ public static void method2(int a) { System.out.println("海绵宝宝今年:"+ a +"岁啦~"); } }
2.5 方法的重载
方法的重载是指在一个类中定义多个同名的方法,但是每个方法的参数列表不同(也就是指参数的个数和类型不同),程序在调用方法时,可以通过传递给他们的不同个数和类型的参数来决定具体调用哪个方法.
2.6 练习:测试方法的重载
创建包: cn.tedu.method
创建类: TestMethodOverload.javapackage cn.tedu.method; /**本类用于测试方法的重载*/ public class TestMethodOverload { public static void main(String[] args) { /**1.我们根据方法名+参数列表确定具体调用哪个方法*/ /**2.方法的重载: * 在同一个类中,存在方法名相同,但参数列表不同的方法 * 如果在同类中,同名方法的参数个数不同,一定构成重载 * 如果在同类中,同名方法的参数个数相同, * 需要查看对应位置上参数的类型,而不是参数名,与参数名无关 * (int a,String b)与(int b,String a)--不构成重载 * (int a,String b)与(String a,int b)--构成重载 * */ //2.调用method() method(); //4.调用method(int) method(666); //6.调用method(int,String) method(888,"泡泡"); } //1.创建一个无参的method() public static void method() { System.out.println("哈哈哈哈我没参数"); } //3.创建一个method(int n) public static void method(int n) { System.out.println("哈哈哈哈我的参数是:"+n); } //5.创建一个method(int n,String s) public static void method(int a,String b) { System.out.println(b+"今晚要干他"+a+"碗大米饭"); } public static void method(String a,int b) { System.out.println(b+"今晚要干他"+a+"碗大米饭"); } }
3 拓展 成员变量与局部变量的区别
-
[JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)
2021-09-06 08:54:39成员变量和局部变量在每种编程语言中都有涉及,如果之前了解过其他语言的成员变量或者局部变量,那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同,这一块的东西也不能说难,如果第一次接触可能会... -
代码块中的局部变量与作用域
2016-09-18 19:39:26作用域决定了在其内定义的变量名的可见性和生命周期。在C、C++和Java中,作用去由花括号的位置决定。例如:{ int x = 12; //only x available { int q = 36; //both x & q available } //only x availa -
python的 局部变量和全局变量
2017-07-31 19:12:06全局变量:所有函数之外定义的变量局部变量:函数内部定义的变量 或者代码块里的变量1.函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义了一个局部变量,不管全局域中有没有该变量名,函数中使用的将是... -
关于局部变量,形式参数和全局变量在代码块中的作用域
2015-11-28 14:21:05局部变量:在函数内部(代码块内部)声明的变量,也称为“自动变量”,进入代码块创建,退出代码块销毁 #include int fun() { int a = 19; { int a = 20; { int a = 21; printf("%d\n", a); //21,局部... -
python基础:局部变量--全局变量的使用
2021-02-10 12:43:03局部变量:使用原则:仅在本函数内部使用的变量,其他函数无法使用本函数的变量代码:def function1():a = 2 #定义一个局部变量print(a)def function2():print(a) #该变量无法使用function1函数定义的局部变量a... -
java中局部变量、全局变量和static的区别(简单易懂)
2019-05-09 15:44:59java中的变量类型有: 1. 类变量:独立于方法之外的变量,用 static 修饰。...局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁; 访问修饰符不能用于局部变量... -
java中的局部变量和全局变量
2017-08-18 15:09:10Java变量 java中主要有如下几种类型的变量: ...一、局部变量 ...只在特定的过程或函数中可以...局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会 -
java基础之代码块、全局变量、局部变量
2019-08-22 10:51:58一、代码块 静态代码块只执行一次,非静态代码块每创建一个实例对象时,就会执行一次。 public class Dui { static int age=1;//成员变量被static修饰,则其被所有对象共享。 //非静态数码块 { int age = 1... -
【JavaSE】谈谈成员变量和局部变量的区别
2022-06-04 00:32:09成员变量和局部变量的区别(超全简明解析) -
JAVA 面向对象 成员变量和局部变量
2016-07-20 18:08:42本页面更新日期: 2016年07月20日前言 在 Java语言中, 根据定义变量位置的不同,可以将... 局部变量指的是在方法里定义的变量. 下面我给出Java程序中的变量划分图: 成员变量被分为类变量和实例变量两种. 定义成员变 -
为什么Java中全局变量不一定初始化,局部变量必须初始化?
2021-03-13 07:06:40前几天,有个大佬考了我一个问题:为什么类的成员变量不需要指定值就可以自动赋予初始值,而方法内的局部变量就必须指定初始值呢?说实话,这个问题确实难倒我了,之后我在网上一顿操作,终于把这个问题弄得稍微明白... -
成员变量和局部变量详解
2020-06-10 10:19:53文章目录1、考点:2、局部变量和成员变量的区别3、具体的测试代码4、过程分析(重点)5、补充 1、考点: 就近原则 变量的分类 成员变量:类变量、实例变量 局部变量 非静态代码块的执行:每次执行实例对象都会... -
深入了解C语言(局部变量的定义)
2021-05-20 04:31:13深入了解C语言这一节我们主要来研究一下C语言如何使用函数中的局部变量的.C语言中对于全局变量和局部变量所分配的空间地址是不一样的.全局变量是放在_DATA段,也就是除开_TEXT代码段的另一块集中的内存空间.而局部... -
C语言未初始化的局部变量是多少?
2020-07-17 17:41:15C语言中,未初始化的局部变量到底是多少? 答案往往是: 与编译器有关。 可能但不保证初始化为0。 未确定。 总之,全部都是些一本正经的形而上答案,这很令人讨厌。 但凡一些人给你滔滔不绝地扯编译器,C库,... -
局部变量和成员变量的定义和区别
2018-06-23 15:38:07局部变量和成员变量的区别和定义 局部变量 成员变量 定义位置: 方法或方法的内部 类的内部,方法的外部 默认值: 无默认值 字面值,(与数组相同)的默认值 使用范围: 从定义行到... -
python的局部变量和全局变量区别
2018-01-16 15:37:59局部变量:函数内部定义的变量 或者代码块里的变量 1.函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义了一个局部变量,不管全局域中有没有该变量名,函数中使用的将是局部变量。 (即声明了一... -
成员变量和局部变量的区别
2020-12-06 22:12:512)、局部变量:包括形参,方法局部变量,代码块局部变量,存在于方法的参数列表和方法定义中以及代码块中。2、成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及 static... -
局部变量
2020-09-07 12:22:00局部变量就是定义在大括号{ }包含的代码块内,例如: if(){ } if(){ }else{} for(){ } while() { } do{ } while(); switch(){ } 还有函数的定义,例如: voidfunc(void){ } 在大括号{}包含的代码块内定义的... -
静态代码块、静态方法、静态变量、普通代码块、构造方法的执行顺序。
2020-12-01 18:11:27静态代码块、静态方法、静态变量、普通代码块、构造方法的执行顺序。 定义一个父类Test public class Test { static int age = 10; // 静态变量age static { System.out.println("Test静态代码块"); } { ... -
mysql 变量(局部变量/全局变量)使用说明
2021-04-25 10:55:18在mysql变量中分为局部变量@与全局变量@@他们都不分大小并,但两种变量用法稍有区别了,下面我来介绍产的用法.共同点:不区分大小写,都是变量.不同点:全局变量是系统中只读的,可以在配置文件中进行修改.mysql变量的术语... -
Java基础之全局变量和局部变量
2018-08-23 18:10:25局部变量是定义在方法体,或者代码块中的变量,参数是特殊的局部变量 全局变量和局部变量的区别 1,作用域 成员变量的作用域在整个类中 局部变量,从声明它的地方开始,直到它所在的{}结束 2,初始... -
lua的全局变量、局部变量、函数闭包和非局部变量(upvalue)
2018-01-30 15:19:58我们知道lua脚本语言的变量是弱类型的,即变量没有类型,值才有类型,同一名称的变量具体类型要看所赋值的类型,如下 ...全局变量和局部变量,类似于shell脚本 全局变量:顾名思义,其生命有效期是全局的,整个lua -
C++自学第五天----C++全局变量和局部变量
2019-06-05 12:15:18C++ 变量作用域1、名词解释2、全局变量和局部变量3、局部变量的值会覆盖全局变量的值4、我们怎么才能在局部变量和全局变量名称相同的情况下调用全局变量呢?5、初始化局部变量和全局变量 1、名词解释 作用域是程序的... -
java 代码块(局部代码块、实例代码块、静态代码块、同步代码块)
2022-01-06 16:19:11代码块是类的成分之一:成员变量,方法,构造器,代码块,内部类。 在Java中,使用 { } 括起来的代码被称为代码块(Code block) 1.1 代码块的分类 根据其位置和声明的不同,可以分为: 局部代码块:用于限定变量... -
Android代码块执行顺序分析总结
2021-01-05 18:14:34变量: 成员变量(叫类变量、实例变量)和局部变量 方法: 成员方法和构造方法 代码块:普通代码块、构造代码块、静态代码块、同步代码块 测试的父类: public class ParentClass { public static String name ... -
静态局部变量和静态全程变量static。
2019-01-01 13:28:04static 是 C/C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。 1.1 static 的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此...