📜  Java中的变量

📅  最后修改于: 2020-02-12 14:50:09             🧑  作者: Mango

变量是赋予存储位置的名称,它是程序中存储的基本单位。

  • 可以在程序执行期间更改存储在变量中的值。
  • 变量只是赋予存储位置的名称,对变量执行的所有操作都会影响该存储位置。
  • 在Java中,必须在使用前声明所有变量。

如何声明变量?

我们可以在Java中声明变量,如下所示:type:可以存储在此变量中的数据类型。name:给变量的名称。 这样,只能将名称赋予存储位置。可以通过两种方式为它分配值:

  • 变量初始化
  • 通过输入分配值

如何初始化变量?


datatype:可以存储在此变量中的数据类型。
variable_name:赋予变量的名称。
value:它是存储在变量中的初始值。
例子

float simpleInterest; //声明float变量
int time = 10, speed = 20;//声明和初始化整数变量
char var = 'h'; //声明和初始化字符变量

变量类型

Java中有三种类型的变量:

  • 局部变量
  • 实例变量
  • 静态变量

现在让我们详细了解这些变量中的每一个。

  1. 局部变量:在块、方法或构造函数中定义的变量称为局部变量。
    • 这些变量是在输入的块从该函数返回的调用时创建的,从该块退出后调用并销毁该函数。
    • 这些变量的范围仅存在于声明该变量的块中,即我们只能在该块中访问这些变量。
    • 局部变量的初始化是强制性的。

    示例程序1:

    public class StudentDetails {
        public void StudentAge()
        {
            // 局部变量age
            int age = 0;
            age = age + 5;
            System.out.println("学生年龄 : " + age);
        }
        public static void main(String args[])
        {
            StudentDetails obj = new StudentDetails();
            obj.StudentAge();
        }
    }

    输出:

    学生年龄 : 5

    在以上程序中,变量age是函数StudentAge()的局部变量。如果我们在StudentAge()函数外部使用变量age,编译器将产生一个错误,如下面的程序所示。
    示例程序2:

    public class StudentDetails {
        public void StudentAge()
        { // 局部变量age
            int age = 0;
            age = age + 5;
        }
        public static void main(String args[])
        {
            // 在age外部调用age
            System.out.println("学生年龄 : " + age);
        }
    }

    输出:

    Compilation Error in Java code :-
    prog.Java:12: error: cannot find symbol
            System.out.println("Student age is : " + age);
                                                     ^
      symbol:   variable age
      location: class StudentDetails
    1 error

     

  2. 实例变量:实例变量是非静态变量,并且可在任何方法、构造函数或块之外的类中声明。
    • 由于在类中声明了实例变量,因此在创建该类的对象时将创建这些变量,在销毁该对象时将其销毁。
    • 与局部变量不同,我们可以对实例变量使用访问说明符。如果我们未指定任何访问说明符,则将使用默认的访问说明符。
    • 实例变量的初始化不是强制性的。其默认值为0。
    • 实例变量只能通过创建对象来访问。

    示例程序

    import java.io.*;
    class Marks {
        // 创建实例变量
        int engMarks;
        int mathsMarks;
        int phyMarks;
    }
    class MarksDemo {
        public static void main(String args[])
        {
            // 第一个实例
            Marks obj1 = new Marks();
            obj1.engMarks = 50;
            obj1.mathsMarks = 80;
            obj1.phyMarks = 90;
            // 第二个实例
            Marks obj2 = new Marks();
            obj2.engMarks = 80;
            obj2.mathsMarks = 60;
            obj2.phyMarks = 85;
            // 第一个实例的mark
            System.out.println("第一个实例的mark:");
            System.out.println(obj1.engMarks);
            System.out.println(obj1.mathsMarks);
            System.out.println(obj1.phyMarks);
            // 第二个实例的mark
            System.out.println("第二个实例的mark:");
            System.out.println(obj2.engMarks);
            System.out.println(obj2.mathsMarks);
            System.out.println(obj2.phyMarks);
        }
    }

    输出:

    第一个实例的mark:
    50
    80
    90
    第二个实例的mark:
    80
    60
    85

    正如您在上面的程序中看到的那样,变量engMarksmathsMarksphyMarks是实例变量。如果上面的程序中有多个对象,则每个对象将拥有自己的实例变量副本。从上面的输出中可以清楚地看到,每个对象都有自己的实例变量副本。

  3. 静态变量:静态变量也称为类变量。
    • 这些变量与实例变量的声明方式类似,不同之处在于,在任何方法构造函数或块之外的类中,使用static关键字声明静态变量。
    • 与实例变量不同,无论我们创建多少个对象,每个类只能有一个静态变量的副本。
    • 静态变量在程序执行开始时创建,并在执行结束时自动销毁。
    • 静态变量的初始化不是强制性的。其默认值为0。
    • 如果我们通过对象访问诸如实例变量类的静态变量,则编译器将显示警告消息,并且不会停止程序。编译器会自动将对象名称替换为类名称。
    • 如果我们访问不带类名的静态变量,则编译器将自动附加类名。

    要访问静态变量,我们不需要创建该类的对象,我们可以简单地以以下方式访问变量:

    class_name.variable_name;

    示例程序

    import java.io.*;
    class Emp {
        // 静态变量
        public static double salary;
        public static String name = "logan";
    }
    public class EmpDemo {
        public static void main(String args[])
        {
            // 访问实例变量,无实例创建
            Emp.salary = 1000;
            System.out.println(Emp.name + "的平均工资:"
                               + Emp.salary);
        }
    }

    输出:

    logan的平均工资:1000.0

     

实例变量Vs静态变量

  • 每个对象都有自己的实例变量副本,而我们每个类只能有一个静态变量副本,无论我们创建了多少个对象。
  • 使用一个对象对实例变量进行的更改不会反映在其他对象中,因为每个对象都有自己的实例变量副本。如果是静态变量,则更改将反映在其他对象中,因为静态变量是类的所有对象共有的。
  • 我们可以通过对象引用来访问实例变量并且可以使用类名直接访问静态变量
    class Example
        {
            static int a; // 静态变量
            int b;        // 实例变量
        }