1.局部变量

让我们更认真地谈谈变量。但是这次我们不讨论它们的内部结构。相反,我们将关注变量如何与它们所在的代码交互。

在方法内部声明的所有变量都称为局部变量局部变量仅存在于声明它的代码块中。或者,更准确地说,它从它被声明的那一刻起就存在,直到它被声明的代码块结束。

为简单起见,让我们考虑一个例子:

代码 可变可见性
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}


a
a
a
a, b
a, b
a, b
a, b, x
a, b, x
a, b
a, b
a
a

让我们再讨论一次访问局部变量。这是一个由大括号组成的代码块:这可能是一个方法体、循环体,或者只是一个条件语句的代码块。在代码块中声明的变量一直存在到该代码块的末尾。

如果在循环体中声明了一个变量,那么它只会存在于循环体中。它在循环的每次迭代中创建和销毁。

您不能在一个方法中声明两个同名的局部变量——程序将无法编译。但如果声明变量的代码块不重叠,则可以这样做。

例子:

代码 可变可见性
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     System.out.println(b);
   }

   if (a < 20)
   {
     int b = 20;
     System.out.println(b);
   }
}


a
a
a
a, b
a, b
a
a
a
a
a, b
a, b
a

我们能够声明第二个局部变量 named b only 因为第一个变量在声明b 第二个变量的代码块中不可见。b


2. 参数

正如我们之前所说,每个方法都可以有我们称之为参数的变量。他们的知名度和寿命如何?

一切都很简单。参数是在执行进入方法时创建的(即当方法的代码开始执行时)。当方法结束时,它们被消除。它们在整个方法中都是可见的。

例子:

代码 可变可见性
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}

args
args, a
args, a
args, a
args, a, b
args, a, b
args, a, b
args, a, b, x
args, a, b, x
args, a, b
args, a, b
args, a
args, a

正如我们之前所说,args只是一个类型为字符串数组的变量。和所有参数一样,它在方法体内的任何地方都可用。也就是说,我们通常在示例中忽略它。



3.类中的变量

你会回忆起第 1 级的课程,一个类可以有方法和变量。方法有时称为实例方法,而变量 — 实例变量或字段。这些实际上是 Java 中的同义词。

类的变量(或字段)是什么?

它们是不是在方法中而是在类中声明的变量。

可以从类的任何(非静态)方法访问它们。粗略地说,实例变量是一个类的所有方法共享的变量。

例子:

代码 可变可见性
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     count++;
   }

   public void remove(int data)
   {
     sum = sum - data;
     count--;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum

在这个例子中,我们有两种方法——add()remove()。方法add()增加sumcount实例变量,remove()方法减少sum 和count变量。这两种方法都适用于共享实例变量。

方法执行时存在局部变量。只要对象存在,类的实例变量就存在于类的对象中。您将在下一级别了解有关类对象的详细信息。


4.静态变量

与方法一样,类中的变量可以是静态的或非静态的。静态方法只能访问静态变量。

在级别 11 中,我们将分析静态变量和方法的结构,您将了解这些限制的原因。

要创建静态变量(类变量),必须static在其声明中写入关键字。

静态变量不绑定到声明它们的类的对象或实例。相反,它们属于类本身。这就是为什么即使没有创建该类的单个对象它们也存在的原因。您可以使用如下结构从其他类中引用它们:

ClassName.variableName

例子:

代码 可变可见性
public class Solution
{
   public void add(int data)
   {
     Storage.sum = Storage.sum + data;
     Storage.count++;
   }

   public void remove(int data)
   {
     Storage.sum = Storage.sum - data;
     Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}

Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum



Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum

在上面的示例中,我们创建了一个单独的Storage类,将count 和sum 变量移入其中,并将它们声明为static。公共静态变量可以从程序中的任何方法访问(而不仅仅是从方法中访问)。