论坛首页 入门技术论坛

corejava辅导(5--2)

浏览 944 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-03  

final修饰符,可以修饰变量方法

 

1, final修饰变量(包括局部变量和实例变量)

final修饰的变量就成为常量常量名应当大写),一旦赋值不能改变,(可以在初始化时直接赋值,在构造方法里可以为其赋值,只能在这两种方法里二选一,常量不能不赋初值),常量没有默认初始值,final修饰符常和static修饰符一起使用。

例:

public class Test{

     private static final int TESTNUM=2;

//final修饰符这个变量就变成了常量

     ……

}

 

2final修饰方法final修饰的方法将不能被子类覆盖,保持方法的稳定不能被覆盖。

 

例:

public class Test{

     public final int test(){

         。。。。。。

     }

}

 

3final修饰final修饰的类将不能被继承final类中的方法也都是final的。

 

例:

public final class Test{

     public final int test(){

         。。。。。。

     }

}

 

 

注意:final,不能修饰构造方法,在父类中有常量属性,子类中使用常量属性时不会进行父类的类加载。静态常量如果值可以确定,就不会加载该类,不能确定则会加载该常量所在的类。

 

不变模式,对象一旦创建属性就不会改变。用final修饰(强不变模式),用final修饰属性(弱不变模式)。

 

不变模式的典型体现java.lang.String类,不变模式可以实现对象的共享(可以用一个对象实例赋值给多个对象引用。)

 

池化的思想,把需要共享的数据放在池中(节省空间,共享数据)

 

String类可以用  中的字面值创建对象。String类中,以字面值创建时,会到Java方法空间的串池空间中去查找,有就返回串池中字符串的地址,并把这个地址付给对象引用。没有会在串池里创建一个字符串对象,并返回其地址付购对象引用,当另一个以字面值创建对象时会重复上述过程。

 

堆空间中创建String类的对象,不会有上述的过程。

 

例:

public class TestString{

     public static void main(String[] args){

         String str1=”abc”;

         String str2=”abc”;

         String str3=new String(“abc”);

         System.out.println(str1==str2);

         System.out.println(str1==str3);

     }

}

结果是:

true

false//在堆空间中创建的Srting是不会从串池中引用的

 

String类中的intern()方法会将在堆空间中创建的String类对象中的字符串和串池中的比对,有相同的串就返回这个串的串池中的地址。

 

不变模式在对于对象进行修改,添加操作是使相当麻烦的,会产生很多的中间垃圾对象。创建和销毁的资源的开销是相当大的。

 

String类在字符串连接时的效率很低,因为它所产生的对象的属性是不能修改的,连接字符串时就只能创建新的对象。

 

对于很多的字符串连接,应当使用StringBuffer类或者是StringBuilder,使用这个类的对象来进行字符串连接时,不会有多余的中间对象生成,优化了效率。

例:

上边的字符串连接如果使用StringBuffer如下的写法

public class TestString{

     public static void main(String[] args){

         String str=“a”+“b”+”c”;

/*

以上创建String对象str时会创建1个中间String对象“ab”

如果使很多字符串相连就是穿件出许多的中间对象

         */

         StringBuffer str=new StringBuffeter();

        //使用StringBuffer就不会有中间对象生成

str.append(“a”);

str.append(“b”);

str.append(“c”);

String strs=str.toString();

 

     }

}

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics