java java面向对象-final变量(常量)

20180320 java  java面向对象-final变量(常量)


final修饰的变量:表示最终的变量,即常量,表示该变量只能赋值一次,不能再次赋值。
final是唯一一个可以修饰局部变量的修饰符。




常量的分类:
1、字面量(又叫"直接量"):即字面值常量,直接给出的数据值,eg:整数常量:1,2,3,布尔常量:true,false等;
2、final修饰的变量:也是一种常量。






final的要点:
一、final变量必须显示的指定初始值,系统不会为final字段初始化,eg:
class FinalDemo
{
  final static string name;
  public static void main(String[] args)
  {
    System.out.println(name);//此时会报错,因为name没有被显示初始化
  }
}


以下是正确的:
class FinalDemo
{
  final static string name = "ABC";
  public static void main(String[] args)
  {
    System.out.println(name);//此时会输出  ABC
  }
}


二、final变量一旦赋予初值,就不能被重复赋值,eg:
class FinalDemo
{
  final static string name = "ABC";
  public static void main(String[] args)
  {
    name = "DEF";
    System.out.println(name);//此时会编译 报错
  }
}


三、常量名命名规范:常量名符合标识符,单词全部使用大写字母,如果是多个单词组成使用下换线分开,eg:
int类型的最大值   final MAX_VALUE = ...;






全局静态常量:使用public static final修饰的变量,public表示任何地方都可以调用, static表示直接用类名调用, final表示只能调用,不能更改。


面试题解析:final修饰的引用类型变量到底表示引用的地址不能改变还是引用空间的数据不能改变?




引用地址里的数据可以改变:


class FinalDemo
{
  
  public static void main(String[] args)
  {


    final Person p=new Person();


    System.out.println(p.info);//正常编译,输出ABC
    p.info = "BCD";
    System.out.println(p.info);//正常编译,输出BCD
  }
}


class Peson
{
  public String info = "ABC";
}


不能重新分配内存地址:


class FinalDemo
{
  
  public static void main(String[] args)
  {


    final Person p=new Person();


    System.out.println(p.info);//
    p=new Person();//此时编译出错
  }
}


class Peson
{
  public String info = "ABC";
}




正确:
-------------    指向   -------------
| p 0x1234  | --------->|           |
|           |           | name  ABC |
|           |           |           |
-------------           |  变成 BCD |
                        -------------






错误:


-------------    指向   -------------
| p 0x1234  | --------->|           |
|           |  |        | name  ABC |
|           |  |        |           |
-------------  |        |           |
               |        -------------
               |
               |重新指向-------------
               -------->|           |
                        | name  ABC |
                        |           |
                        |           |
                        -------------






以下情况使用常量:
当在程序中,多个地方使用到共同的数据,且该数据不会改变,此时我们定义一个全局的常量。


一般的,我们在开发中专门定义一个常量类,专门用来存储常量数据。
eg:


//常量类
class Contents
{
  public static final int X_SIZE = 10;
  public static final int Y_SIZE = 20;
}


class FinalDemo
{
  public static void XXX()
  {
    System.out.println("X坐标:" + Contents.X_SIZE);
  }


  public static void YYY()
  {
    System.out.println("Y坐标:" + Contents.Y_SIZE);
  }


  public static void main(String[] args)
  {
    System.out.println("X坐标和Y坐标:" + Contents.X_SIZE + " " + Contents.Y_SIZE);
  }


}




























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值