java基础知识学习日记5

25、对于局部成员而言,不管是局部变量还是局部内部类,它们的上一级程序单元都是方法,而不是类,使用static修饰它们没有任何意义。因此所有的局部成员都不能使用static修饰,不仅如此,因为局部成员的作用域是所在方法,其他程序单元永远也不可能访问另一个方法中的局部成员,所以所有的局部成员都不能使用访问控制符修饰。

26、关于匿名内部类还有如下两条规则。匿名内部类不能是抽象类,因为系统在创建匿名内部类时,会立即创建匿名内部类的对象。匿名内部类不能定义构造器。由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义初始化块,可以通过实例初始化块来完成构造器需要完成的事情。

27Lambda表达式由三部分组成。形参列表。形参列表允许省略形参类型。如果形参列表只有一个参数,甚至连形参列表的圆括号都可以省略。箭头(->)。代码块。如果代码块只有一条语句,Lambda表达式允许省略代码块的花括号,那么这条语句就不要用花括号表示结束。

28Lambda表达式类型,也被称为目标类型,Lambda表达式的目标类型必须是函数式接口。函数式接口代表只包含一个抽象方法的接口。函数式接口可以包含多个默认方法、类方法,但只能声明一个抽象方法。

29Lambda有两个限制。①Lambda表达式的目标类型必须是明确的函数式接口。②Lambda表达式只能为函数式接口创建对象。Lambda表达式只能实现一个方法,因此它只能为只有一个抽象方法的接口创建对象。

30、为了保证Lambda表达式的目标类型是一个明确的函数式接口,有如下几种常见的方式。Lambda表达式赋值给函数式接口类型的变量。Lambda表达式作为函数式接口类型的参数传给某个方法。使用函数式接口对Lambda表达式进行强制类型转换。

31、同样的Lambda表达式的目标类型完全可能是变化的-----唯一的要求就是,Lambda表达式实现的匿名方法与目标类型中唯一的抽象方法有相同的形参列表。

32Lambda表达式与匿名内部类存在如下相同点。①Lambda表达式与匿名内部类一样,都可以直接访问“effectively final”的局部变量,以及外部类的成员变量。②Lambda表达式创建的对象与匿名内部类生成的对象一样,都可以直接调用从接口中继承的默认方法。

33Lambda表达式与匿名内部类主要存在如下区别。匿名内部类可以为任意接口创建实例----不管接口中包含多少个抽象方法,只要匿名内部类实现所有的抽象方法即可,但Lambda表达式只能为函数式接口创建实例。匿名内部类可以为抽象类甚至是普通类创建实例,但Lambda表达式只能为函数式接口创建实例。匿名内部类实现的抽象方法的方法体允许调用接口中的默认方法,但Lambda表达式不行。

34、枚举类和普通类之间的区别。枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显示继承其他类。使用enum定义、非抽象的枚举类时会默认使用final修饰,因此枚举类不能派生子类。枚举类的构造器只能使用private访问控制符,如果省略了访问控制符,则默认使用private修饰,如果强制指定访问控制符,则只能指定private访问控制符。枚举类的所有实例必须在第一行显示列出,否则这个枚举类永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无需显示添加。

35、垃圾回收机制具有如下特征。垃圾回收机制只负责回收堆内存中的对象,不会回收任何物力资源。程序无法精确的控制垃圾回收的运行,垃圾回收会在合适的时候进行。当对象永久性的失去引用后,系统就会在合适的时候回收它所占的内存。在垃圾回收机制回收任何对象之前,总会调用它的finalize()方法,该方法可以使对象重新复活,从而导致垃圾回收机制取消回收。

36、当一个对象在堆内存中运行时,根据它被引用变量所引用的状态,可以把它所处的状态分为如下三种。可达状态:当一个对象被创建后,若有一个以上的引用变量引用它,则这个对象在程序中处于可达状态,程序可通过引用变量来调用该对象的实例变量和方法。可恢复状态:如果程序中某个对象不再有任何引用变量引用它,它就进入可恢复状态,在这种状态下,系统的垃圾回收机制准备回收该对象所占用的内存,在回收该对象之前,系统会调用所有可恢复状态的finalize()方法进行资源清理。如果系统在调用finalize()方法时重新让一个引用变量引用该对象,则这个对象会再次变为可达状态,否则对象将进入不可达状态。不可达状态:当对象和所欲引用变量的关联都被切断,且系统已经调用所有对象的finalize()方法后依然没有使对象变成可达状态,那么这个对象将永久的失去引用,最后变成不可达状态。只有当一个对象处于不可达状态时,系统才会真正回收该对象所占有的资源。

37finalize()方法具有如下4个特点:永远不要主动调用某个对象的finalize()方法,该方法应该交给垃圾回收机制调用。②finalize()方法何时被调用,是否被调用具有不确定性,不要把finalize()方法当成一定会被执行的方法。JVM执行可恢复对象的finalize()方法时,可能使该对象或系统中其他对象重新变成可达状态。JVM执行finalize()方法时出现异常,垃圾回收机制不会报告异常,程序继续执行。

384个访问控制符是互斥的,最多只能出现其中之一。不仅如此,还有abstractfinal永远不能同时使用,abstractstatic不能同时修饰方法,可以同时修饰内部类,abstractprivate不能同时修饰方法,可以同时修饰内部类。privatefinal同时修饰方法虽然是合法的,但没有太大意义。

39JAR文件的好处。安全。能够JAR文件进行数字签名,只让能够识别数字签名的用户使用里面的文件。加快下载速度,在网上使用Applet时,如果存在多个文件而不打包,为了能够把每个文件都下载到客户端,需要为每个文件单独建立一个HTTP连接,这是非常耗时的工作。将这些文件压缩成一个JAR包,只要建立一次HTTP连接就能够一次下载所有文件。压缩。使文件变小,JAR的压缩机制和ZIP完全相同。包装性。能够让JAR包里面的文件依赖于统一版本的类文件。可移植性。JAR包作为内嵌在java平台内部处理的标准,能够在各种平台上直接使用。

你可能感兴趣的:(java基础知识学习日记5)