标识符即Java程序中需要自定义的名称,如变量名、方法名、类名、包名、工程名等。
标识符的命名规则:
1.可由字母、数字、下划线(_)和美元符($)组成,不能以数字开头。
2.严格区分大小写。
3.不能是Java关键字和保留字。
4.最好能反映其作用。
变量名、方法名的命名规则:
1.满足标识符命名规则。
2.符合驼峰法命名规范。(首字母小写,如果名称由多个单词组成,从第二个单词开始每个单词的首字母都要大写。)
3.尽量简单,做到见名知意。
常量名的命名规则:
字母全部大写,且单词间用下划线(_)分隔。
如:final int MAX_VALUE=100;
类名、接口名的命名规则:
满足Pascal命名法规范。(首字母大写,如果名称由多个单词组成,每个单词的首字母都要大写。)
接口的实现类的命名规则为:<接口名>+"Impl"。
包名、项目名的命名规则:
包名:<域名反转>.<团队名>.<项目名>。相关项目可使用<域名反转>.<团队名>.<f父项目名>.<子项目名>。
命名必须全部使用英文小写字母,不要用下划线等字符。(除常量外,Java命名习惯中均不推荐使用下划线等字符)
项目工程名用小写英文字母。
数据类型
基本数据类型的数据变量在声明后就会立刻在内存中的栈上被分配内存空间,变量值存储在栈空间里。
例如:int n=100; //变量类型、变量名、变量值
在栈中开辟int类型大小的存储空间, 4个字节,占用32个二进制位,把100这个整型字面值放到开辟的空间中,n是100所占内存空间的别名,代表100去做运算。
引用类型继承于Object类(也是引用类型),内存栈里存储的是对象的引用变量(要存储的是实际对象的地址),对象本身存储在内存堆上。
例如: 用类定义一个变量叫对象的引用变量名,new出来的对象存储在堆空间,把对象在堆内存的地址存储到栈内存中这个引用变量名所在的空间里,这个引用变量名可以通过地址来找到对象,即对象的引用变量指向这个对象。
图1
栈:栈数据可共享,存取速度比堆快,仅次于寄存器,存在栈中的数据大小与生存期必须是确定的。关于回收:当超过变量的作用域后,Java会自动释放该变量内存空间,可立即被其它利用。
堆:存储速度较慢,动态地分配内存大小,生存期也不必预先告诉编译器。关于回收:由Java虚拟机的自动垃圾回收器来回收不再使用的数据。
图2
例子:
Dog d1; //在栈内存里给引用变量d1开辟存储空间,这时d1=null。(null不是一个合法的Object实例,所以编译器并没有为其(null)分配内存,它仅仅用于表明该引用目前没有指向任何对象。)
d1=new Dog(); //在堆内存里给Dog类的对象开辟空间,并调用Dog类的构造函数。(若未自定义,调用系统默认提供的。)
注:
1.这里的"=",是把Dog类的对象在堆中的地址传递给引用变量d1,即栈中的引用变量d1里存放了新创建的Dog类对象的地址,这时引用变量d1指向了新创建出来的对象。
2.对象创建出来,没有名字,通过引用变量来对其操作。
Dog d2;
d2=d1; //d2也指向了d1所指向的对象 如上图2
注:
1.一个对象引用可以指向0个或1个对象。
2.一个对象可以有n个引用指向它。
d2=new Dog(); // 引用变量d2改成指向了新的第2个对象
d1=d2; // d1也指向了第2个对象
注:第一个对象已成为垃圾回收机制的处理对象。
Java中的基本数据类型及其描述如下:
Java中的数值类型都是有符号的,不存在无符号的数,它们的取值范围也是固定的,不会随着硬件环境或者操作系统的改变而改变。除了以上八种基本数据类型以外,在Java语言中,还存在另外一种基本类型void,它也有对应的封装类java.lang.void,只是无法直接对它进行操作。
封装类型和原始类型有何不同:
1.原始数据类型在传递参数时都是按值传递,而封装类型是按引用传递的。
2.当封装类型和原始类型用作某个类的实例数据时,它们所指定的默认值不同。对象引用实例变量的默认值为null,而原始类型实例变量的默认值与它们的类型有关(例如int默认初始化为0)。
例子:
1 public class Test { 2 String s; 3 int i; 4 float f; 5 public static void main(String args[]) { 6 Test t=new Test(); 7 System.out.println(t.s==null); 8 System.out.println(t.i); 9 System.out.println(t.f); 10 } 11 }
程序运行结果为:
true
0
0.0