1.JAVA开发介绍---7. 变量和常量的定义及初始化

一、变量

    1.变量的定义

          变量是内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),Java中每个变量必须先声明,后使用 该区域的数据可以在同一类型范围内不断变化

    2.变量的分类

        1)按数据类型

               对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间

               数据类型分为基本数据类型和引用数据类型,引用数据类型有类(class)、接口(interface)、数组,基本数据类型有布尔型(boolean)、字符型(char)、数值性【整数类型(byte、short、int、long)、浮点类型(float、double)】

               注意:boolean类型数据只允许取值true和false,无null

 

                 

 2)按声明的位置

               在方法体外,类体内声明的变量称为成员变量;在方法体内部声明的变量称为局部变量

               

 

二、常量

      常量是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变,一般用大写字符

            语法:final 常量名 = 值;如:final String LOVE = 'java';

      注意:必须要在常量声明的时候就对其进行初始化,否则会出现编译错误。常量一旦初始化后就无法再改动

     字符型常量的三种表现形式:

            1.字符常量是用单引号(‘ ’)括起来的单个字符,涵盖世界上所有书面语的字符。例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';

            2.Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n'表示换行符

            3.直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n

 

public class DataDemo {

    /**
     * Java语言支持的变量类型有:
     * <p>
     * 类变量:独立于方法之外的变量,用 static 修饰。
     * 实例变量:独立于方法之外的变量,不过没有 static 修饰。
     * 局部变量:类的方法中的变量。
     */
    static int total = 0;    // 类变量

    String str = "hello world";  // 实例变量

    /**
     * Java 局部变量
     * 局部变量声明在方法、构造方法或者语句块中;
     * 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
     * 访问修饰符不能用于局部变量;
     * 局部变量只在声明它的方法、构造方法或者语句块中可见;
     * 局部变量是在栈上分配的。
     * 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
     */
    public void dog() {
        int age = 1;  // 局部变量
        age += 1;   //如果age 不初始化 age=1,这里会报错
        System.out.println("小狗年龄:" + age);
    }

    /**
     * 实例变量
     * 1.实例变量声明在一个类中,但在方法、构造方法和语句块之外;
     * 2.当一个对象被实例化之后,每个实例变量的值就跟着确定;
     * 3.实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
     * 4.实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
     * 5.实例变量可以声明在使用前或者使用后;
     * 6.访问修饰符可以修饰实例变量;
     * 7.实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。
     * 8.通过使用访问修饰符可以使实例变量对子类可见;
     * 9.实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。
     * 10.变量的值可以在声明时指定,也可以在构造方法中指定;
     * 11.实例变量可以直接通过变量名访问。但在静态方法以及其他类中,
     * 12.就应该使用完全限定名:ObejectReference.VariableName。
     */
    // 这个实例变量对子类可见
    public String name;
    // 私有变量,仅在该类可见
    private double salary;

    //在构造器中对name赋值
    public DataDemo(String empName) {
        name = empName;
    }

    //设定salary的值
    public void setSalary(double empSal) {
        salary = empSal;
    }

    // 打印信息
    public void printEmp() {
        System.out.println("名字 : " + name);
        System.out.println("薪水 : " + salary);
    }

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

    public static void main(String[] args) {

        DataDemo dataDemo = new DataDemo("开发者");
        dataDemo.setSalary(50000);//设置薪水
        dataDemo.printEmp();

        dataDemo.dog();

        money = 10000;
        System.out.println(DEPARTMENT+"平均工资:"+money);
    }
}

 

自动类型转换

整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

转换从低级到高级。

低  ------------------------------------>  高

byte,short,char—> int —> long—> float —> double 

数据类型转换必须满足如下规则:

  • 1. 不能对boolean类型进行类型转换。

  • 2. 不能把对象类型转换成不相关类的对象。

  • 3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

  • 4. 转换过程中可能导致溢出或损失精度

public class DataDemo {

    /**
     * 数据类型转换必须满足如下规则:
     * <p>
     * 1. 不能对boolean类型进行类型转换。
     * 2. 不能把对象类型转换成不相关类的对象。
     * 3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
     * 4. 转换过程中可能导致溢出或损失精度
     * 5. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
     */
    public void test() {
        int i = 128;
        byte b = (byte) i;//byte类型是8位,最大值127,此时int i =128,超出byte的范围,会导致溢出
        float aFloat = 22.2f;
        int aInt = (int) aFloat;
        System.out.println(b);//-128
        System.out.println(aInt);//22
    }

    /**
     * 自动类型转换
     * 必须满足转换前的数据类型的位数要低于转换后的数据类型,
     * 例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,
     * 同样float数据类型的位数为32,可以自动转换为64位的double类型。
     */
    public void test2() {
        char c1 = 'a';//定义一个char类型
        int i1 = c1;//char自动类型转换为int
        System.out.println(i1);//97
        char c2 = 'A';//定义一个char类型
        int i2 = c2 + 1;//char 类型和 int 类型计算
        System.out.println(i2);//66
        //注:a在ASCII码表中对应的int类型值为97,A对应65
    }

    /**
     * 强制类型转换
     * 1. 条件是转换的数据类型必须是兼容的。
     * 2. 格式:(type)value type是要强制类型转换后的数据类型
     * 
     * 隐含强制类型转换
     * 1. 整数的默认类型是 int。
     *
     * 2. 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。
     */
    public void test3(){
        int i1 = 123;
        byte b = (byte)i1;//强制类型转换为byte
        System.out.println(b);//123
    }
    public static void main(String[] args) {
        DataDemo dataDemo = new DataDemo();
        dataDemo.test();
        dataDemo.test2();
        dataDemo.test3();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值