请教final和static的区别 final和static有什么区别? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可参考http://lavasoft.blog.51cto.com/62575/18771 final and static 一》》》 static 当你需要用一个数据不依赖任何的对象的时候,可以在变量前加static 二》》》 filal 定义一个不能被改写的类成员向它的意思一样,它就是最终的。只要是有final,变量变为常量,类不能继承,方法不可以重写三》》》 都是方法修饰符 static 只能调用静态方法 只访问景泰数据 不能使用this ,super关键字 static 是一个 静态变量 可以直接引用,同样 也只能被静态引用;final 是一个 最终变量 也可以叫做常量。 一般别申明为最终变量的 都用大写字母,并且 不可以改变 不可以继承 和重写。 static 是共享的final 是不可变的 同意楼上的。final说名是最终的,是不可变的;static是静态的,是共享的。多看看英语,对我们还是有帮助的,那些开发语言的大部分是外国的,跟他们的语言有关 一楼reference的文章写的挺好需要注意的是,final不是不可变的 如果定义一个匿名内部类,并且内部类使用了一个在其外部定义的对象,为什么编译器会要求其参数引用是final呢?原因如下:JVM中每个进程都会有多个根,每个static变量,方法参数,局部变量,当然这都是指引用类型.基础类型是不能作为根的,根其实就是一个存储地址.垃圾回收器在工作时先从根开始遍历它引用的对象并标记它们,如此递归到最末梢,所有根都遍历后,没有被标记到的对象说明没有被引用,那么就是可以被回收的对象(有些对象有finalized方法,虽然没有引用,但JVM中有一个专门的队列引用它们直到finalized方法被执行后才从该队列中移除成为真正没有引用的对象,可以回收,这个与本主题讨论的无关,包括代的划分等以后再说明).这看起来很好. 但是在内部类的回调方法中,s既不可能是静态变量,也不是方法中的临时变量,也不是方法参数,它不可能作为根,在内部类中也没有变量引用它,它的根在内部类外部的那个方法中,如果这时外面变量s重指向其它对象,则回调方法中的这个对象s就失去了引用,可能被回收,而由于内部类回调方法大多数在其它线程中执行,可能还要在回收后还会继续访问它.这将是什么结果? 而使用final修饰符不仅会保持对象的引用不会改变,而且编译器还会持续维护这个对象在回调方法中的生命周期.所以这才是final变量和final参数的根本意义. 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楼的示例程序 MARK,13楼final修饰的也不是不可变,System.out就是一个例子。虽然定义为:public static final PrintStream out; 但仍然可以使用setOut(PrintStream out)方法使其指向另外的对象。 虽然定义为:public static final PrintStream out; 但仍然可以使用setOut(PrintStream out)方法使其指向另外的对象。---------------------------------------本身既是指向,原来的对象就没有改变啊,与final的定义不冲突呀 学了c语言的话 就很好理解 final 和 static 了final 声明的时候 就要赋值 可以在 类中 声名 在构造方法中 赋值 且 赋值后 再也不能被 改变static 是值 静态属性 或方法 java是面上对象的 编程 有 只要是 static 的属性和方法 所有对象使用的 这个方法和属性都是 同一个 我也想知道static的调用,为啥直接用类名就可以调用,我们知道static修饰的变量值是存放在数据段中,而我们要访问某一变量,首先要找到变量所依附的载体,换句话说就是要找到一个已存在的路径或者地址,而我们直接通过类名来访问的,而类应该是没有专门的一个地址吧,但是如何实现访问的呢 static所声明的变量或者方法,在类加载时也就同时加载了,属于类变量和类方法,直接可以用类名访问. 这三个Jar文件后,应该放在那里才行呢 如何快速的一行行的输出信息 java正则问题,怎么去掉全是空格的行? TablePane的一些用法。 怎样用java读取网页的内容? 救命:求可以下载中文文件名的jspsmartupload.jar,感激不尽,立刻给分. 如何调用系统命令 求高手点拨一个Socket通信软件的问题解决方案. Java新手請多關照 !! 哪有java的基础教材(电子版的) 这家单位是做啥的?哪位兄弟知道详细情况的,能否提点下?先谢谢了! javascript验证EMAIL的合法性---请高手指点一下
http://lavasoft.blog.51cto.com/62575/18771
static
当你需要用一个数据不依赖任何的对象的时候,可以在变量前加static
二》》》
filal
定义一个不能被改写的类成员
向它的意思一样,它就是最终的。只要是有final,变量变为常量,类不能继承,方法不可以重写三》》》
都是方法修饰符
只访问景泰数据 不能使用this ,super关键字
final 是一个 最终变量 也可以叫做常量。 一般别申明为最终变量的 都用大写字母,并且 不可以改变 不可以继承 和重写。
final 是不可变的
final说名是最终的,是不可变的;
static是静态的,是共享的。
多看看英语,对我们还是有帮助的,那些开发语言的大部分是外国的,跟他们的语言有关
需要注意的是,final不是不可变的
但是在内部类的回调方法中,s既不可能是静态变量,也不是方法中的临时变量,也不是方法参数,它不可能作为根,在内部类中也没有变量引用它,它的根在内部类外部的那个方法中,如果这时外面变量s重指向其它对象,则回调方法中的这个对象s就失去了引用,可能被回收,而由于内部类回调方法大多数在其它线程中执行,可能还要在回收后还会继续访问它.这将是什么结果?
而使用final修饰符不仅会保持对象的引用不会改变,而且编译器还会持续维护这个对象在回调方法中的生命周期.所以这才是final变量和final参数的根本意义.
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楼的示例程序
虽然定义为:public static final PrintStream out; 但仍然可以使用setOut(PrintStream out)方法使其指向另外的对象。
---------------------------------------本身既是指向,原来的对象就没有改变啊,与final的定义不冲突呀
final 声明的时候 就要赋值 可以在 类中 声名 在构造方法中 赋值 且 赋值后 再也不能被 改变
static 是值 静态属性 或方法 java是面上对象的 编程 有 只要是 static 的属性和方法 所有对象
使用的 这个方法和属性都是 同一个