《JAVA语言程序设计》复习题总结记录

《JAVA语言程序设计》书中复习题的部分内容的整理和总结,记录学习内容和问题

1.源程序后缀java,字节码后缀.class
2.java编译器输入java源代码文件,输出class文件
3.编译java程序的命令:javac
4.运行java程序的命令:Java
5.如果运行程序出现NoClassDefFoundError,是什么原因?
Java解释器找不到.class文件。确保将文件放在正确的位置,并使用适当的包名调用java命令。
6.如果运行程序出现NoSuchMethodError,是什么原因?
类没有主方法,或者主方法的签名不正确。
7.什么是语法错误(编译错误),运行时错误以及逻辑错误?
8.编译器检测到语法错误。运行时错误发生在程序执行期间。逻辑错误会导致错误的结果。
9.命名习惯:类名第一个字母大写,变量和方法名第一个字母小写,后续单词的第 一个字母大写,常量所有字母大写
10.double 转int 小数部分,小数部分被截断。
11.不能声明为int再声明为double
12.什么是整数溢出,浮点数操作会溢出么?
数字以有限的数字存储。当给变量分配的值太大(规模)而无法存储时,它会导致溢出。浮点操作不会导致溢出
13. 取整错误是什么?整数操作会导致取整错误么?浮点数操作会导致取整错误么?
取整错误也称为舍入误差,是计算的近似值与其精确的数学值之间的差值。整数运算不会导致舍入错误。浮点运算可能导致舍入错误。(不可避免)
14.Math.rint 取整最接近的整数(距离相等取偶数)ceil向上取整,floor向下取整(取小的),取整都是返回双精度(2.0)。
15.为什么Math类不需要导入
Math类在java.lang包中。java.lang包中的任何类都将自动导入。所以不需要显式地导入它。
16…基本数据类型 不能用new创建
17.当使用空引用变量访问对象的成员时,会发生NullPointerException
18.数组是一个对象。数组可以包含对象类型的元素。数组元素的默认值为0表示数值,false表示布尔值,“\u0000”表示字符,null表示对象元素类型。
19.布尔类型默认值false(没想到吧)
20.类名不能调用非静态方法,对象都可以
21.静态方法不能调用实例方法也不能引用实例对象,可以调用静态方法也可以引用静态变量。
22.this 和super 构造函数的调用要放在第一行
23.类之间的常见关系是关联、聚合、组合和继承。
24.限定字符串的知识,字符串对象和字符串的引用的区别。
25.String类中没有能改变字符串内容的方法
26.构造函数没有类型
27.StringBuffer中的更新方法是同步的
28.字符串和字符串缓冲区都使用数组保存字符。字符串中的数组在创建字符串后即固定不包边。如果缓冲区容量更改,则字符串缓冲区中的数组可能会更改。为了适应更改,将创建一个新数组。
29.子类可以使用super关键字显式调用suplerclass的构造函数。
30.能重写私有方法(都不能访问到)
31.不能重写父类中的静态方法,如果子类中重新定义了这个静态方法,那么父类的静态方法会被隐藏,可以使用父类名.方法名调用隐藏的静态方法,
32.使用super()或super(args)。此语句必须是子类的构造函数中的第一个。
33.使用super.method()或super.method(args)。如果有重写,子类调用被重写的父类方法。
34.方法重载定义类中同名的方法。方法重写修改在父类中定义的方法。
35.子类父类方法签名相同,返回类型不同,会报语法错误
36.子类父类方法名相同,参数类型不同是重载。
37.使用@override标注的好处是强制编译器检查重写方法的签名,以确保该方法定义正确。
38.动态绑定(在继承的方法链上调用哪个方法由JVM根据实际类型决定,而不是声明类型)
39.多态性意味着父类型的变量可以引用子类型对象。一个方法可以在继承链上的几个类中实现。JVM决定在运行时调用哪个方法。这称为动态绑定
40.匹配方法签名和绑定方法实现是两个独立的问题。引用变量的声明类型决定编译时要匹配的方法。编译器根据参数类型、参数数量和编译时参数的顺序来查找匹配方法。一个方法可以在几个子类中实现。JVM在运行时动态绑定方法的实现,由变量引用的对象的实际类决定。
41.不能将new int[50]赋给Object[]类型的变量,但new Integer[50]、new String[50]或new Object[50]可以。
42.构造,先调用父类构造方法,不显式就是无参数构造方法,然后调用子类。
43.使用异常处理的优点:它使方法能够向调用方抛出异常。调用方可以处理此异常。如果没有此功能,被调用的方法本身必须处理异常或终止程序。通常被调用的方法不知道如何处理异常。所以它需要将异常传递给调用方进行处理。
44.catch异常之后继续执行catch之后的语句。
45.Throwable类是Java异常类的根。Error and Exception是Throwable的子类。Error描述了致命的系统错误,Exception描述了Java程序可以处理的错误。Error的子类是LinkageError、VirtualMachineError和AWTError。 Exception的子类包括RuntimeException、IOException、AWTException和InstantiationException。
46.声明异常的目的:是告诉Java运行时系统可能会出错。在方法声明中使用throws关键字声明异常。可以声明多个异常,用逗号分隔。
47.必检异常,免检异常。
如果方法抛出必检的异常,则必须在方法声明中显式声明该异常。必须在try catch块中捕获异常。免检的异常不需要声明,也不需要捕获。在Java中,唯一免检的异常是RuntimeException和Error及其子类。在方法中使用throw语句抛出异常。不能在一个throw语句中引发多个异常。
48.throw用于抛出异常,throws用于声明异常。
49.try中遇到异常不会继续执行,会转到catch执行,然后执行catch之后的语句,如果未被捕获,后面都不执行。finally一定执行。
50.子函数捕获异常之后,外部的函数不会再次捕获该异常。(除非链式抛出)
51.除了不能new对象之外,抽象类可以和非抽象类一样使用
52.抽象类可以被继承
53.子类可以将父类中的具体方法重写,并且定义为抽象。
54.抽象方法必须是非静态的
55.接口不能new创建实例
56.接口可以声明一个引用变量A x;
57.接口的方法只声明。
58.接口中定义的所有方法都是公共的。当类实现接口时,该方法必须声明为public。能见度不能降低。
59.如果一个类实现了Comparable 那么该类的对象可以调用compareTo方法
60.创建新引用和克隆的区别,克隆是一个新对象,引用是同一个对象
61.接口被编译为独立的字节码文件
62.关闭流可以确保将数据写入文件。 关闭流会释放流对象获取的资源。
63.由于与CPU处理速度相比,涉及I/O设备的物理输入和输出通常非常慢,因此可以使用缓冲的输入/输出流来提高性能。您可以通过在input stream/Reader的任何实例上包装BufferedOutputStream/BufferedReader来创建缓冲输入流,并通过在BufferedOutputStream/Writer的任何实例上包装BufferedOutputStream/BufferedWriter来创建缓冲输出流。
64.Collection接口扩展了Iterable接口。可以使用iterator()方法获取迭代器。
65.使用next()方法。从迭代器得到合集中的一个元素
66.可以使用foreach方法来循环遍历任何colllection实例中的元素
67.ArrayList和LinkedList可以类似地操作。它们之间的关键区别在于它们的内部实现,这会影响性能。ArrayList对于检索元素以及从列表末尾添加和删除元素非常有效。LinkedList可以有效地在列表中的任何位置添加和删除元素。
68.除trimToSize()方法外,ArrayList中的所有方法也在LinkedList中。getFirst、getLast、addFirst、addLast方法在LinkedList中,但不在ArrayList中。
69.Vector与ArrayList相同,只是Vector包含访问和修改Vector的同步方法。因为Vector实现List,所以可以使用List中的方法来添加、移除向量中的元素。
70.Stack是Vector的一个子类。Stack类表示对象的后进先出堆栈。元素只能从堆栈的顶部访问。可以从堆栈顶部检索、插入或移除元素。
71.集合是一个接口。要创建Set的实例,需要使用HashSet或TreeSet。
72.哈希集未排序,但树集已排序。如果不希望对集合中的元素进行排序,哈希集比TreeSet更有效。
73.要遍历集合,请使用迭代器方法获取迭代器。然后可以通过迭代器遍历集合。使用迭代器,只能从开始到结束顺序遍历。
74.需要无序存储无重复元素的程序用hashset
75.需要按照插入顺序来存储无重复元素 LinkedHashset
76.需要元素值升序存储无重复元素 Treeset
77.需要存储固定个数元素(可能重复)使用array(数组)
78.需要存储在线性表并且需要再末尾添加删除 ArrayList
79.需要存储在线性表并且需要经常在线性表的开始插入删除LinkedList
80.Map是一个接口。要创建Map实例,需要使用HashMap类或TreeMap类。
81.HashMap类在定位值、插入映射和删除映射方面非常有效。HashMap中的条目没有排序,但LinkedHashMap中的条目可以按照插入到映射中的顺序(称为插入顺序)或访问顺序进行检索。TreeMap类对于按排序顺序遍历键是有效的。
82.数组类型的局限性:数组是一种固定大小的数据结构。一旦创建数组,就不能更改其大小。

猜你喜欢

转载自blog.csdn.net/tianyouououou/article/details/103941875