全面解析Java支持的数据类型及Java的常量和变量类型
基本数据类型
变量就是用来储存值而保留的内存位置。这就意味着当你创建一个变量时就会在内存中占用一定的空间。
基于变量的数据类型,操作系统会进行内存分配并且决定什么将被储存在保留内存中。因此,通过给变量分配不同的数据类型,你可以在这些变量中存储整数,小数或者字字母。
Java中有两种有效地数据类型:
- 原始数据类型
- 引用数据类型
原始数据类型
Java支持8种原始数据类型。原始数据类型是由该语言预先定义的并用关键词命名的。下面让我们深入学习一下这8种数据类型。
字节型(byte)
字节型是一种8位有正负的二进制整数
最小值是-128(-2^7)
最大值是127(2^7-1)
默认值为0
字节型数据类型主要是为了在大型数组内节省空间,主要是替代整数由于字节型比整数小4倍。
例如:
bytea=100,byteb=-50
短整数(short)
短整数是一种16位有正负的二进制整数
最小值是-32768(-2^15)
最大值是32767(2^15-1)
短整数类型的数据也可以像字节型一样用于节省空间。短整数比整数小两倍
默认值为0
例如:
shorts=10000,shortr=-20000
整数型(int)
整数型是一种32位有正负的二进制整数
最小值是-2,147,483,648(-2^31)
最大值是2,147,483,647(2^31-1)
整数型一般默认被应用于整数值除非担心内存不够用。
默认值为0
例如:
inta=100000,intb=-200000
长整型(long)
长整型是一种64位有正负的二进制整数
最小值是-9,223,372,036,854,775,808(-2^63)
最大值是9,223,372,036,854,775,807(2^63-1)
这种数据类型一般是在需要比整数型范围更大时应用。
默认值为0L
例如:
longa=100000L,intb=-200000L
浮点型(float)
浮点型数据是一种单精度的32位IEEE754标准下的浮点数据。
浮点型数据主要是为了在大型浮点数字数组中节约内存。
默认值是0.0f。
浮点型数据不能用于如货币这样的精确数据。
例如:
floatf1=234.5f
双精度型(double)
双精度型数据是一种双精度的64位IEEE754标准下的浮点数据。
这种数据类型主要是默认被用于表示小数的值,一般是默认的选择。
双精度型数据不能用于如货币这样的精确数据。
默认值是0.0d
例如:
doubled1=123.4
布尔型(boolean)
布尔型数据代表一个信息比特。
它只有两个可能的值:真(true)和假(false)
这种数据类型用于真假条件下的简单标记。
默认值是假(false)
例如:
booleanone=true
字符型(char)
字符型数据是简单的16位Unicode标准下的字符。
最小值是:'\u0000'(或0)。
最大值是:'\uffff'(或65,535)。
字符型数据可以用来储存任意字母。
例如:charletterA(字符型的字母A)='A'
引用数据类型
引用数据类型是由类的编辑器定义的。他们是用于访问对象的。这些变量被定义为不可更改的特定类型。例如:Employee,Puppy等等。
类对象和数组变量就是这种引用数据类型。
任何引用数据类型的默认值都为空。
一个引用数据类型可以被用于任何声明类型和兼容类型的对象。
例如:
Animalanimal=newAnimal("giraffe");
Java常量
常量是代表固定值的源代码。他们直接以代码的形式代表而没有任何估计。
常量可以被分配给任意的原始变量类型。例如:
bytea=68; chara='A'
字节型,整数型,长整型和短整型也可以由十进制,十六进制和八进制计数系统表示。
当用这些技术系统表示直接量时,前缀0是为了标明八进制,前缀0x是为了标明十六进制。例如:
intdecimal=100; intoctal=0144; inthexa=0x64;
Java中的字符串型常量的规定和其他大多数语言一样,也是要写在双引号中间。字符串型直接量的例子如下:
"HelloWorld" "two\nlines" "\"Thisisinquotes\""
字符和字符串型常量可以包含任意的Unicode字母。例如:
chara='\u0001'; Stringa="\u0001";
Java语言也支持一些特殊的转义序列的字符和字符串直接量。他们是:
转义字符 | |
---|---|
\n | 换行(0x0a) |
\r | 回车(0x0d) |
\f | 换页(0x0c) |
\b | 退格(0x08) |
\s | 空格(0x20) |
\t | tab |
\" | 双引号 |
\' | 单引号 |
\ | 反斜杠 |
\ddd | 八进制字符(ddd) |
\uxxxx | 十六进制UNICODE字符(xxxx) |
变量类型
变量可以给我们提供我们程序可以操纵的命名的存储。Java中的每种变量都有特定的类型,这决定了变量的大小和它的设计占用内存空间;这一些列的值可以存储在那个内存空间中;变量可以应用的操作。
在使用前你必须现将所要使用的变量进行声明。声明变量的基本格式如下:
datatypevariable[=value][,variable[=value]...];
这里的datatype是Java的一种数据类型,variable是一种变量的名称。要声明一个以上的特定变量类型,你可以采用逗号分隔开。
下面是Java中有效的变量声明和赋值的例子:
inta,b,c;//Declaresthreeints,a,b,andc. inta=10,b=10;//Exampleofinitialization byteB=22;//initializesabytetypevariableB. doublepi=3.14159;//declaresandassignsavalueofPI. chara='a';//thecharvariableaiisinitializedwithvalue'a'
Java中共有三种变量:
- 本地变量
- 实例变量
- 类、静态变量
本地变量
- 本地变量在方法、构造器或者块中声明
- 本地变量在方法、构造器或者块进入时被创建,一旦退出该变量就会被摧毁
- 可访问描述符不能用于本地变量
- 本地变量仅在已经声明的方法、构造器或者块中可见
- 本地变量在栈深度内部实施
- 本地变量没有默认值,因此本地变量必须被声明并且在第一次使用前要给它赋值
例子
这里,age(年龄)是本地变量。这是在pupAge()方法下定义的,它的范围仅限于这个方法。
publicclassTest{ publicvoidpupAge(){ intage=0; age=age+7; System.out.println("Puppyageis:"+age); } publicstaticvoidmain(Stringargs[]){ Testtest=newTest(); test.pupAge(); } }
上述代码会输出如下结果:
Puppyageis:7
例子
下面的例子使用了本地变量age但是没有进行初始化,所以在编辑是就会显示错误。
publicclassTest{ publicvoidpupAge(){ intage; age=age+7; System.out.println("Puppyageis:"+age); } publicstaticvoidmain(Stringargs[]){ Testtest=newTest(); test.pupAge(); } }
编辑时会产生如下错误:
Test.java:4:variablenumbermightnothavebeeninitialized age=age+7; ^ 1error
实例变量
- 实例变量在类中声明,但是它在方法、构造器或者块外。
- 当堆中的对象被分配了一个空间时,每个实例变量的位置就被创建了。
- 当对象采用关键字“new”创建时实例变量就被创建了,当对象被销毁时它也就被销毁了。
- 实例变量的值必须被一个以上的方法、构造器或者块,或者类中必须出现的对象的状态的重要部分所引用。
- 实例变量可以在类水平上在使用前或者使用后声明。
- 实例变量可以用可访问描述符。
- 实例变量对类中的所有方法、构造器或者块可见。一般来讲,推荐将这些变量私有(访问层面)。然而子类的可见性可用可访问描述符给予那些变量。
- 实例变量有默认值。数字的默认值为零,布尔型默认值为假,对象引用默认值为空。在声明或者构造器内可以进行赋值。
- 实例变量可以采用直接在类中叫名字方式访问。然而在静态方法和不同的类(实例变量可以被访问)中应当使用完全限定名称。ObjectReference.VariableName
例子
importjava.io.*; publicclassEmployee{ //thisinstancevariableisvisibleforanychildclass. publicStringname; //salaryvariableisvisibleinEmployeeclassonly. privatedoublesalary; //Thenamevariableisassignedintheconstructor. publicEmployee(StringempName){ name=empName; } //Thesalaryvariableisassignedavalue. publicvoidsetSalary(doubleempSal){ salary=empSal; } //Thismethodprintstheemployeedetails. publicvoidprintEmp(){ System.out.println("name:"+name); System.out.println("salary:"+salary); } publicstaticvoidmain(Stringargs[]){ EmployeeempOne=newEmployee("Ransika"); empOne.setSalary(1000); empOne.printEmp(); } }
上述代码会输出如下结果:
name:Ransika salary:1000.0
类、静态变量
- 类变量也叫静态变量,它是在类中用static关键字声明的,但是它在方法、构造器或者块之外。
- 每个类中只有一个类变量,不管这个类有多少对象。
- 除了作为常量被声明之外,类变量很少被应用。常量是被作为public、private,final和static被声明的变量。实例变量的初始值不会被改变。
- 静态变量存储在静态内存中,很少采用静态变量而不是声明结束或者用常量public或private之一。
- 静态变量随着程序的开始和结束而开始和结束。
- 可见性和实例变量相似。然而大多数静态变量被声明为public由于他们必须为类的使用者所用。
- 默认值和实例变量相似。对于数字的默认值为零,布尔型默认值为假,对象引用默认值为空。在声明或者构造器内可以进行赋值。除此之外,可以在特殊的静态初始化区赋值。
- 静态变量可以用类的名称访问。ClassName.VariableName
- 当静态变量被作为publicstaticfinal声明时,变量(常量)名称都要用大写字母。如果静态变量不是public和final,它的命名方法和实例变量和本地变量相同。
例子
importjava.io.*; publicclassEmployee{ //salaryvariableisaprivatestaticvariable privatestaticdoublesalary; //DEPARTMENTisaconstant publicstaticfinalStringDEPARTMENT="Development"; publicstaticvoidmain(Stringargs[]){ salary=1000; System.out.println(DEPARTMENT+"averagesalary:"+salary); } }
上述代码会输出如下结果:
Developmentaveragesalary:1000
注:如果变量从类外访问,常量就必须以Employee.DEPARTMENT访问。