标识符在程序中用来表示事物的名字,这些事物包括包、类、接口、变量、符号常量、方法、字段(数据成员)等等。
Java 中标识符要遵循以下规则:
a> 标识符由字母、数字、下划线(_)、美元符($)组成。
b> 标识符不能以数字开头。
c> 标识符不能使用关键字。
d> 标识符区分大小写(或称为大小写敏感)。
e> 标识符不能使用true、false、null这些常量。
f> 标识符可以为任意长度。
建议:
a> 不要使用 $ 开头的标识符,通常由编译器自动生成的代码中使用 $ 开头的标识符。
b> 标识符应该具有描述性,以起到见名知意的效果。
对使用字母作名字,有以下约定:
c> 包名所有字母都小写。
d> 构成类名和接口名的每个单词的第一个字母都大写其余字母小写。(Pascal命名法)
e> 构成变量名、方法名、字段(不含符号常量)的每个单词,从第二个单词开始,每个单词首字母大写,其余所有字母都小写。(驼峰命名法)
f> 符号常量都大写,若由多个单词构成,单词间用下划线(_)连接。
编写Java程序时,应注意以下几点:
a. 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。
b. 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
c. 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
d. 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。
e. 主方法入口:所有的Java 程序由public static void main(String[] args)方法开始执行。
源文件声明规则
当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。
A. 一个源文件中只能有一个public类
B. 一个源文件可以有多个非public类
C. 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。
D. 如果一个类定义在某个包中,那么package语句应该在源文件的首行。如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
E. import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
对jvm来说有特殊意义的字符称为关键字.一般是我们所用到的语法的英文单词。
在程序运行过程中其值不能改变的永久数据称为常量。分为直接量与符号常量两种。
直接量:指程序是直接出现的常量值。
符号常量:则是指为直接量另起了一个名字,符号常量的声明语法:final 数据类型 符号常量名称 = 直接量;
符号常量建议在声明的同时赋值,这样有利于阅读理解,同时减少出错。如果声明时没有赋值,则之后可以赋值一次,但不能再次赋值。
使用符号常量的好处:
a> 避免重复输入同一个直接量。
b> 如果使用了符号常量,当要修改其值时,只需要修改声明时的值即可,否则要在程序中所有用到这个常量的地方进行修改,增加了工作量和出错的机会。
c> 可以通过给符号常量一个描述性的名字来提高可读性。
注意:虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。
为什么要定义变量:用来不断的存放同一类型的常量,并可以重复使用。
变量是用来在程序中存储数据的,在程序运行过程中其值可能会被改变。它本质上是内存中的一块存储空间,给这个存储空间取了个名称,叫变量。因此变量是内存的抽象。
注意:
* 在给变量赋值之前,必须声明这个变量。
* 在方法中声明的变量,使用前必须对其赋值。
* 尽量一步完成变量的声明和初始化,以增强可读性,减少出错。
* 不能在同一方法块及其子块中声明重名的变量。
A:变量的定义格式
数据类型 变量名 = 初始化值;
B:变量定义注意事项:
1:变量未赋值,不能直接使用
2:变量只在它所属的范围内有效,变量属于它所在的那对大括号
3:一行上可以定义多个变量,但是不建议
C. Java中主要有如下几种类型的变量
* 局部变量:类的方法中的变量。
* 类变量(静态变量): 独立于方法之外的变量,用 static 修饰
* 成员变量(实例变量): 独立于方法之外的变量,不过没有 static 修饰
D. 局部变量
1. 局部变量声明在方法、构造方法或者语句块中;
2. 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
3. 访问修饰符不能用于局部变量;
4. 局部变量只在声明它的方法、构造方法或者语句块中可见;
5. 局部变量是在栈上分配的。
6. 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
E. 实例变量(成员变量)
1. 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
2. 当一个对象被实例化之后,每个实例变量的值就跟着确定;
3. 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
4. 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
5. 实例变量可以声明在使用前或者使用后;
6. 访问修饰符可以修饰实例变量;
7. 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
8. 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
9. 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
F. 类变量(静态变量)
1. 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。
2. 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
3. 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
4. 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
5. 静态变量在第一次被访问时创建,在程序结束时销毁。
6. 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。
7. 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
8. 静态变量可以通过:ClassName.VariableName的方式访问。
9. 类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。
Java语言提供了很多修饰符,主要分为两类:访问修饰符、非访问修饰符
访问控制修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
public : 对所有类可见。使用对象:类、接口、变量、方法
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
方法继承的规则:
父类中声明为 public 的方法在子类中也必须为 public。
父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
父类中声明为 private 的方法,不能够被继承。
非访问修饰符:为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
static 修饰符,用来修饰类方法和类变量。静态方法不能使用类的非静态变量
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract 修饰符,用来创建抽象类和抽象方法。
synchronized 和 volatile 修饰符,主要用于线程的编程。
abstract 修饰符
抽象类:
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
抽象类可以包含抽象方法和非抽象方法。
抽象方法
抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
抽象方法不能被声明成 final 和 static。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
抽象方法的声明以分号结尾,例如:public abstract sample();。
synchronized 修饰符
synchronized 关键字声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符。
public synchronized void showDetails(){ ....... }
transient 修饰符
序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
public transient int limit = 55; // 不会持久化 public int b; // 持久化
volatile 修饰符
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
一个 volatile 对象引用可能是 null。
public class MyRunnable implements Runnable { private volatile boolean active; public void run() { active = true; while (active) // 第一行 { // 代码 }
} public void stop() { active = false; // 第二行 }
通常情况下,在一个线程调用 run() 方法(在 Runnable 开启的线程),在另一个线程调用 stop() 方法。 如果 第一行 中缓冲区的 active 值被使用,那么在 第二行 的 active 值为 false 时循环不会停止。
但是以上代码中我们使用了 volatile 修饰 active,所以该循环会停止。
原文:https://www.cnblogs.com/ljk-shm-0208/p/13975269.html