1.下列说法正确的是(A B)
A.JAVA程序的main方法必须写在类里面
B.JAVA程序中可以有多个名字为main方法
C.JAVA程序中类名必须与文件名一样
D.JAVA程序的main方法中,如果只有一条语句,可以不用{}(大括号)括起来
笔记:
A. java是强类型语言,所有的方法必须放在类里面,包括main
B. java中可以有多个重载的main方法,只有public static void main(String[] args){}是函数入口
C. 内部类的类名一般与文件名不同
D. 函数都必须用{}括起来,不管是一条语句还是多条语句
2.关于JAVA堆,下面说法错误的是(C)
A.所有类的实例和数组都是在堆上分配内存的
B.堆内存由存活和死亡的对象,空闲碎片区组成
C.数组是分配在栈中的
D.对象所占的堆内存是由自动内存管理系统回收
笔记:
Java 把内存划分成两种:一种是栈内存,另一种是堆内存。
栈式存储:
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。
优点:存取速度比堆要快,仅次于寄存器,栈数据可以共享。
缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
堆式存储:
堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。
优点:堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。
缺点是:由于要在运行时动态分配内存,存取速度较慢。
比如说int[] arr = new int[3]。空间分布是这样子的。
所以这句话其实应该改为,数组的引用存在栈内存中,而数组对象保存在堆里面。
3. 方法调用时,会创建栈帧在栈中,调用完是程序自动出栈释放,而不是gc释放
Java 的垃圾回收器(GC)主要针对堆区
4. 下面有关 JAVA 异常类的描述,说法正确的有()
A.异常的继承结构:基类为 Throwable,Error 和 Exception 继承 Throwable,RuntimeException 和 IOException 等继承 Exception
B.非 RuntimeException 一般是外部错误(不考虑Error的情况下),其必须在当前类被 try{}catch 语句块所捕获
C.Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形,Error 不需要捕捉
D.RuntimeException 体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须 被 try{}catch 语句块所捕获
笔记:
都是Throwable的子类:
- 1.Exception(异常) :是程序本身可以处理的异常。
- 2.Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。
- 3.检查异常(编译器要求必须处置的异常) : 除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
- 4.非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)
5. ArrayLists和LinkedList的区别,下述说法正确的有(A B C D)
A.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
B.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
C.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
D.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。