zoukankan      html  css  js  c++  java
  • Java基础(8)Java变量类型

    Java基础(8)-Java变量类型

    在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:

    type identifier [ = value][, identifier [= value] ...] ;
    

    格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。

    以下列出了一些变量的声明实例。注意有些包含了初始化过程。

    int a, b, c;         // 声明三个int型整数:a、 b、c
    int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
    byte z = 22;         // 声明并初始化 z
    String s = "joshua317";  // 声明并初始化字符串 s
    double pi = 3.14159; // 声明了双精度浮点型变量 pi
    char x = 'x';        // 声明变量 x 的值是字符 'x'。
    

    Java语言支持的变量类型有:

    • 类变量:独立于方法之外的变量,用 static 修饰;
    • 实例变量:独立于方法之外的变量,不过没有 static 修饰;
    • 局部变量:类的方法中的变量。
    package com.joshua317;
    
    /**
     * @author joshua317
     */
    public class Variable {
        /**
         * 类变量
         */
        static int clicks = 0;
        /**
         * 实例变量
         */
        String name;
        public void fun() {
            /**
             * 局部变量
             */
            int i = 0;
        }
    }
    

    1 Java 局部变量

    • 局部变量声明在方法、构造方法或者语句块中;
    • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
    • 访问修饰符不能用于局部变量;
    • 局部变量只在声明它的方法、构造方法或者语句块中可见;
    • 局部变量是在栈上分配的。
    • 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

    在以下实例中num是一个局部变量。定义在nums()方法中,它的作用域就限制在这个方法中。

    package com.joshua317;
    
    public class Main {
        public static void main(String[] args) {
            Test test = new Test();
            test.nums();
        }
    }
    class Test {
        public void nums()
        {
            int num = 0;
            num = num + 6;
            System.out.println("新的数值为:" + num);
        }
    }
    

    运行结果如下:

    新的数值为:6
    

    下面的例子中 num 变量没有初始化,所以在编译时会出错:

    package com.joshua317;
    
    public class Main {
        public static void main(String[] args) {
            Test test = new Test();
            test.nums();
        }
    }
    class Test {
        public void nums()
        {
            int num;
            num = num + 7;
            System.out.println("新的数值为:" + num);
        }
    }
    

    运行结果如下:

    Error:(13, 15) java: 可能尚未初始化变量num
    

    2 Java 实例变量

    • 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
    • 当一个对象被实例化之后,每个实例变量的值就跟着确定;
    • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
    • 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
    • 实例变量可以声明在使用前或者使用后;
    • 访问修饰符可以修饰实例变量;
    • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
    • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
    • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
    package com.joshua317;
    
    public class Main {
        public static void main(String[] args) {
            Employee empOne = new Employee("joshua317");
            empOne.setSalary(1000.0);
            empOne.printInfo();
        }
    }
    class Employee{
        /**
         * 这个实例变量对子类可见
         * name
         */
        public String name;
        /**
         * 私有变量,仅在该类可见
         * salary
         */
        private double salary;
        /**
         * 在构造器中对name赋值
         * @param empName
         */
        public Employee (String empName){
            this.name = empName;
        }
    
        /**
         * 设定salary的值
         * @param empSal
         */
        public void setSalary(double empSal){
            this.salary = empSal;
        }
        /**
         * 打印信息
         */
        public void printInfo(){
            System.out.println("名字 : " + this.name);
            System.out.println("薪水 : " + this.salary);
        }
    }
    

    运行结果如下:

    名字 : joshua317
    薪水 : 1000.0
    

    3 Java 类变量(静态变量)

    • 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
    • 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
    • 静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。
    • 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
    • 静态变量在第一次被访问时创建,在程序结束时销毁。
    • 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
    • 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
    • 静态变量可以通过:ClassName.VariableName的方式访问。
    • 类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。
    import java.io.*;
     
    public class Employee {
        //salary是静态的私有变量
        private static double salary;
        // DEPARTMENT是一个常量
        public static final String DEPARTMENT = "开发人员";
        public static void main(String[] args){
        salary = 10000;
            System.out.println(DEPARTMENT+"平均工资:"+salary);
        }
    }
    

    实例编译运行结果如下:

    开发人员平均工资:5000.0
    

    4.Java三种变量的区别

    局部变量、实例变量和静态变量的区别

     局部变量实例变量静态变量
    定义位置 方法中/代码块中,或者方法的形式参数 在类中,方法外 在类中,方法外
    初始化值 无默认初始化值,先定义,赋值后才能使用 有默认初始化值 有默认初始化值
    调用方式 局部调用 对象调用 类名调用、对象调用
    存储位置 栈中 堆中 方法区
    声明周期 与方法/代码块共存亡 与对象共存亡 与类共存亡
    别名 实例属性、普通成员变量 类变量、静态属性

    4.1 实例变量和局部变量的区别

    ​ 实例变量:

    ​ (1)实例变量定义在类中,在整个类中都可以被访问。

    ​ (2)实例变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

    ​ (3)实例变量有默认初始化值,比如数值型的默认值为0,字符串类型的默认值是null。

    局部变量:

    ​ (1)局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

    ​ (2)局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

    ​ (3)局部变量没有默认初始化值

    在使用变量时需要遵循的原则为:就近原则

    首先在局部范围找,有就使用;接着在成员位置找

    4.2 实例变量和静态变量的区别

    (1)两个变量的生命周期不同

    ​ 实例变量随着对象的创建而存在,随着对象被回收而释放。

    ​ 静态变量随着类的加载而存在,随着类的消失而消失。

    (2)调用方式不同

    ​ 实例变量只能被对象调用。

    ​ 静态变量可以被对象调用,还可以被类名调用。

    (3)别名不同

    ​ 实例变量也称为普通成员变量。

    ​ 静态变量也称为类变量。

    (4)数据存储位置不同

    ​ 实例变量存储在堆内存的对象中,所以也叫对象的特有数据。

    ​ 静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

     

  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/joshua317/p/15707990.html
Copyright © 2011-2022 走看看