Java内部类的一些注意事项
背景:最近在做一个项目,为了保证前台风格的统一,前台选用的是GWT框架。GWT通过回调的方式向后台取得数据,在前台展示,因此很多的赋值操作只能在回调函数中通过set方法来实现。我的目的是从后台读取一个配置文件的值,然后根据该配置文件的值呈现不同的页面视图。
1. 类的成员变量如果在未赋值时使用,会被赋默认值;而方法中的局部变量,如果未赋值则会编译错误。
2. 局部内部类和匿名内部类只能访问局部final变量。这是因为内部类或匿名类可以和它所处于的方法具有不同的生命周期,只能访问局部final变量的目的有二: 其一, 如果局部内部类或匿名内部类仍未消亡,而调用该内部类的方法可能已经退出,则该方法的局部成员变量所在的内存区已经被释放,那么内部类将不能访问到该局部成员变量,而如果该局部成员变量为final类型,则在内存中会保存一份该变量的拷贝;其二, 因为内部类可以访问方法中的局部变量,那么如果内部类对方法中的局部变量进行了修改,则会造成数据不一致的问题,为了避免这种事情,Java设置了内部类只能访问final类型的局部变量。
3.局部内部类只能访问外部类中的静态全局变量和静态方法。我个人理解的这个原因是因为,Java的底层毕竟是采用C来实现的,回调函数是基于C编程的Windows SDK的技术,成员函数都隐含了一个传递函数作为参数,亦即“this”指针,通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问类的的全局数据成员,这也可以理解为什么Java类的多个实例可以共享成员函数但是确有不同的数据成员。而回调函数中的this,指向的是回调函数本身的对象,而不是外部类对象,因此不能访问到外部类中的全局变量和方法。使用静态成员函数,静态成员函数不使用this指针作为隐含参数,这样就可以作为回调函数了。静态成员函数具有两大特点:其一,可以在没有类实例的情况下使用;其二,只能访问静态成员变量和静态成员函数,不能访问非静态成员变量和非静态成员函数。(在我的应用实例中,我原本采用了将set方法设为静态方法,将需要被赋值的全局变量也设为静态成员变量的方式来达到目的,后来感觉这样开销太大)
4.静态方法中不能使用this对象,这点应该不用再解释了吧。
5.使用内部类的好处有:
a.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整,
b.方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏。
c.方便编写事件驱动程序
d.方便编写线程代码
参考了http://www.cnblogs.com/dolphin0520/p/3811445.html
Java内部类的一些注意事项的更多相关文章
- Java内部类使用注意事项
Java内部类使用注意事项: 1. 非静态内部类成员可以访问外部类实例成员 (如注释1),但外部类访问非静态内部类的成员 必须创建非静态内部类对象来访问其成员,如注释2 public class La ...
- Java内部类final语义实现
本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- 黑马----JAVA内部类
黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA内部类 一.内部类分为显式内部类和匿名内部类. 二.显式内部类 1.即显式声明的内部类,它有类名. 2.显 ...
- java 内部类 *** 最爱那水货
注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...
- java内部类和匿名内部类
内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...
- Java内部类小程序(成员内部类,静态内部类,匿名内部类)
/** * 测试java内部类(成员内部类,静态内部类,匿名内部类) * 局部内部类不常用,就不写了. * @package :java05 * @author shaobn * @Describe ...
- [转] Java内部类详解
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- java内部类的作用分析
提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...
随机推荐
- 九度OJ1111题-单词替换
题目1111:单词替换 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6752 解决:1891 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组 ...
- 动态开点线段树(陕西师范18k题)---get new skill
思想: 每次开点的时候:左右孩子都开辟新空间 注意懒惰标记tag: 因为会向下传递 提前在值中减去懒惰标记,避免重复计算 链接:https://www.nowcoder.com/acm/ ...
- 2017.5.11 MapReduce运行机制
和HDFS一样,MapReduce也是采用Master/Slave的架构 MapReduce1包含4个部分:Client.JobTracker.TaskTracker和Task Client 将JAR ...
- UE4开发安卓遇到的坑
做个记录,方便以后自己查询. 1. 打包后,应用出现缺乏google key的问题. 理论上,这个网站可以解决:https://wiki.unrealengine.com/How_To_Sign_U ...
- Eclipse使用Maven时出现:Index downloads are disabled, search results may be incomplete.问题解决
https://www.cnblogs.com/EasonJim/p/6674099.html 1.全局设置 [Windows]->[Preferences]->[Maven]->勾 ...
- 【添加tomcat里lib下的jar包】eclipse中The project cannot be built until build path errors are resolved
问题描诉:在eclipse中新建了一个web项目,把myeclipse中正常的项目拷贝到eclipse的src和webcontent目录 然后项目中就出现了× 注意项目中Errors
- doubleclick video notes
1,vast duration it must math this format ,if use “00:00:7 ” it will tip “ ” <Duration>00:00:0 ...
- golang json html escape unicode
https://play.golang.org/p/FAH-XS-QMC https://github.com/gin-gonic/gin/issues/693 package main import ...
- C语言函数指针的使用
使用函数指针时一定要注意,因为c不会检查参数是否正确 区分返回指针的函数和函数指针 int *f4();返回一个整数指针 int (*f5)();返回整数的函数指针 int * (*f6)();返回整 ...
- sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
sqler 在社区的响应还是很不错的,已经添加了好多数据库的连接,就在早上项目的包管理还没有写明确, 下午就已经有go mod 构建的支持了,同时也调整下docker 镜像的构建,直接使用git cl ...