首页 > 其他 > 详细

三、 变量与常量

时间:2020-11-15 00:25:03      阅读:29      评论:0      收藏:0      [点我收藏+]

一、标识符和关键字

A. 标识符

标识符在程序中用来表示事物的名字,这些事物包括包、类、接口、变量、符号常量、方法、字段(数据成员)等等。

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语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

 B.关键字

对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中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!