15.静态变量和实例变量的区别
静态变量
静态变量由于不属于任何实例对象,属于类的,所以在内存中只会有一份,在类加载过程中,JVM只为静态变量分配一次内存空间。
实例变量
每次创建对象,都会为每个对象分配成员变量内存空间,属于实例对象,在内存中,创建几次对象,就有几份成员变量。
16.什么是内部类?
在Java中,可以把一个类的定义放在另一个类的定义内部,这就是内部类,本身是类的一个属性
-
非静态内部类:它有访问外部类成员的权限,要访问内部类,需要先实例化外部类,在创建内部类对象来实现。
-
私有内部类:内部类可以用private或protected修饰,如果不希望内部类被外部类访问,可以使用private修饰。
-
静态内部类:用static关键字修饰,我们不需要创建外部类来访问,可以直接访问静态内部类,但是无法访问外部类成员
17.在使用HashMap时,用String作为key有什么好处?
HashMap内部实现是通过key的hashCode来确定value的存储位置,因为String的字符序列是不可变的,所以当创建字符串时,它的hashCode就被缓存下来,不需要重新计算,效率更快。
18.Java中的IO流分为几种?
按照流的流向分,分为输入流和输出流,按照操作单元分,分为字节流和字符流,按照流的角色划分,分为节点流和处理流。java io流涉及几十多种类,但都是从下面四个抽象类基类中派生出来的
- InputStream/Reader:所有的输入流的基类,前者是字节输入流,后者是字符输入流。
- OutputStream/Writer:所有的输出流基类,前者字节输出流,后者字符输出流。