常量与变量都是程序在运行时用来存储数据一块内存空间
常量的值在程序运行时不能被改变,Java中声明常量必须使用final关键字。常量还可以分为两种意思:
第1种意思,就是一个值,这个值本身,我们可以叫它常量,举几个例子:
整型常量: 123
实型常量:3.14
字符常量: 'a'
逻辑常量:true、false
字符串常量:"helloworld"
这只是说法的问题,比如7这个数,我们就可以说“一个int类型的常量7 ”
第2种意思,表示不可变的变量,这种也叫常量,从语法上来讲也就是,加上final,使用final关键字来修饰某个变量,然后只要赋值之后,就不能改变了,就不能再次被赋值了
//声明一个int类型的常量i final int i = 1; //声明一个String对象类型的常量s,"Hello"字符串也是一个常量 final String s = "Hello";
需要注意的是:常量在声明时必须要给这个常量赋一个值。
是程序运行时用来存储数据的一块内存空间,是程序中最基本的存储单元,我们可以使用变量名访问变量。
按声明位置分:
局部变量
成员变量
方法的参数是局部变量。
public class Test{ int i1 = 1; //成员变量 public class static main(String[] args){ //args是方法的参数,所以也是局部变量 int i2 = 2; //局部变量 } }
按数据类型分:
基本数据类型变量
引用数据类型变量
public class Test{ int i = 1; //基本数据类型变量 String s = new String(); //引用数据类型 }
我们使用变量前必须要先声明和赋值,声明和赋值可以分开,也可以结合为一步;
成员变量在声明时如果没有为其显式赋值,则会为其分配一个默认值。
public class Test{ int i3; //如果是成员变量,系统会为其默认分配一个值0
public static void main(String[] args){ int i1; //声明 i1 = 1; //赋值 int i2 = 2; //声明的同时为其赋值,2这个值也叫“直接量” System.out.println(i1); //使用,将变量的值输出到Java控制台 } }
Java是一种强类型语言,所谓强类型,就是每个变量表达式在编译时就必须要有一个确定的数据类型。Java数据类型分为两大类:基本类型和引用类型。
引用数据类型为:类、接口、数组。
Java中的基本数据类型分为四类八种,分别为:
基本数据类型 |
|||||||
数值型 |
字符类型char
占用空间:2字节 |
布尔类型boolean
占用空间:1位 |
|||||
整数类型 |
浮点类型 |
||||||
字节byte |
短整型short |
整型int |
长整型long |
单精度型long |
双精度型double |
||
1字节 |
2字节 |
4字节 |
8字节 |
4字节 |
8字节 |
||
-128~127 |
-32768~32767 |
-2147483648 ~2147483647 |
-9223372036854774808 ~9223372036854774807 |
-3.403E38 ~3.403E38 |
-1.798E308 ~1.798E308 |
byte b1 = 127; //正确 byte b2 = 128; //错误,超出范围 short = b1; //正确,将另外一个变量的值赋给该变量,并且没有超出范围 int i1 = 12;//正确 int i2 = 012; //正确 int i3 = 0x12; //正确 System.out.println(i2); //输出10,因为i2是以8进制方式赋值的 System.out.println(i3); //输出18,因为i3是以16进制方式赋值的 long lo = 2147483648L; //long类型声明需要加上L
float f1 = 123; float f2 = 123.4F; double d1 = 1234.5; double d = 3.141_592_65_36 //正确,java7后为了使比较长的数据较有可读性,可以在数字之间使用下划线
char c1 = '你'; //正确 char c2 = '你好'; //错误 char c3 = '\u9999'; //正确 System.out.println(c3); //输出'香'
用来存储"真","假"的类型,只有true和false两种值。
boolean b = true;
byte b = 127; short s = b; //会自动转换为short b = (byte)s; //不会自动转换,需要强制转换
public class Test { public static void main(String[] args) throws Exception { double d = 12222222222222222222222222222222222222222222222222222.3; float f = (float) d; //d的值已经超出了float的范围,所以转换会“溢出”,但是编译不会报错 System.out.println(f); //因为产生了溢出,所以输出“Infinity” } }
byte b1 = 1; byte b2 = (byte) (b1 + 2); //数值运算时会自动转换为int,所以计算出结果后将值再赋给byte类型变量b2时需要强制转换
long lo = (long)2; long lo2 = 2L; //这两种声明或转换有本质区别