æ level
获赞
18
粉丝
1
关注
1
看过 TA
3
西安电子科技大学
2021
Java
IP属地:陕西
暂未填写个人简介
私信
关注
2017-02-18 14:57
已编辑
西安电子科技大学 Java
本人大三在校生,安卓小菜,打算找暑期实习,之前向美图发过简历,昨晚接到电话面试。 这次发现自己的确基础太差,很多东西自己是写过用过的,但是一细究,就发现自己从来没有去思考,有的基本内容之前了解,也都忘记了。而且自己很紧张,也是第一次面试没经验,全程智商掉线,问的都是安卓和java的基础性问题,但是答的一塌糊涂,这里贴出来,自己温习下也让大家了解下。 因为在简历里自己写了在校开发的几个项目,所以一开始让介绍一个自己认为比较好的,说一下其中遇到的技术问题和解决方法。 然后对安卓基础开始考察。大概有这些。 1.singleTask是否了解,举一个它的使用场景,后续问到会调用的方法。...
小风筝0010:匿名内部类使用局部变量的要求。为什么要是final的? 这是一个编译器设计的问题,如果你了解java的编译原理的话很容易理解。   首先,内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件中。   当外部类传的参数被内部类调用时,从java程序的角度来看是直接的调用例如:   public void dosome(final String a,final int b){     class Dosome{public void dosome(){System.out.println(a+b)}};     Dosome some=new Dosome();     some.dosome();   }   从代码来看好像是那个内部类直接调用的a参数和b参数,但是实际上不是,在java编译器编译以后实际的操作代码是   class Outer$Dosome{     public Dosome(final String a,final int b){     this.Dosome$a=a;     this.Dosome$b=b;   }     public void dosome(){     System.out.println(this.Dosome$a+this.Dosome$b);   }   }}   从以上代码看来,内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。   这样理解就很容易得出为什么要用final了,因为两者从外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影响到原参数,然而这样却失去了参数的一致性,因为从编程人员的角度来看他们是同一个东西,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是final来规避这种莫名其妙错误的存在。”  (简单理解就是,拷贝引用,为了避免引用值发生改变,例如被外部类的方法修改等,而导致内部类得到的值不一致,于是用final来让该引用不可改变)
投递美图秀秀等公司10个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务