变量是赋予存储位置的名称。它是程序中存储的基本单位。
- 可以在程序执行期间更改存储在变量中的值。
- 变量只是赋予存储位置的名称, 对变量执行的所有操作都会影响该存储位置。
- 在Java中, 必须在使用前声明所有变量。
如何声明变量?
我们可以在java中声明变量, 如下所示:
类型
:可以存储在此变量中的数据类型。
名称
:给变量的名称。
这样, 只能将名称赋予存储位置。可以通过两种方式为它分配值:
- 变量初始化
- 通过输入分配值
如何初始化变量?
数据类型
:可以存储在此变量中的数据类型。
变量名称
:给变量的名称。
值
:是存储在变量中的初始值。
例子:
float simpleInterest; //Declaring float variable
int time = 10, speed = 20; //Declaring and Initializing integer variable
char var = 'h'; // Declaring and Initializing character variable
变量类型
Java中存在三种类型的变量:
- 局部变量
- 实例变量
- 静态变量
现在让我们详细了解这些变量中的每一个。
局部变量
:在块, 方法或构造函数中定义的变量称为局部变量。
- 这些变量是在输入的块或从该块退出后调用并销毁该函数或从函数返回该调用时创建的。
- 这些变量的范围仅存在于声明该变量的块内。即我们只能在该块中访问这些变量。
- 局部变量的初始化是强制性的。
示例程序1:
public class StudentDetails {
public void StudentAge()
{
// local variable age
int age = 0 ;
age = age + 5 ;
System.out.println( "Student age is : " + age);
}
public static void main(String args[])
{
StudentDetails obj = new StudentDetails();
obj.StudentAge();
}
}
输出如下:
Student age is : 5
在上述程序中, 变量age是函数StudentAge()的局部变量。如果我们在StudentAge()函数外部使用变量age, 编译器将产生一个错误, 如下面的程序所示。
示例程序2:
public class StudentDetails {
public void StudentAge()
{ // local variable age
int age = 0 ;
age = age + 5 ;
}
public static void main(String args[])
{
// using local variable age outside it's scope
System.out.println( "Student age is : " + 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
实例变量
:实例变量是非静态变量, 并且在任何方法, 构造函数或块之外的类中声明。
- 当实例变量在类中声明时, 这些变量在创建类的对象时创建, 而在对象被销毁时被销毁。
- 与局部变量不同, 我们可以对实例变量使用访问说明符。如果我们未指定任何访问说明符, 则将使用默认的访问说明符。
- 实例变量的初始化不是强制性的。其默认值为0
- 只能通过创建对象来访问实例变量。
样例程序:
import java.io.*;
class Marks {
// These variables are instance variables.
// These variables are in a class
// and are not inside any function
int engMarks;
int mathsMarks;
int phyMarks;
}
class MarksDemo {
public static void main(String args[])
{
// first object
Marks obj1 = new Marks();
obj1.engMarks = 50 ;
obj1.mathsMarks = 80 ;
obj1.phyMarks = 90 ;
// second object
Marks obj2 = new Marks();
obj2.engMarks = 80 ;
obj2.mathsMarks = 60 ;
obj2.phyMarks = 85 ;
// displaying marks for first object
System.out.println( "Marks for first object:" );
System.out.println(obj1.engMarks);
System.out.println(obj1.mathsMarks);
System.out.println(obj1.phyMarks);
// displaying marks for second object
System.out.println( "Marks for second object:" );
System.out.println(obj2.engMarks);
System.out.println(obj2.mathsMarks);
System.out.println(obj2.phyMarks);
}
}
输出如下:
Marks for first object:
50
80
90
Marks for second object:
80
60
85
如你在上面的程序中看到的变量, 英文商标, 数学标记, 物理标记是实例变量。如果上面的程序中有多个对象, 则每个对象将有其自己的实例变量副本。从上面的输出中可以清楚地看到, 每个对象都有自己的实例变量副本。
静态变量
:静态变量也称为类变量。
- 这些变量与实例变量的声明方式相似, 不同之处在于, 在任何方法构造函数或块之外的类中, 使用static关键字声明静态变量。
- 与实例变量不同, 无论我们创建多少个对象, 每个类只能有一个静态变量的副本。
- 静态变量在程序执行开始时创建, 并在执行结束时自动销毁。
- 静态变量的初始化不是强制性的。其默认值为0
- 如果我们通过对象访问诸如实例变量之类的静态变量, 则编译器将显示警告消息, 并且不会停止程序。编译器会自动将对象名称替换为类名称。
- 如果我们访问不带类名的静态变量, 则编译器将自动附加类名。
要访问静态变量, 我们不需要创建该类的对象, 我们可以简单地以以下方式访问变量:
class_name.variable_name;
样例程序:
import java.io.*;
class Emp {
// static variable salary
public static double salary;
public static String name = "Harsh" ;
}
public class EmpDemo {
public static void main(String args[])
{
// accessing static variable without object
Emp.salary = 1000 ;
System.out.println(Emp.name + "'s average salary:"
+ Emp.salary);
}
}
输出如下:
Harsh's average salary:1000.0
实例变量Vs静态变量
- 每个对象都有其自己的副本的实例变量, 而我们只能一本每个类的静态变量的大小, 无论我们创建多少个对象。
- 使用一个对象在实例变量中所做的更改将不被反映在其他对象中, 因为每个对象都有自己的实例变量副本。如果是静态的, 则进行更改将被反映在其他对象中, 因为静态变量是类的所有对象共有的。
- 我们可以访问实例变量通过对象引用和静态变量可以访问直接使用类名。
- 静态变量和实例变量的语法:
class Example { static int a; //static variable int b; //instance variable }
类似文章:
- Java中的变量范围
- C ++和Java中static关键字的比较
- Java是否允许使用静态局部变量?
- Java中的实例变量隐藏
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。