我知道public static final int i = 2 ;是说i是一个常量不能改变,那
先定义一个Person类 然后 public static final Person per = new Person() ;
该如何解释呢?虽然在网上看了,还不是太明白,难道真是说per只能指向
开始new出来的Person实例吗?不可一再次per=new Person()了?能看成
一个单例吗?作者: 尹旗龙 时间: 2012-2-8 17:39
final类不能被继承,以final修饰一个类,主要是出于安全性的考虑,例如String,它对于编译器和解释器的正常运行有很重要的作用,对它不能轻易改变,因此被修饰为final类,并非不能用new创建对象啊作者: 尹旗龙 时间: 2012-2-8 18:04
刚才审题大意,答非所问了。你说的是在创建对象时加final,这样则创建的对象的引用不能被修改,注意是对象的引用不能变,即对象在内存中的位置不能变,但对象中的内容可以变,比如说如果对象是个数组之类的容器,则数组里寸的数可以变作者: 最初的理想 时间: 2012-2-8 18:21
final修饰的成员变量必须在constructor (构造器)结束之前被赋予一个明确的值。下面这段代码会证明这个问题
class Something {
final int i;
public void doSomething() {
System.out.println("i = " + i);
}}
如果是引用类型就是变量的指向不能变为其他对象,但是指向对象的内容是可以改变的作者: 李泽霖 时间: 2012-2-8 18:23
下面的代码展示了final变量的特性,它只能够赋值一次,一旦赋值无法再修改。但是,final变量指向的对象的值却是可以修改的,如下面的owner的name和age属性都可以修改,但是owner本身指向的对象在初始化之后不能修改了。
class Person {
String name;
int age;
}
public class TestFinal {
private final Person owner;
TestFinal() {
owner = new Person();
}
public void modifyOwner(Person p) {
//下面一行代码是修改final变量,将提示错误,无法修改owner.
//owner = p;
能看成一个单例吗?
个人感觉不能 单例的意思是一个类只允许建立一个对象
对于Person类还可以建立final Person p1=new Person(12);
代码如下:
class Test
{
public static void main(String[] args)
{
final Person p=new Person(12);
//p=new Person(23);
p.setAge(20);
System.out.println(p.getAge());
}
}
class Person
{
private int age;
Person(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age=age;
}
}
作者: 余海龙 时间: 2012-2-8 20:12
public static final Person per = new Person() ;
这句代码是将Person 类型的变量per进行了限制,变量per不能再赋新值,即不能再指向其他的Person对象。
但Person还是可以创建对象的,只要变量名不与per相同即可。
单例设计模式:
饿汉式:
class Single{
private static final Single single = new Single();
private Single(){} // 将构造函数私有化,禁止外界创建对象
// 对外提供公共的得到对象的方法
public Single getInstanse(){
return single;
}
}
懒汉式:(延迟加载模式)
class Single{
private static Single single ;
private Single(){} // 将构造函数私有化,禁止外界创建对象
// 对外提供公共的得到对象的方法
public Single getInstanse(){
if(single!=null)
single=new Single();
return single;