局部变量
还有一种说法,说 Java 中只有类变量、实例变量和局部变量。这么分也没有问题,可能有人会问到,你把成员变量和常量放在哪了?别着急我们后面会说
先来说一下什么是局部变量
局部变量又称为 Local variables
。它指的是在方法中、构造器中或者块代码中定义的变量。局部变量的生命周期随方法、构造器、代码块的执行完毕而销毁。
不管上面的一些变量概念如何变换、局部变量都站如松,坐如钟,行如风,卧如弓,从容应对各种不同文章的比较。真是一个省事的变量。
那么这么好的东西我们可要仔细研究一下其特点是啥
- 根据定义可知,局部变量定义在方法、构造器或者代码块中;
- 然后局部变量的生命周期随方法、构造器、代码块的执行完毕而销毁;
- 局部变量不能使用访问修饰符,例如如下代码
- 局部变量仅在方法的声明、构造函数或者块内可见,局部变量只能在调用这些方法、构造函数或者块的内部使用
- 局部变量没有默认值,所以局部变量应该在第一次使用或者声明的时候就应该初始化完成
成员变量
什么?成员变量在 Java 中就是实例变量?这个结论对吗?
常量
验证过程
为了验证这个结论,我们求助于 stackoverflow
网站
我们搜索 java member variable and instance variable 就帮我们定位到了这个标题
大致意思是:什么是成员变量?成员变量和实例变量是否相同呢?我们下面有个回答
第一句就给出,实例变量和类变量都称为成员变量,然后给出了 JDK 官网手册对变量的定义。意思是在 Java 中,只有三种类型的变量
- 定义在类中的成员变量 --- 被称为属性
- 定义在方法(包含构造方法)或者块代码中的变量 --- 被称为局部变量
- 定义在方法定义中的变量 --- 被称为参数
嗯。。。或许还不是很好解决我们的问题,我带着问题再次求助 JDK 官网手册,又看到了关于 Variables
的定义
意思是在 Java 中,只有下面几种类型的变量(别扯别的了,莫非你比官网还靠谱?)
实例变量(非静态属性)
:大致意思就是说
非静态属性也就被称为实例变量
,因为它们的值是相对于每个实例来说的。换句话说,对于每个对象来讲,实例变量的值都是唯一的;
类变量(静态属性)
:类变量就是使用 static 修饰符声明的字段,这就会告诉编译器:无论该类被实例化了多少次,该变量只存在一个副本。另外,可以添加关键字 final 来表示常量
。局部变量
:没有特殊的关键字将制定的变量声明为局部变量、确定其声明的完全取决于声明变量的位置。参数
:想一下我们平常用到最多的方法是什么方法?当然是main
方法啊,main 方法是怎么定义的?
public static void main(String[] args) {}
其中的 args 是不是就是 String 的数组的变量,我们也称其为参数
,所以参数也没有关键字进行声明,标识其为参数也只是取决于其声明位置。
bilibili
所以
我写了一篇文章为了给你讲清楚,现在你应该知道 Java 中到底有哪些变量了吧。
如果你用 static 来定义变量,只能是类变量、或者说静态变量、而且其定义位置只能在类中,方法或代码块外,变量的副本只有一个。
如果你不用 static 来声明变量,那么就会有三种变量的叫法
- 定义在构造方法、代码块、方法
外
的变量被称为实例变量,实例变量的副本数量和实例的数量一样。 - 定义在方法、构造方法、代码块
内
的变量被称为局部变量; - 定义在方法参数
中
的变量被称为参数。
也就是下面代码所描述的这样
public class VariablesInJava { int instanceVariable; // 实例变量 static String staticVariable; // 类变量 public void method() { String localVariable = "localVariable"; // 局部变量 System.out.println(localVariable); } public static void main(String args[]) {} //参数 }