A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© laoyang 黑马帝   /  2011-11-2 15:51  /  5732 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 laoyang 于 2011-11-21 10:54 编辑

final,static,const在使用上有什么区别?和c#里面的read only有啥

3 个回复

倒序浏览
JAVA中——final、static

final:
final修饰类:该类不可继承
final修饰方法:该方法不能被子类覆盖(但它不能修饰构造函数)
final修饰字段属性:属性值第一次初始化后不能被修改
使用final可以提高程序执行的效率,将一个方法设成final后编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。

static:
static修饰成员函数则该函数不能使用this对象
static不能修饰构造函数、函数参数、局部成员变量
static修饰成员字段则当类被虚拟机加载时按照声明先后顺序对static成员字段进行初始化。
static修饰语句块:当类被虚拟机加载时按照声明先后顺序初始化static成员字段和static语句块
static所修饰的方法和字段只属于类,所有对象共享,java不能直接定义全局变量,是通过static来实现的。

java中没有const,不能直接定义常量,是通过static final组合来实现的。

C#中——readonly、const
readonly、const是c#中的两种常量
readonly:为运行时常量,程序运行时进行赋值,赋值完成后便无法更改,也称为只读变量。
const:为编译时常量,程序编译时将对常量值进行解析,并将所有常量引用替换为相应值。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
const在java中只是保留字。和goto一样。
final修饰的方法是不可继承的。final修饰的属性是不可改变的。
static修饰的方法是可以被继承的。static修饰的属性是可以改变的。两者起的作用根本是不同的。就像同样是修饰“苹果”,我们可以说这是一个“黄色的”苹果,这是一个“酸的”苹果。一个是用来表明颜色,一个是表明口感。黄色和酸能有什么共同点呢?
final主要是来表明不可以被改变。
static主要是说变量或方法到底在内存中是如何存储的。(这是个人理解,仅供参考)

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
const    是常量修饰符
(1)在定义变量的时候是没有说明区别的;
     例如:const int a; int const a;
     但是定义此类变量时,一般放在前面!
(2)在定义改类型的指针时,就有三种定义方式,并且意义是不一样的;
     a.指向const对象的指针;例如:const double pi = 3.14, ppi = 6.28, *ptr; ptr = π ptr = &ppi;这样是可以的,但是不能通过
       ptr来改变所指对象的值,比如给 *ptr = 2.3;这样是不行的,
     b.const指针;例如:int a; int const *ip = &a; ip不能在指向其他对象了;
     c.指向const对象的const指针,这样定义出来的对象,一旦初始化,就不会在改变了;
static局部变量:static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马