Java变量–声明,初始化和类型

时间:2020-01-09 10:34:44  来源:igfitidea点击:

变量用于存储Java程序中使用的值。 Java变量是内存位置的名称,其中包含分配给该变量的值。在本文中,我们将介绍如何在Java中声明和初始化变量,Java中的变量类型及其作用域。

在Java中声明变量

在Java中,必须在使用前声明一个变量。 Java中变量声明的语法如下:

type variable_name = value

这里的type可以是原始数据类型,也可以是Class名称或者接口,variable_name是变量的名称。值是兼容类型的值," =值"部分是可选的,仅在声明时初始化变量时才需要。

例如

int age = 65;

这里age是变量类型,它是int类型,并用值65初始化。

同样的变量声明和初始化也可以分别完成。

//declaration		
int age;
..
..
// initialization
age = 65;

变量声明和初始化的其他一些示例。

//declaration and initialization of a char variable
char ch = 'a';
//declaration variable of type double
double d;

我们还可以在一行中将多个相同类型的变量声明为逗号分隔的变量。

int i = 10, j = 20;

Java中的变量类型

Java编程语言定义了以下种类的变量:

  • 实例变量(非静态字段)

  • 类变量(静态字段)

  • 局部变量

  • 参量

Java中的实例变量

Java中的实例变量(也称为非静态字段)是为类的每个实例(对象)创建的那些变量。该类的每个对象将有一个单独的实例变量副本。
实例变量是在类中声明的,而不是在任何方法或者构造函数中声明的。

实例变量Java示例

class Employee{
  private String name;
  private int age;
  private String dept;
  Employee(String name, int age, String dept){
    this.name = name;
    this.age = age;
    this.dept = dept;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public String getDept() {
    return dept;
  }
  public void setDept(String dept) {
    this.dept = dept;
  }
}
public class InstanceExp {
  public static void main(String[] args) {
    Employee emp1 = new Employee("Mark", 32, "Engineering");
    Employee emp2 = new Employee("Amy", 28, "Human Resources");
    System.out.println("First Employee details- ");
    System.out.println("Name- " + emp1.getName() + " Age- " + emp1.getAge() + " Dept- " + emp1.getDept());		
    System.out.println("Second Employee details- ");
    System.out.println("Name- " + emp2.getName() + " Age- " + emp2.getAge() + " Dept- " + emp2.getDept());
  }
}

输出:

First Employee details- 
Name- Mark Age- 32 Dept- Engineering
Second Employee details- 
Name- Amy Age- 28 Dept- Human Resources

在示例中,Employee类中有三个实例变量。然后,创建了Employee类的两个对象,它们都有各自的实例变量副本,具有不同的值。

Java中的类变量(静态变量)

类变量也在类中声明,而不是在任何方法或者构造函数中声明,并且这些变量也使用static关键字。
静态变量与该类相关联,并且该类的所有实例共享同一变量,即只有一个静态变量副本。

静态变量Java示例

class Employee{
  private String name;
  private int age;
  private String dept;
  private int wages;
  //static variable
  static final int DAYS_PAID = 22;
  Employee(String name, int age, String dept, int wages){
    this.name = name;
    this.age = age;
    this.dept = dept;
    this.wages = wages;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public String getDept() {
    return dept;
  }
  public void setDept(String dept) {
    this.dept = dept;
  }
  public int getWages() {
    return wages;
  }
  public void setWages(int wages) {
    this.wages = wages;
  }
}
public class InstanceExp {
  public static void main(String[] args) {
    Employee emp1 = new Employee("Mark", 32, "Engineering", 50*8*Employee.DAYS_PAID);
    Employee emp2 = new Employee("Amy", 28, "Human Resources", 30*8*Employee.DAYS_PAID);
    System.out.println("First Employee details- ");
    System.out.println("Name- " + emp1.getName() + " Age- " + emp1.getAge() + " Dept- " + emp1.getDept() + " Salary- "+ emp1.getWages());		
    System.out.println("Second Employee details- ");
    System.out.println("Name- " + emp2.getName() + " Age- " + emp2.getAge() + " Dept- " + emp2.getDept()+ " Salary- "+ emp2.getWages());
  }
}

输出:

First Employee details- 
Name- Mark Age- 32 Dept- Engineering Salary- 8800
Second Employee details- 
Name- Amy Age- 28 Dept- Human Resources Salary- 5280

在该示例中,有一个静态变量DAYS_PAID,可以使用类名(Employee.DAYS_PAID)进行访问。

Java中的局部变量

在方法的开始和结束大括号之间定义的变量称为局部变量。局部变量的范围在声明它的方法中。实际上,每个代码块都会创建一个新的作用域,并且在该块的开头和结尾大括号中声明的任何变量都具有该块中的作用域。

public void sum(int x, int y){
  //local variable
  int sum = x + y;
  if(sum > 10){
    // scope with in if condition block
    int temp = sum;
  }
  // Not visible here 
  //temp = 40;
}

在代码总和中是一个局部变量,其范围在声明它的方法中。在if语句中用声明了另一个变量temp,因此其范围在if条件块的左括号和右括号中。

Java参数

传递给方法的参数称为参数。在方法中修改基本类型参数的值不会更改原始值。

public class InstanceExp {
  public static void main(String[] args) {
    InstanceExp obj = new InstanceExp();
    int x = 5;
    obj.test(x);
    System.out.println("Value of x after method call- " + x);
  }

  public void test(int x){
    x++;
    System.out.println("Value of x in method- " + x);

  }
}

输出:

Value of x in method- 6
Value of x after method call- 5

如我们所见,x作为方法参数传递,该方法参数在方法中进行了修改,但不会更改原始值。

Java 10中的局部变量类型推断

从Java 10开始,可以将局部变量的类型声明为" var"。 Java编译器使用初始化时使用的值来推断局部变量的类型。

例如

var name = "theitroad"; // infers type as String

var list = new ArrayList<Integer>(); // infers type as ArrayList

局部变量类型推断只能与带有初始化程序的局部变量,for-each循环中的索引,for循环中声明的局部变量一起使用。