0%

该类用来将文件文件夹封装成对象,方便对文件和文件夹的属性信息进行操作。

1. 对象的创建与删除

可以使用File类创建一个文件对象,通常使用以下3种构造方法来创建文件对象。

  • File(String pathname)
  • File(String parent, String child);
  • File(File f, String child);
阅读全文 »

1. 总体结构

在这里插入图片描述
由于字节流操作中文不是特别方便,所以,java就提供了转换流。其中字符流就是字节流+编码表。字符流的两个顶层父类为Reader和Writer,分别用于字符流的读取和写入。下面分别来简单地介绍这些流的用法。

阅读全文 »

在Java中有种动态代理技术,比如JDK,CGLIB,Javassist,ASM,其中最常用的动态代理有两种:一种JDK动态代理,这是JDK自带的功能;另一种CGLIB,这是第三方提供的一个技术。目前,Spring常用JDK和CGLIB,而MyBatis还使用了Javassist,无论哪种代理其技术和理念都是相似的。

下面讲一下常用的JDK动态代理和CGLIB动态代理。

阅读全文 »

1. 含义

final 表面意思就是不可更改的,恒量的意思。final 修饰的变量与静态变量是有所不同的,静态变量指的是只有一份存储空间,值是可以改变的,而 final 修饰的变量是不可更改的。

2. 修饰类

当用 final 修饰一个类时,表明这个类不能被继承。其中,final 类中的所有成员方法都会被隐式地指定为 final 方法,而 final 类中的成员属性则不会有隐式的 final 修饰,这也恰恰说明 final 类的成员变量是可以更改的。

阅读全文 »

1. 静态方法

在 Java 8 中,允许在接口中增加静态方法。理论上讲,这是合法的,只是这有违于将接口作为抽象的初衷。

目前为止,通常的做法是将静态方法放在伴随类中,比如标准库中,有成对出现的接口和对应工具类,如Path/Paths,Colletion/Collections。

比如我们可以在 Path 接口增加 Paths 实现类中的一些方法,如如下 get 方法:

阅读全文 »

1. Lambda 表达式入门

Lambda 表达式支持将代码块作为方法参数, Lambda 表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例。

阅读全文 »

通配符有如下三种:

  • 无限定通配符,形式<?>
  • 上边界限定通配符,形式< ? extends Number> //用Number举例
  • 下边界限定通配符,形式< ? super Number> //用Number举例
阅读全文 »

1. Java泛型的实现方法:类型擦除

前面已经说了,Java 的泛型是伪泛型。为什么说 Java 的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦出(type erasure)。

Java 中的泛型基本上都是在编译器这个层次来实现的。在生成的 Java 字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器编译的时候去掉。这个过程就称为类型擦除。

如在代码中定义的 List<object> 和 List<String> 等类型,在编译后都会变成 List。JVM 看到的只是 List,而由泛型附加的类型信息对 JVM 来说是不可见的。Java 编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。类型擦除也是 Java 的泛型实现方法与 C++ 模版机制实现方式之间的重要区别。

阅读全文 »

1. 泛型的基本概念

泛型的定义:泛型是 JDK 1.5 的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数,在用到的时候再指定具体的类型。这种参数类型可以用在类、接口和方法的创建,分别称为泛型类、泛型接口和泛型方法。

阅读全文 »