社区
Java SE
帖子详情
请教final和static的区别
jeeb412
2007-08-19 03:10:05
final和static有什么区别?
...全文
713
20
打赏
收藏
请教final和static的区别
final和static有什么区别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoqiuwyh
2008-01-22
打赏
举报
回复
static所声明的变量或者方法,在类加载时也就同时加载了,属于类变量和类方法,直接可以用类名访问.
xiaolingshi
2008-01-22
打赏
举报
回复
学习……
mcluvin
2008-01-21
打赏
举报
回复
MARK,13楼
final修饰的也不是不可变,System.out就是一个例子。
虽然定义为:public static final PrintStream out; 但仍然可以使用setOut(PrintStream out)方法使其指向另外的对象。
love1907
2008-01-21
打赏
举报
回复
我也想知道static的调用,为啥直接用类名就可以调用,我们知道static修饰的变量值是存放在数据段中,而我们要访问某一变量,首先要找到变量所依附的载体,换句话说就是要找到一个已存在的路径或者地址,而我们直接通过类名来访问的,而类应该是没有专门的一个地址吧,但是如何实现访问的呢
sun_3211
2008-01-21
打赏
举报
回复
学了c语言的话 就很好理解 final 和 static 了
final 声明的时候 就要赋值 可以在 类中 声名 在构造方法中 赋值 且 赋值后 再也不能被 改变
static 是值 静态属性 或方法 java是面上对象的 编程 有 只要是 static 的属性和方法 所有对象
使用的 这个方法和属性都是 同一个
wuy13862574600
2008-01-21
打赏
举报
回复
虽然定义为:public static final PrintStream out; 但仍然可以使用setOut(PrintStream out)方法使其指向另外的对象。
---------------------------------------
本身既是指向,原来的对象就没有改变啊,与final的定义不冲突呀
johncarmark
2008-01-20
打赏
举报
回复
abstract class ABSClass{
public abstract void m();
}
public class Test2{
public static void test(final String s){//一旦参数在匿名类内部使用,则必须是final
ABSClass c=new ABSClass(){
public void m(){
int x=s.hashCode();
System.out.println(x);
}
};
c.m();
}
public static void main(String[] args){
test("John");
}
}
//13楼的示例程序
johncarmark
2008-01-20
打赏
举报
回复
如果定义一个匿名内部类,并且内部类使用了一个在其外部定义的对象,为什么编译器会要求其参数引用是final呢?
原因如下:
JVM中每个进程都会有多个根,每个static变量,方法参数,局部变量,当然这都是指引用类型.基础类型是不能作为根的,根其实就是一个存储地址.垃圾回收器在工作时先从根开始遍历它引用的对象并标记它们,如此递归到最末梢,所有根都遍历后,没有被标记到的对象说明没有被引用,那么就是可以被回收的对象(有些对象有finalized方法,虽然没有引用,但JVM中有一个专门的队列引用它们直到finalized方法被执行后才从该队列中移除成为真正没有引用的对象,可以回收,这个与本主题讨论的无关,包括代的划分等以后再说明).这看起来很好.
但是在内部类的回调方法中,s既不可能是静态变量,也不是方法中的临时变量,也不是方法参数,它不可能作为根,在内部类中也没有变量引用它,它的根在内部类外部的那个方法中,如果这时外面变量s重指向其它对象,则回调方法中的这个对象s就失去了引用,可能被回收,而由于内部类回调方法大多数在其它线程中执行,可能还要在回收后还会继续访问它.这将是什么结果?
而使用final修饰符不仅会保持对象的引用不会改变,而且编译器还会持续维护这个对象在回调方法中的生命周期.所以这才是final变量和final参数的根本意义.
zdjray
2007-08-20
打赏
举报
回复
一楼reference的文章写的挺好
需要注意的是,final不是不可变的
lfcai
2007-08-20
打赏
举报
回复
同意楼上的。
final说名是最终的,是不可变的;
static是静态的,是共享的。
多看看英语,对我们还是有帮助的,那些开发语言的大部分是外国的,跟他们的语言有关
myj1688
2007-08-19
打赏
举报
回复
楼上说的最经典
codeartisan
2007-08-19
打赏
举报
回复
static 是共享的
final 是不可变的
欧德曼
2007-08-19
打赏
举报
回复
static 是一个 静态变量 可以直接引用,同样 也只能被静态引用;
final 是一个 最终变量 也可以叫做常量。 一般别申明为最终变量的 都用大写字母,并且 不可以改变 不可以继承 和重写。
jeeb412
2007-08-19
打赏
举报
回复
有点模糊,能不能举个简单的例子?
liuwanlin
2007-08-19
打赏
举报
回复
不知道明白了不?
liuwanlin
2007-08-19
打赏
举报
回复
static 只能调用静态方法
只访问景泰数据
不能使用this ,super关键字
liuwanlin
2007-08-19
打赏
举报
回复
final and static
一》》》
static
当你需要用一个数据不依赖任何的对象的时候,可以在变量前加static
二》》》
filal
定义一个不能被改写的类成员
向它的意思一样,它就是最终的。只要是有final,变量变为常量,类不能继承,方法不可以重写
三》》》
都是方法修饰符
liujun999999
2007-08-19
打赏
举报
回复
哦,看见一楼牛人,改混java区了?
树成
2007-08-19
打赏
举报
回复
两者没有联系,何来区别?
孟子E章
2007-08-19
打赏
举报
回复
可参考
http://lavasoft.blog.51cto.com/62575/18771
Java编程校招面试基础题目解析与学习指南:涵盖核心概念、代码示例及应用场景了Java校招
内容概要:本文旨在帮助读者应对Java校招面试,通过解析常见面试题,结合理论与代码示例,深入浅出地讲解Java基础知识。文章涵盖Java基础特性(平台无关性、面向对象特性)、数据类型(基本数据类型、引用数据类型)、关键字(
static
、
final
)、方法相关(方法重载、方法覆盖)、流程控制语句(if-else、switch、for循环、while循环、do-while循环)、数组与集合(数组、ArrayList、HashMap)以及异常处理(try-catch-
final
ly、throws和throw)。每个知识点都配有具体的代码示例,便于读者理解和实践。 适合人群:即将参加Java校招面试的应届毕业生或初学者,特别是那些希望系统复习和巩固Java基础知识的人群。 使用场景及目标:①帮助读者理解Java的核心概念,如平台无关性、封装、继承、多态等;②通过代码示例加深对关键字、方法重载与覆盖的理解;③掌握常用的流程控制语句和数据结构,如数组、ArrayList、HashMap;④学会处理常见异常,提高代码健壮性。 阅读建议:建议读者结合实际编程练习,逐个尝试文中提供的代码示例,理解每个知识点的具体应用场景。对于不熟悉的领域,可以通过编写更多类似的代码来强化记忆。同时,遇到不懂的地方可以参考官方文档或向他人
请教
。
java第五版课后答案
java第五版课后答案 大部分的代码都有,很详细,很给力的! 大部分的代码都有,很详细,很给力的! 大部分的代码都有,很详细,很给力的!
【Android开发经验】ViewHolder到底用什么修饰?
static
?
final
?
static
final
?
其实一上来我就贴一张图就ok了,因为这几种完全一样,不管用什么修饰,ViewHolder都会初始化当前界面可见item的数量+1次,和convertView的实例化次数是一样的,因此,我么不管使用什么修饰都是没问题的,也是没必要的。
static
修饰类,在这里是静态内部类,并不是说只存在一个实例,而是可以访问外部类的静态变量,
final
修饰类则是不让该类继承,我们这里使用
final
毫无...
ViewHolder到底用什么修饰?
static
?
final
?
static
final
?
现在大家都知道用ViewHolder来实现listview的优化了,但是,ViewHolder到底要用什么来修饰呢?这种修饰有什么意义呢?在一个ListView里面,存在多少个VIewHolder实例呢?为什么VIewHolder能够减少findview的次数,优化效率呢?为了弄清楚这个问题,我做了以下测试,测试代码很简单,就是下面这些public class MainActivity extend
请问在java中定义字符串时要加上
final
修饰吗?
提问者采纳 亲,
final
加到属性上面就是常量了,也就是说他不能变了。String这个类他本身就是
final
的,所以你定义字符串不须要加,除非你要把这个String变量弄成常量。正常的来说,
final
修饰就是一个不再改变的量,这样,他的修饰的字符串就要大写,比如:private
static
final
String PRICE=15;这这个PRICE就是个常量了。不明白可再问
Java SE
62,623
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章