全局变量和局部变量
全局变量(也叫属性)
直接写在类中,使用范围是整个类;在创建对象时被创建,存储在堆内存中的对象里,有默认的初始值(整型:0 浮点型:0.0 布尔型:false 字符型:ASCII码为0的值 引用类型:null)
局部变量
写在方法中或者方法的参数,使用时才被创建,所以没有初始值;必须先初始化(第一次赋值),才能使用。
基本数据类型的局部变量:直接将值存储在栈中的方法栈帧里;
引用数据类型的局部变量:栈中的方法栈帧里存储的是关键字new在堆中创建的对象的地址
简单的说,基本数据类型直接存储常量值,引用数据类型存储的是对象的内存地址
注意:String是引用类型,而且有常量值。
例如:
//当使用字符串常量“abc”赋值时,系统会先去常量池中查找有没有字符串abc
//如果有,将找到的字符串常量“abc”的内存地址赋值给变量s1
//如果没有,先将常量“abc”放入常量池,并将“abc”在常量池中的内存地址赋值给s1
String s1 = “abc”;
//此句代码使用关键字new创建了String类型的对象,所以这里的字符串abc是保存在堆中创建的对象里的;然后将对象在堆中的内存地址赋值给变量s2
String s2 = new String(“abc”);
使用范围:
方法内部的局部变量,自声明处开始,至左边最近的的左大括号所对应的右大括号结束;
方法的参数:整个方法。
全局变量和局部变量可以重名,因为他们一个在堆中一个在栈中;全局变量和全局变量、局部变量和局部变量不能重名。
实例:
/**
* 演示全局变量和局部变量
* @author 学霸联盟 - 赵灿
*/
public class PropertyDemo {
/*
* 以下声明了9种不同类型的全局变量(属性)
* 都存储在堆内存中,所以全局变量之间不能同名
*/
byte b;
short s;
int i;
long l;
float f;
double d;
char c;
boolean bool;
String str;
//main方法
public static void main(String[] args) {
/*
* 以下声明了9种不同类型的局部变量
* 都存储在栈内存中,所以局部变量之间也不能同名
* 但是由于局部变量和全局变量存储在不同的内存空间中
* 所以局部变量和全局变量之间可以同名
*/
byte b;
short s;
int i;
long l;
float f;
double d;
char c;
boolean bool;
String str;
//pd也是一个局部变量
PropertyDemo pd = new PropertyDemo();
//这里直接输出属性的默认值
System.out
.println(pd.b + "," + pd.s + "," + pd.i + "," + pd.l + ","
+ pd.f + "," + pd.d + "," + pd.c + "," + pd.bool + ","
+ pd.str);
/*
* 这里无法这样直接输出局部变量,局部变量必须初始化以后才能使用
System.out.println(b +","+ s + ","+ i +","+ l +","+ f +"," + d
+ "," + c + "," + bool + "," + str);
*/
//初始化局部变量
b = 1;
s = 1;
i = 1;
l = 1;
f = 1F;
d = 1;
c = '1';
bool = true;
str = "";
System.out.println(b +","+ s +"," + i +","+ l +"," + f + "," + d
+ "," + c + "," + bool + "," + str);
}
}
运行结果:
0,0,0,0,0.0,0.0,,false,null
1,1,1,1,1.0,1.0,1,true,
注意:char类型的默认值是空,不是空格;String类型认值是null,而""代表的是空字符串
小结:
全局变量:
编写位置:直接写类中
默认值:有;整型:0、浮点型:0.0、boolean:false、char:ascii码为0的值、引用类型:null
使用范围:至少是当前类
在内存中的位置:堆中的对象内
局部变量:
编写位置:写在方法中
默认值:没有;必须要初始化之后才可以使用
使用范围:根据变量所在的大括号确定
在内存中的位置:栈中的方法栈帧中
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
奥拉夫·舍韦的这本《超级学霸》就是教你如何开出正确的药方,来根治“学习不好”的病。 舍韦本来是一名天资平平、成绩中下的普通挪威学生,因为掌握了正确的学习方法,从普通学生一跃变成了超级学霸,成功考取了...
学霸快查助手是一款记录学习过程中的知识点,学习时能够快速查阅的学习软件,可以随时随地记录知识点,随时随地的快速查阅知识点,学霸快查软件就是专为学霸而生,提高学习效率,有需要的赶快下载吧! 学霸快查...
明明白白学Java大学霸
系统集成项目管理工程师-学霸一本通
学霸课堂是一款学生课堂学习软件。软件包含:幼儿启蒙教育、小学、初中、高中 全部基本课程,基本课程为人教版。 学霸课堂软件特点 1:名校名师课堂讲解,够生动够详细,学生易掌握学习要点。 2:学习内容全面,除了...
学霸脑图--理科
学霸教育网站整站源码说明:由sdcms管理系统制作模板而来,请尊重原创。 后台地址:http://你的域名/iszxwadmin/ 管理账号:admin 密码:admin 学霸教育网站整站源码介绍: 本程序适合个人门户站、学校管理...
学霸经验分享:高三政治学习心得.docx
学霸经验分享:高三政治学习心得.pdf
学霸经验分享:高三政治学习心得.doc
我的钢笔是“学霸”
基础测试:通过互动答题,诊断和评测每课必会的知识点的掌握情况,及时发现和纠正错误。 阶段小考:通过互动答题,诊断和评测每一章节必会的知识点与相关复合知识点的运用能力。 测验记录:详细地记录了学生在...
豪杰超级解霸创始人梁肇新:安全需要新体系.docx
二年级(下)语文学霸期末测评卷12套
使用SolidWorks2018进行的100个.SLDPRT建模文件。适用于初学者的学习,可以详细查看每一步操作的细节。
学霸直男主题错题本.pdf
用户:面向所有爱好学习又有一定自律能力的人,学霸会真正的理解这款软件的用意和需求,希望更多人成为学霸。(只是提醒功能,并没有必要禁止你上网,因为你总有办法停止或卸载软件) 安装好了,马上去自习室感觉...
一年高分过三科,中级会计学霸告诉你怎么学[001].pdf
学霸经验之谈:学好初中语文有方法.pdf