精华内容
下载资源
问答
  • java内部类有什么好处?为什么需要内部类?...由于内部类对外部类的所有内容都可访问的,所以这样做可以完成所有你直接实现这个接口的功能。  不过你可能要质疑,更改一下方法的不就行了吗?  

    java内部类有什么好处?为什么需要内部类?

         首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你 可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能。

         不过你可能要质疑,更改一下方法的不就行了吗?

         的确,以此作为设计内部类的理由,实在没有说服力。

         真正的原因是这样的,java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题——没有多继承。实际上,C++的多继承设计起来很复杂,而java通过内部类加上接口,可以很好的实现多继承的效果。
    ------------------------------------------------------------------------------------------------------------------------------------------------

    如果没有final的话,那么内部类使用的外部类局部变量要用哪个值呢?
    使用内部类经常是用在Listener这样的。
    而Listener中的监听函数被调用时,大部分情况,new内部类所在的函数早就执行完了,此时外部类局部变量早就不存在了。

    而加上final后,编译器是这样处理内部类的。如果这个外部局部变量是常量,则在内部类代码中直接用这个常量。如果是类的实例,则编译器将产生一个内部类的构造参数,将这个final变量传到内部类里,这样即使外部局部变量无效了,还可以使用。

    另外引用别人的一段话:
    内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。 
    这样理解就很容易得出为什么要用final了,因为两者从外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影响到原参数,然而这样却失去了参数的一致性,因为从编程人员的角度来看他们是同一个东西,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是final来规避这种莫名其妙错误的存在。

    展开全文
  • 形式参数是局部变量局部变量中基础数据类型的引用和值都存储在栈中,对象引用存在栈中,对象存在堆中。栈内存中的局部变量随着方法的消失而消失。 成员变量存储在堆中的对象里面,由垃圾回收器负责回收。 ...

    首先说明,"Java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的。

    对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。 形式参数是局部变量,局部变量中基础数据类型的引用和值都存储在栈中,对象引用存在栈中,对象存在堆中。栈内存中的局部变量随着方法的消失而消失。 成员变量存储在堆中的对象里面,由垃圾回收器负责回收。 如以下代码:

    classBirthDate {private intday;private intmonth;private intyear;public BirthDate(int d, int m, inty) {

    day=d;

    month=m;

    year=y;

    }//省略get,set方法………

    }public classTest {public static voidmain(String args[]) {int date = 9;

    Test test= newTest();

    test.change(date);

    BirthDate d1= new BirthDate(7, 7, 1970);

    }public void change(inti) {

    i= 1234;

    }

    }

    对于以上这段代码,date为局部变量,i,d,m,y都是形参为局部变量,day,month,year为成员变量。下面分析一下代码执行时候的变化:

    1.main方法开始执行:int date = 9; date局部变量,基础类型,引用和值都存在栈中。

    2.Test test = new Test();test为对象引用,存在栈中,对象(new Test())存在堆中。

    3.test.change(date); i为局部变量,引用和值存在栈中。当方法change执行完成后,i就会从栈中消失。

    4.BirthDate d1= new BirthDate(7,7,1970); d1为对象引用,存在栈中,对象(new BirthDate())存在堆中,其中d,m,y为局部变量存储在栈中,且它们的类型为基础类型,因此它们的数据也存储在栈中。day,month,year为成员变量,它们存储在堆中(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。

    5.main方法执行完之后,date变量,test,d1引用将从栈中消失,new Test(), new BirthDate()将等待垃圾回收。

    efead3f489456f6f610bab6e16a6ec99.png

    展开全文
  • 首先说明,"Java中的基本... 形式参数是局部变量 局部变量中 基础数据类型的引用 和值都存储在栈中 局部变量中 对象引用存在栈中,对象实例存在堆中 栈内存中的局部变量随着方法的消失而消失。 成员变量存储在...

    首先说明,"Java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的。

    对于成员变量和局部变量:

    • 成员变量就是方法外部,类的内部定义的变量
    • 局部变量就是方法或语句块内部定义的变量

    局部变量必须初始化。 形式参数也是局部变量

    • 局部变量中 基础数据类型的引用 和 值 都存储在栈中
    • 局部变量中 对象引用存在栈中对象实例存在堆中

    栈内存中的局部变量随着方法的消失而消失。 成员变量存储在堆中的对象里面,由垃圾回收器负责回收。

     

    如以下代码:

    class BirthDate {
        private int day;
        private int month;
        private int year;
    
        public BirthDate(int d, int m, int y) {
            day = d;
            month = m;
            year = y;
        }
        // 省略get,set方法………
    }
    
    public class Test {
        public static void main(String args[]) {
            int date = 9;
            Test test = new Test();
            test.change(date);
            BirthDate d1 = new BirthDate(7, 7, 1970);
        }
    
        public void change(int i) {
            i = 1234;
        }
    }

    对于以上这段代码,date为局部变量,i,d,m,y都是形参为局部变量,day,month,year为成员变量。下面分析一下代码执行时候的变化:

    1.main方法开始执行:int date = 9; date局部变量,基础类型,引用和值都存在栈中。

    2.Test test = new Test();test为对象引用,存在栈中,对象(new Test())存在堆中。

    3.test.change(date); i为局部变量,引用和值存在栈中。当方法change执行完成后,i就会从栈中消失。

    4.BirthDate d1= new BirthDate(7,7,1970); d1为对象引用,存在栈中,对象(new BirthDate())存在堆中,其中d,m,y为局部变量存储在栈中,且它们的类型为基础类型,因此它们的数据也存储在栈中。day,month,year为成员变量,它们存储在堆中(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。

    5.main方法执行完之后,date变量,test,d1引用将从栈中消失,new Test(), new BirthDate()将等待垃圾回收。

     

     

    成员变量: 

        定义位置:在方法外,类体中。

        成员变量存储在堆中。

        默认值:有默认值,在构造器中可以不对成员变量进行初始化。

        生命周期:从对象实例化开始,到对象被GC垃圾回收为止。

    局部变量:   

         定义位置:在方法内(包括小括号里边的形参)

         局部变量存储在栈中。

         默认值:没有默认值,使用前需要初始化。

         生命周期:从声明开始到方法结束弹栈为止。

    展开全文
  • 所以内部类中引用外面的局部变量需要final的,这样在回调的时候才能找到那个变量,而如果外围类的成员变量就不需要final的,因为内部类本身都会含有一个外围了的引用(外围类.this),所以回调的时候一定可以...

    内部类通常都含有回调,引用那个匿名内部类的函数执行完了就没了,所以内部类中引用外面的局部变量需要是final的,这样在回调的时候才能找到那个变量,而如果是外围类的成员变量就不需要是final的,因为内部类本身都会含有一个外围了的引用(外围类.this),所以回调的时候一定可以访问到。

    来自知乎http://www.zhihu.com/question/21395848

    转载于:https://www.cnblogs.com/ivywenyuan/p/4451694.html

    展开全文
  • asmlinkage 与 FASTCALL

    2011-03-06 10:21:00
    在大型C语言项目工程或者linux内核中我们都会经常... 有一定理论基础的朋友一定会肯定地回答:这些函数参数和函数内部局部变量一起被分配到了函数的局部堆栈中,真的这样吗?其实还有例外的情况: <br />
  • C学习深入学习总结

    2017-11-03 16:59:17
    2.2 static的修饰的局部变量是保存在什么地方的?全局变量哪? 5 2.3 static修饰的全局变量和函数,在其他的文件中是否可以访问?如何访问? 5 2.4 你知道staticc语言中实现封装和隐藏的利器吗?你是否经常使用? 5...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    5.18 运行时的整数值0转换为指针以后一定是空指针吗? 5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,编译器可能会自动将它转换为非零的空指针内部表示。 5.20运行时的“nullpointerassignment...
  • 本书以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存... 5.18 运行时的整数值0转换为指针以后一定是空指针...
  • 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数指定大小的参数数组? 42 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 42 声明问题 43 1.25...
  • 5.18 运行时的整数值0转换为指针以后一定是空指针吗? 5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,编译器可能会自动将它转换为非零的空指针内部表示。  5.20运行时的“nullpointerassignment...
  •  5.18 运行时的整数值0转换为指针以后一定是空指针吗? 5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,编译器可能会自动将它转换为非零的空指针内部表示。 5.20运行时的...
  •  5.18 运行时的整数值0转换为指针以后一定是空指针吗?  5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,编译器可能会自动将它转换为非零的空指针内部表示。  5.20 运行时的“null pointer ...
  • 中文名: 你必须知道的495个C语言问题 高清PDF中文版 原名: C Programming ...5.18 运行时的整数值0转换为指针以后一定是空指针吗? 5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,编译器可能会自动将...
  • 5.18 运行时的整数值0转换为指针以后一定是空指针吗? 61 5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,编译器可能会自动将它转换为非零的空指针内部表示。 62  5.20 运行时的“null pointer...
  • 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数指定大小的参数数组? 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了...
  • php高级开发教程说明

    2008-11-27 11:39:22
    选择变量名可能程序员最常做、但却想得最少的。如果你已建立了这些在大项目中出现 的变量名字、类型、定义位置的清单,那么你就创建了一个类似于小电话簿的东西,你想让你 的清单成为什么样子呢?不同的命名方案已...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    内容简介 《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个...5.18 运行时的整数值0转换为指针以后一定是空指针吗? 61 5.19...
  • NULL 可以确保 0, 但空 (null) 指针却不一定? o 6.11 为什么有那么多关于空指针的疑惑?为什么这些问题如此经常地出现? o 6.12 我很困惑。我就是不能理解这些空指针一类的东西。 o 6.13 考虑到有关空指针的...
  • java 面试题 总结

    2009-09-16 08:45:34
    Static Nested Class被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。 22、JSP中动态INCLUDE与静态INCLUDE的区别? 动态INCLUDE用jsp:...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    老资源。 目录 1 声明和初始化1 ...NULL 可以确保0, 但空(null) 指针却不一定? . . 24 5.11 为什么有那么多关于空指针的疑惑?为什么这些问题如此经常地 出现? . . . . . . . . . . . . . . . . . . . ...
  • java面试宝典

    2013-02-28 16:04:01
    21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底值传递还是引用传递? 10 22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底值传递还是引用传递? 10 22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,...
  • LINGO软件的学习

    2009-08-08 22:36:50
    为此,LINGO为用户提供了两个可选部分:输入集成员和数据的数据部分(Data Section)和为决策变量设置初始值的初始部分(Init Section)。 3.1 模型的数据部分 3.1.1 数据部分入门 数据部分提供了模型相对静止部分...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 6.3 小 结 .56 第七章 表 达 式 .58 7.1 操 作 符 .58 ...
  • 2.1.3 全局变量和局部变量在内存中是否有区别?如果有,什么区别? 2.1.4 什么平衡二叉树? 2.1.5 堆栈溢出一般由什么原因导致的? 2.1.6 什么函数不能声明为虚函数? 2.1.7 冒泡排序算法的时间复杂度...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

局部变量一定是内部参数吗