背景:最近在做一个项目,为了保证前台风格的统一,前台选用的是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内部类的一些注意事项的更多相关文章

  1. Java内部类使用注意事项

    Java内部类使用注意事项: 1. 非静态内部类成员可以访问外部类实例成员 (如注释1),但外部类访问非静态内部类的成员 必须创建非静态内部类对象来访问其成员,如注释2 public class La ...

  2. Java内部类final语义实现

    本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...

  3. Java内部类详解

    Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...

  4. 黑马----JAVA内部类

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA内部类 一.内部类分为显式内部类和匿名内部类. 二.显式内部类 1.即显式声明的内部类,它有类名. 2.显 ...

  5. java 内部类 *** 最爱那水货

    注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...

  6. java内部类和匿名内部类

    内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...

  7. Java内部类小程序(成员内部类,静态内部类,匿名内部类)

    /** * 测试java内部类(成员内部类,静态内部类,匿名内部类) * 局部内部类不常用,就不写了. * @package :java05 * @author shaobn * @Describe ...

  8. [转] Java内部类详解

    作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  9. java内部类的作用分析

    提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...

随机推荐

  1. 11月15Sprint计划会议及内容·

    今天对整体设计做了明确的规划 工作分配: 1规划 2规则制定 3窗体设计 4模型设计 5代码编写 6美化 7产品交付 8后期宣传 王超群前四项 吕浩宇后四项

  2. HDU 2561

    F - 第二第二 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Prac ...

  3. (4)django的新手三件套(返回页面、返回字符、重定向)

    from django.shortcuts import render,HttpResponse,redirect 新手三件套,前期开发都会用到 render   #向浏览器返回页面 HttpResp ...

  4. LeetCode – Smallest Rotation with Highest Score

    Given an array A, we may rotate it by a non-negative integer K so that the array becomes A[K], A[K+1 ...

  5. 配置文件schema约束

    解释:https://blog.csdn.net/zh15732621679/article/details/79074380 操作:https://blog.csdn.net/lhg_55/arti ...

  6. 关于Spring IOC的学习和理解

    面向对象——三层架构(表现层.业务层.持久层) 三层架构:即表现层.业务层.持久层. ① 持久层:采用DAO模式,建立实体类和数据库表映射(ORM映射).也就是哪个类对应哪个表,哪个属性对应哪个列.持 ...

  7. msyql开启慢查询以及分析慢查询

    慢查询的用途是用来发现执行时间长的查询语句,以便对这些语句进行优化 [mysqld] #在这里面增加,其它地方无效 #server-id=1 #log-bin=master-bin slow_quer ...

  8. MySQL InnoDB Engine--缓冲器数据交换

    通常情况下,缓冲池无法将整个数据库所有数据都进行缓冲,而且不同数据的访问频率不一样,有些数据会被频繁访问,而有些数据可能数月不会被访问一次,因此数据库使用最近最少使用LRU latest Recent ...

  9. 使用 pkg 打包分发 nodejs 应用

    pkg 是一个很不错的跨平台 nodejs 应用打包工具,使用此工具,我们只需要给与用户提供一个简单的 可执行文件就可以了,同时代码也是二进制的,提高了代码的安全性 备注:测试demo 很简单,也比较 ...

  10. Makefile introduction (very old presentation)