前言

在前两篇文章中,壹哥给大家讲解了Java里的条件分支,包括if和switch两种情况。我们知道,除了条件分支结构,还有循环结构,所以接下来的一个学习重点就是Java里的循环。但在学习循环之前,我们要先了解局部变量的概念。我们之前已经学习过变量的概念了,但局部变量是什么东东?局部变量和一般的变量有什么区别?请各位来看壹哥的这一篇文章吧。

------------------------------前戏已做完,精彩即开始----------------------------

全文大约【3800】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

一. 关于变量

在之前的文章中,壹哥已经给大家详细地介绍过变量相关的内容,比如变量的概念、命名规范、变量的定义及底层原理等内容。但其实变量还有作用范围的概念,并且根据作用范围的不同,变量还可以分为成员变量、局部变量等内容。在我们今天开始学习局部变量和成员变量等内容之前,壹哥先简单地带大家复习一下之前的变量内容。

1. 概念

我们知道,在Java中,变量是程序里最基本的存储单元,它由变量名、变量类型、作用域组成。从本质上来说,变量其实就是内存里的一小块存储区域,该区域只能存储声明变量时指定类型的数据。我们创建使用每个变量前,必须先声明,在内存中申请空间,然后对其进行初始化赋值,接着就可以通过变量名来访问和使用这块内存区域了。

进一步解释一下,变量其实就是一个可以存储特定类型数据的容器。这个容器在内存中有自己的地址,为了方便地找到这个地址,我们可以给每个地址起个”名字“,这就是”变量名“。每个变量的数据类型都是固定不变的,但变量中对应数据的具体内容,却是可以改变的,所以”变量“指的就是内容可以改变的量。

2. 命名规范

而且变量的命名需要遵循一定的规范,基本的规则和规范如下:

①. Java标识符由 字母(含英、中、日、俄等)、数字、下划线"_" 和 美元符号$ (音: dollar)组成,如age、G7、_value、$salary

②. 不能以数字开头,如123abc

③. 严格区分大小写,如class与Class是不同的

④. 长度无限制(一般不要超过15个字符);

⑤. 不能是Java中的保留字和关键字。

Java的变量名也是一种标识符,所以必须遵循以上这些规则!另外还有一些命名规范需要我们尽量遵守,比如:

变量名尽量要做到见名知意。在实际开发时尽量不要写a、b、c这种名称;

变量名的首字母要小写。如果名称由多个单词组成,第一个单词的首字母应小写,剩下的单词首字母应大写(驼峰式命名法),例如 xxxYyyZzz、numCounter。

3. 作用范围

其实,除了以上的这些规范之外,我们在定义变量时还要考虑它的作用范围,或者说是作用域。

变量的作用范围,或者叫作用域,是指一个变量的有效范围。有的变量在整个类中都是有效的,也有的变量只在方法内部有效,超过这个范围就无效了。如果我们在超出了作用域的地方引用这些变量,编译器就会报错。这就好比,不同的人有不同的权力,有的人权力比较大,可以在全世界发号施令;有的人权力比较小,只能在自己家里发号施令,这就是自己的”作用范围“或者”作用域“。

我们在定义变量时,要遵循作用域最小化的原则,尽量将变量定义在尽可能小的作用范围内,并且不要重复使用变量名。

4. 变量分类

在Java中,我们可以根据变量的作用范围,将Java的变量分为两大类:

局部变量:局部变量只在定义它的方法或代码块内部有效,不能在其他的方法或代码块中使用。也就是说,局部变量只在一个方法或代码块的一对{}之间有效。局部变量定义的范围包括形参、方法内部、代码块内部

成员变量:成员变量在整个类的内部都有效,可以在当前类的任何方法中使用。根据是否带有static关键字,成员变量又分为静态变量(类变量)、实例变量(对象变量)

二. 局部变量

1. 概念

在上面的章节中,壹哥其实已经跟大家介绍了局部变量的概念。

即:局部变量是在定义形参、方法或代码块内部的变量,该变量只在当前方法、代码块中有效。

2. 特点

局部变量具有如下特点:

局部变量声明在方法、构造方法或者代码块、形参中;

局部变量在方法、构造方法、或者语句块被执行时创建,当它们执行完成后,局部变量就会被销毁;

访问修饰符不能添加在局部变量上;

局部变量只在声明它的方法、构造方法或者代码块、形参中可见;

局部变量是在栈上分配的;

局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

3. 案例

在下面的案例中,壹哥给大家定义了几个局部变量供大家参考。

public class Demo01 {

	//args也是一种局部变量,在main(){}方法的{}范围内有效
public static void main(String[] args) {
int a = 10;//局部变量,在main(){}方法的{}范围内有效 System.out.println("a=" + a);
} public void showAge() {
//i也是一种局部变量,只在for(){}这对{}范围内
for(int i=0;i<100;i++) {
System.out.println("age=" + age);
}
} }

三. 成员变量

1 概念

所谓的成员变量,是指在类中(不是方法或其他代码块)直接定义的变量。根据是否带有static关键字,成员变量又分为静态变量(类变量)、实例变量(对象变量)。成员变量在整个类的内部都有效,可以在当前类的任何方法中使用。另外如果成员变量不是被private修饰的,还可以在其他的类中引用。

2. 实例变量

实例变量也被成为对象变量,是指在类中定义的非static变量。实例变量具有如下特点:

● 实例变量声明在一个类中,但在方法、构造方法和语句块的外面;

● 当一个对象被实例化之后,每个实例变量的值也就跟着确定了;

● 实例变量在对象创建时创建,在对象被销毁时销毁;

● 实例变量对于类中的方法、构造方法或者语句块都是可见的。一般情况下我们应该把实例变量设为私有,通过访问修饰符可以使实例变量对子类也可见;

● 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;

● 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,应该使用完全限定名:ObjectReference.VariableName。

3. 静态变量

静态变量又被称为类变量,是被static修饰的、直接定义在类中(方法之外)的变量,它具有如下特点:

● 静态变量可以被public、private、final和static修饰;

● 静态变量在方法外面定义,但可以在静态语句块中初始化,且初始化后不可被改变;

● 静态变量与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量都声明为public类型;

● 静态变量的默认值和实例变量相似;

● 静态变量通过ClassName.VariableName的形式进行访问;

静态变量存储在静态存储区;

静态变量在第一次被访问时创建,在程序结束时销毁;

无论在一个类中创建了多少个对象,一个类都只拥有类变量的一份拷贝;

● 静态变量被声明为public static final类型时,变量名称一般建议使用大写字母。

4. 权限修饰符

大家要注意,成员变量的作用域,是可以通过权限修饰符来进行修改的。也就是说,我们可以给一个成员变量不同的修饰符,赋予该变量不同的权限。比如,我们可以给一个人身上赋予不同的”角色标签“,就可以改变这个人的”权力大小“。在Java中,有如下4个权限修饰符

1. private私有的修饰符:可以修饰成员变量、成员方法、构造方法,但不能修饰类(内部类除外)被private修饰的成员只能在被修饰的本类中访问,在其他类中不能调用。一般被private修饰的成员变量,是通过公开的set和get方法向外界提供访问方式。

2. defalut默认的修饰符:不用写任何关键字,它可以修饰类、成员变量、成员方法、构造方法变量被默认权限修饰后,只能被本类以及同一个包下的其他类访问。

3. protected受保护的修饰符:可以修饰成员变量、成员方法、构造方法,但不能修饰类(内部类除外)。成员变量被protected修饰后,可以在同一类内部,和同一包中的其他类访问。如果不同包中的类想要访问被protected修饰的成员,这个类必须是其子类。

4. public公开的修饰符:是权限最大的修饰符,可以修饰类、成员变量、成员方法、构造方法。成员变量被public修饰后,可以在任何一个类中任意使用,不管是否是同一个包

5. 案例

在下面的案例中,壹哥定义了2个成员变量供大家参考:

public class Demo01 {

	private int age = 18;//实例变量、对象变量,在当前的Demo01类内部有效

    public static String msg = "Hello,一一哥";//静态变量、类变量,因为是public公开的,在当前Demo01类内部,及其他类中都可以使用

	public static void main(String[] args) {
//注意:在static静态方法中不能引用非静态变量
//System.out.println("age=" + age); System.out.println("msg=" + msg);
}
}

------------------------------正片已结束,来根事后烟----------------------------

四. 结语

至此,壹哥就把局部变量相关的内容给大家介绍完了,现在你知道什么是局部变量及其特点了吗?另外我们要搞清楚局部变量和成员变量的区别:

1. 相同点:

1. 定义变量的格式相同;

2. 先声明后使用;

3. 变量都有对应的作用域。

2. 不同点:

两者声明的位置及作用范围不同,如下表所示:

如果你还有什么别的问题,可以在评论区留言~

五. 今日作业

1. 第一题

在A类中定义一个成员变量,在B类中调用输出,用代码实现一下吧。

java循环结构中局部变量和成员变量的更多相关文章

  1. Java面向对象的局部变量和成员变量

    package cn.itcast.day06.demo03; /* 局部变量和成员变量 1. 定义的位置不一样[重点] 局部变量:在方法的内部,类的方法内部 成员变量:在方法的外部,直接写在类当中 ...

  2. Java中的局部变量、成员变量和静态变量

    直接看代码 public class Variable { // 静态变量,属于类的变量,且用关键字static声明,不属于实例,虽然可以通过实例来调用,但是不建议 private static in ...

  3. java基础学习总结三(jdk7新特性、变量(局部变量和成员变量)、常量以及运算符)

    一:jdk7新特性 可以表示二进制数值,以0b开头,中间可以使用下划线_分隔符.如下: @Test /** * 测试jdk新特性 */ public void testJdk7(){ int a=0b ...

  4. java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念

    类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...

  5. JAVA中局部变量 和 成员变量有哪些区别

    JAVA中局部变量 和 成员变量有哪些区别 1.定义的位置不一样<重点>***局部变量:在方法的内部成员变量:在方法的外部,直接写在类当中 2.作用范围不一样<重点>***局部 ...

  6. java的局部变量和成员变量以及区别

    一.局部变量 存在某个方法中的变量就叫局部变量,局部变量一旦声明就必须赋值 否则不能使用 代码如下: class Person { String name; char sex; int age; pu ...

  7. C#面向过程之局部变量、成员变量、变量作用域、可变参数

    局部变量与成员变量:  局部变量:定义在方法里面的变量就叫做局部变量:没有默认的初始值,使用变量之前必须给它赋值成员变量:定义在类下面的变量叫做成员变量:如果是数值类型默认初始值为0 如果是引用类型默 ...

  8. Java bean 链式获取成员变量无需判空的工具设计

    Java bean 链式获取成员变量无需判空的工具设计 本篇文章已发布至公众号 Hollis 对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者 ...

  9. Java 的局部变量和成员变量

    在Java语言中没有全局变量  分析各种变量的作用域的最简单方法是以花括号为界, 1.在类体中定义的是成员变量,成员变量会被默认初始化 2.在方法中定义的是局部变量,局部变量不会被默认初始化

  10. 《java中局部变量和成员变量的区别》

    class Car { String color; int number; void run() { System.out.println(color+"::"+number); ...

随机推荐

  1. Kubernetes 平台中的日志收集

    准备 关于容器日志 Docker 的日志分为两类,一类是 Docker 引擎日志:另一类是容器日志.引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置. 本文主要介绍容器日志,容器日志可以理 ...

  2. 浙大版《C语言程序设计(第3版)》题目集 习题3-1 比较大小(10 分)

    本题要求将输入的任意3个整数从小到大输出. 输入格式: 输入在一行中给出3个整数,其间以空格分隔. 输出格式: 在一行中将3个整数从小到大输出,其间以"->"相连. 输入样例 ...

  3. 【APT】Bitter APT组织针对巴基斯坦航空综合部门攻击活动分析

    前言 蔓灵花(Bitter)是一个被广泛认为来自印度的APT组织,该组织长期针对我国及巴基斯坦的政府.军工.电力.核等部门发动网络攻击,窃取敏感数据,具有较强的政治背景.本次分享一个蔓灵花组织针对巴基 ...

  4. Date 对象 定时器

    日期对象 Date 概述:date是表示日期时间的对象,主要的方法是获取时间和设置日期时间. date声明 使用new Date声明 有4种方式 1.不设参数 是获取当前的本地时间 var date ...

  5. centos 挂载共享目录

    共享目录://10.253.47.102/share/文件传递暂用 将共享路径挂载到centos /etc/fstab  添加一行配置,mount -a 生效

  6. microbit问题记录

    问题: 1.电子罗盘东南西北:不太好用 2.    micropython代码:震动.声音显示不对 makecode代码:声音不好用 已解决: 1.摇杆下和左不管用了(已解决:改软件包代码) 2.ma ...

  7. wait_event_interruptible() 等待队列

    在Linux驱动程序中,可以使用等待队列(Wait Queue)来实现阻塞进程的唤醒. 1.定义"等待队列头部" wait_queue_head_t my_queue; wait_ ...

  8. Web_Servlet和jsp页面数据交互,通过请求转发在jsp中显示数据

    1.Servlet页面代码 /* 实现jsp页面和sevlet页面的信息交互 */ @WebServlet(urlPatterns = "/aa") public class Js ...

  9. nRF51822蓝牙学习 进程记录 3:蓝牙协议学习--简单使用

    三天打鱼两天晒网,又学起了蓝牙,不过还好的是终于开始学习蓝牙协议部分了. 但是,一看起来增加了蓝牙协议的例程,真是没头绪啊.本身的教程资料解说太差了,看青风的蓝牙原理详解也是一头雾水. 经过不断地看各 ...

  10. flink 启动job命令

    0. 启动flink-session ./bin/yarn-session.sh -n 4 -s 3 -jm 2048 -tm 6144 高版本 bin/yarn-session.sh -d -s 3 ...