今日学习内容目录
Java基本数据类型
内置数据类型
引用数据类型
Java变量类型
类变量
实例变量
局部变量
Java修饰符
访问修饰符
非访问修饰符
Java基本数据类型
再介绍基本数据类型之前先讨论Java数据类型有什么作用?
变量与内存的关系:
-
当创建变量的时候需要在内存中申请空间
-
变量类型不同分配的存储空间大小不同
-
分配的空间只能用来存储该类型的数据
变量的存储位置问题
这里又会涉及到存储位置的问题,一个变量的存储位置可以是寄存器(register),也可以是堆栈(stack---位于RAM中),还可以是堆(heap---内存池,也位于RAM中),那么到底会存在哪?
对于基础类型的变量和常量而言:
-
变量和引用存储在栈中
-
常量存储在常量池中
Java两大数据类型
内置数据类型
Java语言提供了八种基本数据类型。六种数字类型(四个整数型,两个浮点型),一个字符类型,还有一种布尔型
-
整数型
-
byte
-
8位(一个字节)、有符号、以二进制补码表示的整数
-
用在大型数组中节约空间,主要代替整数。byte变量占用的空间只有int类型的四分之一
-
默认值是0
-
-
short
-
16位(2个字节)、有符号、以二进制补码表示的整数
-
一个short变量是int型变量所占空间的二分之一
-
默认值是0
-
-
int
-
32位(4个字节)、有符号、以二进制补码表示的整数
-
整型变量默认为int类型
-
默认值是0
-
-
long
-
64位(8个字节)、有符号、以二进制补码表示的整数
-
用在比较大整数的系统上
-
默认值是0L
-
表示方法:Long = 10000L(两个点:第一个是大写的"L"字母,第二个是再常量后加"L"字母表示long型)
-
-
-
浮点型
-
float
-
单精度、32位、符合IEEE754标准的浮点型
-
存储大型浮点数组的时候可节省内存空间
-
默认值是0.0f
-
不能用来表示精确的值,如currency---小数点后几位忘记了,听马士兵教程
-
举例:float f1 = 234.5f
-
-
double
-
双精度、64位、符合IEEE754标准的浮点型
-
浮点数的默认类型是double类型
-
不能用来表示精确的值,如currency
-
默认值是0.0d
-
举例:double d1 = 123.4
-
-
-
布尔型
-
boolean
-
表示一位的信息
-
两个值
-
true---为真
-
false---不为真
-
-
只作为一种标志来记录true/false情况
-
默认值False
-
举例:boolean one = true;
-
-
-
字符型
-
char
-
单一的、16位(2个字节)、Unicode字符:
-
Min_value = \u0000(即为0)
-
Max_value = \uffff(即为65535)
-
char数据类型可以存储任何字符
-
举例:char letter = 'A';
一个字节八位
这些内置数据类型的最大最小值没必要去记忆,Java已经给了出来。具体的查询方式
public class PrimitiveTypeTest{
publc static void main(String[] args){
System.out.println("数据类型".size)
//输出的是数据类型的二进制位数
System.out.println("数据类型".Max_value);
//字符的查询方式
// char
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
System.out.println("包装类:java.lang.Character");
// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE="
+ (int) Character.MIN_VALUE);
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
System.out.println("最大值:Character.MAX_VALUE="
+ (int) Character.MAX_VALUE);
}
}
Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的"E+数字"表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314。
实际上,JAVA中还存在另外一种基本类型 void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。
整体情况如图所示
public class Test {
static boolean bool;
static byte by;
static char ch;
static double d;
static float f;
static int i;
static long l;
static short sh;
static String str;
public static void main(String[] args) {
System.out.println("Bool :" + bool);
System.out.println("Byte :" + by);
System.out.println("Character:" + ch);
System.out.println("Double :" + d);
System.out.println("Float :" + f);
System.out.println("Integer :" + i);
System.out.println("Long :" + l);
System.out.println("Short :" + sh);
System.out.println("String :" + str);
}
}
/*
上面的代码是先用static关键字+每个数据类型的默认值作为返回值---因为没有给数据类型赋予常量
*/
引用数据类型
引用数据类型的几个特点
-
引用类型的变量类似C/C++的指针。其特点是:
-
引用类型指向一个对象,指向对象的变量是引用变量
-
变量再声明时被指定为一个特定的类型,如:Employee、Puppy等。
-
变量一旦声明后,类型不能被改变
-
-
对象、数组都是引用数据类型
-
所有引用类型的默认值都是Null
-
一个引用变量可以用来引用任何与之兼容的类型---未理解其含义
-
举例:Site site = new Site("Runoob")
Java常量
常量在程序运行时是不能被修改的
特点:
-
Java中使用final关键字修饰常量,声明方式和变量类似
-
通常用大写字母表示常量,下面的PI表示的就是常量
-
final double PI = 3.1415927;
-
-
字面量可以赋给任何内置类型的变量
-
byte a = 68;
char a = 'A';
-
-
当使用字面量时,前缀0表示八进制,前缀0x代表16进制
-
int decimal = 100;//这个是十进制数
int octal = 0144;//这个是八进制数,因为前面有"0"前缀
int hexa = 0x64;//这个是十六进制数,因为前面有"0x"前缀
-
-
Java的字符串常量包含在两个引号之间的字符序号
-
"Hello World"
"Two\Ulines"
"\"This is in quotes\""
-
-
字符串常量和字符常量都可以包含任何Unicode字符
-
char a = "\u0001";
String a = "\u0001";
-
下面是Java语言支持的一些特殊的转义字符序列
由于自动类型转换涉及到对象的概念,后面学习到对象的内容再回来学习