class TestA{ final int j;//没有初始化 {j=2;}//仍没有写在构造器中,但可以初始化(当然:对象初始化块中代码最后编译器全挪到所有构造器中)
public void f(final int x)//这个变量x干脆就不写初始化值 {...} } 2)static final也不是必须定义的同时就一定初始化。 如:class TestB { static final int i;//没有初始化 static { i=2;//此处再初始化。所以static final 不一定非要在定义的同时初始化 } }
楼上的何必这样呢?31楼已经说得很不错了。 实例初始化而罢了 要是我来挑你的刺也可以挑到 class Test { private final int a; { a=1; } } 这不就是三个地方了么?怎么你说这两个地方只能选其一?我是故意开玩笑说的,其实这些东西不用说大家都知道
static 表示静态,下我一跳,以为 final 能修饰变量呢。
我认啊...final定义成员变量..是这个成员变量就不可以改变了啊...而static final 是定义常量的默认是public static final
final 修饰表示的是 常量。但是这个常量的生命周期和他所在的类一起。static final 修饰表示 静态常量,它还有个更容易理解的名字 : 全局常量以为在java这样纯面向对象的语言中,什么都写在类里,所以没有像c里const int i = 1; int main(){ } 这样的写法,所以引入的static final恰好解决了这个问题,一个public static final修饰的常量,被所有对象共享。………………………………………… 自己理解而已。
static则表示某个变量或常量为静态,保存在内存中希望能对你有所帮助,如再有问题,欢迎给我邮件,乐意帮助同行解决问题,大家相互提高!
------------------------------------------------------
final一般用于修饰常量 那加了final关键字的变量有代表这什么呢
static final 修饰常量又代表这什么意思呢
static final 常量中的static仅仅是指静态吗
希望高人指点
final一般用于修饰常量 那加了final关键字的变量有代表这什么呢
表示引用对象不变
static定义的常量,是保存在内存的data段定义一个值,可以用“class.常量”来访问,所有的实例对象都访问同一个值
final表示不可改变。(常量->不可再去赋值)
常<->恒估计楼主是在这理解出问题了吧
STATIC can be make a code block, init as the class onload
static变量在程序开始运行就一直存在,程序结束后就被回收了。
static final 变量=静态常量,这个常量程序一开始运行就存储在内存中了。直到程序退出
a = 1; 只能进行一次赋值final int a=1;直接指定
……
就是这样个意思
如果在变量前加static final修饰,只可以在定义的时候进行初使化.
答:以上回答都不全面。至少在打上红色的地方,都不全面。
如:
1)代码:
class TestA{
final int j;//没有初始化
{j=2;}//仍没有写在构造器中,但可以初始化(当然:对象初始化块中代码最后编译器全挪到所有构造器中)
public void f(final int x)//这个变量x干脆就不写初始化值
{...}
}
2)static final也不是必须定义的同时就一定初始化。
如:class TestB
{
static final int i;//没有初始化
static
{
i=2;//此处再初始化。所以static final 不一定非要在定义的同时初始化
}
}
实例初始化而罢了
要是我来挑你的刺也可以挑到
class Test {
private final int a;
{
a=1;
}
}
这不就是三个地方了么?怎么你说这两个地方只能选其一?我是故意开玩笑说的,其实这些东西不用说大家都知道
final定义变量不可改变
定义类不能被实例化(定义抽象类不能被实现)
定义方法不能被重写
int main(){
}
这样的写法,所以引入的static final恰好解决了这个问题,一个public static final修饰的常量,被所有对象共享。…………………………………………
自己理解而已。
final的用法:
final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。
将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
所以被成为常量.
static 修饰的属性表示类属性,只和类相关。
在初始化以后,值就不能再改变!
不过是否真的十分懂,其实我觉得也不是,我自己的总结1、JAVA中没有CONST,CONST只为保留字,但没用,所以:FINAL=CONST
2、FINAL了的东西不能被继承或在任何时候改变,只能赋值一次
3、STATIC为全局变量关健字,final static代表全局常量,普通的static就代表类里面自己的全局变量
4、FINAL常量在类初始化的时候才会占用内存,而static在程序一运行的时候就占用内存
5、假设以下代码package com.bean;public class finalstatic {
public final static String sthello = "hello world";
public static String sthi = "hi world";
public final String hello = "hello world";
public String hi = "hi world"; public finalstatic() {
//构造函数里面没东东
}
}
我们先试试直接赋值
com.bean.finalstatic.sthello = "hello world"; //出错
com.bean.finalstatic.sthi = "hi world"; //正常
com.bean.finalstatic.hello = "hello world"; //出错
com.bean.finalstatic.hi = "hi world"; //出错第一句出划,因为有final不能赋值
第二句正确,因为有static的是全局变量,并且没有final可以直接赋值,不用创建对像实例
第三、四两句,是因为没有static修饰,只能是在finalstatic myfinalstatic = new finalstatic ()之后能能用myfinalstatic.hi或finalstatic.hello赋值从上面的代码,应该可以看得出来final和static的区别,当然了,static既然可以不new对像实例就赋值,当然也可以取值了,例如:
System.out.print(com.bean.finalstatic.sthi);