final 修饰符分两种情况: 如果是修饰基本类型,如果整形,浮点型,如 final int i=100,这里的i的值是不能变的 如果修饰的是对象,如final String s = "dddd";,这里的引用是不能变的,比如你不能这样写: s = "bbbbb";但对象的值可以改变 。 在java里面,数组是被看做是一个对象的,所以这个final不能阻止通过数组下标来访问对象进行值的改变。
1:修饰变量
final修饰基本数据类型: 一旦赋值,变量的值不能修改。即Java中的常数。 例如:final int num = 10;//num在程序中不能再次被赋值,只能为10;
final修饰对象 :一旦赋值,则对象句柄不能再修改(指向其他对象)。但是对象的内容可以被修改。
所以 将对象变成final看起来似乎不如将基本数据类型变成final那么有用。
2:修饰方法
final 方法 不可以被复写, 可以被继承。
用final修饰方法可能出于两方面的考虑:
a:希望方法在程序中不被改写。
b:调用final方法时,程序采用的是“常规代码替换”,而不是跳转。所以性能会提高。但是如果代码块太大,则得不偿失,所以一般final修 饰的函数应该比较简洁短小。 ps:private方法是自动加final的; final类的方法是自动final的。
3:修饰类
final类是无法被任何人继承的。那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展 。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可 以明确的给final类中的方法加上一个final,但这显然没有意义。
new Thread( new Runnable() { @Override public void run () { byte [] bytes = HttpUtils .getHttpResult ( ViewpagerPath ) ; String json = new String( bytes, 0 , bytes.length ) ; final List < String > list = ParserJsonUtil .ParserHomeViewpagerJson ( json) ; final List < ImageView > ivlist = new ArrayList< ImageView > () ; handler .post( new Runnable() { @Override public void run () { for ( int i = 0 ; i< list .size() ; i++ ) { //byte[] imagebytes = HttpUtils.getHttpResult(list.get(i)); //Bitmap bm = BitmapFactory.decodeByteArray(imagebytes,0,imagebytes.length); ImageView iv = new ImageView( context ) ; //iv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, // ViewGroup.LayoutParams.MATCH_PARENT)); Glide .with ( context ) .load( list .get( i)) .into( iv) ; ivlist .add( iv) ; } } } ) ;