Java常量与变量

一、Java标识符

Java 中标识符是为方法、变量或者其他用户定义项定义的名称。标识符用来对变量、常量、类和方法等进行命名。因此,一个良好的编程习惯要求命名标识符时,应赋予它一个有意义或有用途的名字。 标识符可以有一个或多个字符。在 Java 语言中,标识符的构成规则如下:

1、标识符由数字(0~9)、美元符号($)、下划线(_)以及Unicode字符集组合构成。
2、标识符各符号之间没有空格。
3、标识符第一个字符不能为数字。
4、标识符不能为关键字和保留字。
5、标识符的命名最好能反映其作用。

二、Java变量

变量的命名规则
1、满足标识符的命名规则
2、符合驼峰法命名规范
3、尽量简单,做到见名如意
4、变量名的长度没有限制,但尽量做到第三条

变量的声明与赋值

在 Java 中,变量分为两种:基本类型变量和引用类型变量。

变量必须先声明后使用,在声明变量的时候,可以给它一个初始值。
例如:

int x = 1;

上述语句声明了一个整型 int 类型的变量,名称为 x,初始值为 1。
变量的一个重要特点是可以重新赋值。例如:对变量 x,先赋值100,在赋值200:

public class Test {
  public static void main(String[] args) {
    int x = 100; // 定义int类型变量x,并赋予初始值100(变量的初始化)
    System.out.println(x); // 打印该变量的值,观察是否为100
    x = 200; // 重新赋值为200
    System.out.println(x); // 打印该变量的值,观察是否为200
  }
}

注意到第一次定义变量 x 的时候,需要指定变量类型 int,因此使用语句 int x = 100;。而第二次重新赋值的时候,变量 x 已经存在了,不能再重复定义,因此不能指定变量类型 int,必须使用语句 x = 200;。

数据类型:

Java常量与变量_第1张图片

JAVA的字面值:
给基本类型的变量赋值的方式叫做 字面值,如下所例:

float hp = 313f;
int armor = 24;

1.整数字面值
当以l或者L结尾的时候,一个整数字面值是long类型,否则就是int类型。 建议使用大写的L而非小写的l,因为容易和1混淆。
byte,short,int和long的值都可以通过int类型的字面值来创建。
例:

public class HelloWorld {
    public static void main(String[] args) {
        long val = 26L; //以L结尾的字面值表示long型
        int decVal = 26; //默认就是int型
        int hexVal = 0x1a; //16进制
        int oxVal = 032; //8进制
        int binVal = 0b11010; //2进制
        System.out.println(oxVal);
    }
}

2.浮点数字面值
当以f或者F结尾的时候,就表示一个float类型的浮点数,否则就是double类型(以d或者D结尾,写不写都可以)。
浮点数还可以用E或者e表示(科学计数法)
e2表示10的二次方,即100
1.234e2 = 1.234x100

public class HelloWorld {
 
    public static void main(String[] args) {
        float f1 = 123.4F;// 以F结尾的字面值表示float类型
        double d1 = 123.4;// 默认就是double类型
        double d2 = 1.234e2;// 科学计数法表示double
    }
}

3.字符和字符串字面值
字符的字面值放在单引号中,字符串的字面值放在双引号中
需要注意的是,\表示转义,比如需要表示制表符,回车换行,双引号等就需要用 \t \r \n " 的方式进行

public class HelloWorld {
 
    public static void main(String[] args) {
        String name = "盖伦";
        char a= 'c';
 
        //以下是转义字符
        char tab = '\t'; //制表符
        char carriageReturn = '\r'; //回车
        char newLine = '\n'; //换行
        char doubleQuote = '\"'; //双引号
        char singleQuote = '\''; //单引号
        char backslash = '\\'; //反斜杠
         
    }
}

4、布尔型
布尔类型(boolean)用于对两个数值通过逻辑运算,判断结果是“真”还是“假”。Java 中用保留字 true 和 false 来代表逻辑运算中的“真”和“假”。因此,一个 boolean 类型的变量或表达式只能是取 true 和 false 这两个值中的一个。

基本数据类型变量在内存中的存储

变量按照数据类型可以分为基本数据类型和引用数据类型,引用数据类型的包括数组和类等,类定义的变量又称之为对象。
如果按照作用范围来分,则可以分为类级,对象实例级,方法级,块级。本节课程重点介绍方法级的变量如何在内存中进行存储,方法级变量又称之为局部变量。
通常我们可以把内存分为三个区域:
Java常量与变量_第2张图片

当前我们在主方法中存储的局部变量是存储在内存的栈区的。

int n = 100;
//该语句执行的时候,会先在栈区开辟int类型大小的空间(占用4字节,32位二进制的空间)
//在开辟完成后,通过赋值等于号,将100存储到开辟的空间中去
//所以此处可以将n,看做100所在的内存空间的别名

字符串
字符串比较特殊,它不属于基本数据类型,它是类! 但是字符串又比较特殊,它有一些和基本数据类型比较类似的地方,比如它变量的定义形式。

String str = "Hello,World!";

字符串是由双引号引起来的0个或多个字符,注意:字符串允许是空字符串!

三、在JAVA中进行基本类型的类型转换

不同类型之间的数据可以互相转换,但是要满足一定的规则
1.转换规则
转换规则如图所示
精度高的数据类型就像容量大的杯子,可以放更大的数据 ;
精度低的数据类型就像容量小的杯子,只能放更小的数据 ;
小杯子往大杯子里倒东西,大杯子怎么都放得下;
大杯子往小杯子里倒东西,有的时候放的下,有的时候就会有溢出;
需要注意的一点是:
虽然short和char都是16位的,长度是一样的
但是彼此之间,依然需要进行强制转换
例:

public class HelloWorld {
 
    public static void main(String[] args) {
 
        char c = 'A';
        short s = 80;
         
        //虽然short和char都是16位的,长度是一样的
        //但是彼此之间,依然需要进行强制转换
        c = (char) s;
        //直接进行转换,会出现编译错误
        s = c;
         
    }
}

2.低精度向高精度转换

long l = 50;
int i = 50;

l 是long类型的,其类型长度是64位
i 是int类型的,其类型长度是32位
所以l的精度,比i的精度要高
l = i;
把i的值赋给l, 首先l和i彼此的类型是不一样的,那么能否转换就取决于彼此的精度;
这个例子,是低精度向高精度转换 是可以正常转换的;
换句话说,int比较小,要放进比较大的long,随便怎么样,都放的进去。

public class HelloWorld {
  
    public static void main(String[] args) {
  
        long l = 50;
        int i = 50;
         
        //int比较小,要放进比较大的long,随便怎么样,都放的进去
        l = i;
          
    }
}

3.高精度向低精度转换

byte b = 5;
int i1 = 10;
int i2 = 300;
b = i1;
b=i2;

b的类型是byte,其长度是8,最大只能放127;
i1 的类型是int, 其长度是32,最大,反正就是很大了,超过127;
所以, 把int类型的数据转成为byte类型的数据,是有风险的;
有的时候是可以转换的,比如 b = i1 (i1=10);
有的时候不可以转换 比如 b= i2 (i2=300) 因为放不下了;
编译器就会提示错误;
这个时候就只能采用强制转换,强制转换的意思就是,转是可以转的,但是不对转换之后的值负责。

public class HelloWorld {
  
    public static void main(String[] args) {
  
        byte b = 5;
        int i1 = 10;
        int i2 = 300;
          
        b = (byte) i1;
        //因为i1的值是在byte范围之内,所以即便进行强制转换
        //最后得到的值,也是10
        System.out.println(b);
          
        //因为i2的值是在byte范围之外,所以就会按照byte的长度进行截取
        //i2的值是300,其对应的二进制数是 100101100
        //按照byte的长度8位进行截取后,其值为 00101100 即44
        b =(byte) i2;
        System.out.println(b);
         
        //查看一个整数对应的二进制的方法:
        System.out.println(Integer.toBinaryString(i2));
         
    }
}

你可能感兴趣的:(Java常量与变量)