### Java基础知识点详解 #### 1. 多个类在一个.java文件中 - **规则**:在一个`.java`源文件中可以定义多个类,但只能有一个公共类,并且该文件名必须与公共类名相同。 - **示例**:假设我们有一个名为`MainClass.java`的文件,则该文件中可以包含`MainClass`类和其他非公共类。 #### 2. Java中的`goto` - **不存在**:Java中没有`goto`关键字。`goto`在其他语言如C/C++中用于无条件跳转。 - **替代方案**:可以通过`break`和`continue`来实现类似的功能,或者使用标签化的`break`或`continue`。 #### 3. `&`和`&&`的区别 - **`&`**:位运算符,用于按位与操作;逻辑运算符,用于短路逻辑与运算。 - **`&&`**:逻辑运算符,用于短路逻辑与运算。只有当左侧表达式为真时,右侧表达式才会被计算。 #### 4. 跳出多重嵌套循环 - **解决方案**: - 使用标签来标记外层循环,然后通过`break`标签的方式跳出。 - 在循环内使用`return`或`throw`(如果适用)也可以退出。 #### 5. `switch`语句的使用 - **变化**:在Java 7之前,`switch`只能作用于`byte`、`short`、`char`和`int`。Java 7引入了对`String`的支持。 - **示例**:`switch (expression)`,其中`expression`可以是`byte`、`short`、`char`、`int`或`String`。 #### 6. `short`类型的赋值问题 - **错误**:`short s1 = 1; s1 = s1 + 1;`会编译失败,因为`+`操作符的优先级导致类型提升,结果是`int`。 - **解决方法**:使用`+=`运算符可以自动进行类型转换,如`short s1 = 1; s1 += 1;`。 #### 7. `char`类型与中文字符 - **答案**:`char`类型可以存储一个中文字符,因为Java中`char`占用2个字节,足够表示Unicode字符集中的任何字符。 #### 8. 最有效率的乘法运算 - **方法**:`2 * 8`可以替换为`2 << 3`,使用位移操作效率更高。 #### 9. 设计百亿级计算器 - **考虑因素**:数据类型的选择、算法优化、内存管理等。 - **实现思路**:使用`BigInteger`类进行大数运算。 #### 10. `final`关键字的含义 - **引用不变**:使用`final`修饰变量时,引用本身不可改变,但引用的对象可能根据其类型发生变化。 #### 11. `==`与`equals`的区别 - **`==`**:比较对象的地址,用于基本类型时比较的是值。 - **`equals`**:比较对象的内容,需重写以实现自定义比较逻辑。 #### 12. 静态变量与实例变量 - **静态变量**:属于类,所有对象共享同一个副本。 - **实例变量**:属于对象,每个对象都有独立的副本。 #### 13. 非静态方法的调用 - **限制**:静态方法无法直接访问非静态成员变量或调用非静态方法,因为静态方法在类加载时就已经存在,而实例方法需要对象实例化后才可用。 #### 14. `Integer`与`int`的区别 - **`int`**:基本数据类型,没有默认值。 - **`Integer`**:包装类,提供了许多方法用于处理整数,如解析和格式化。 #### 15. `Math.round()`函数 - **行为**:`Math.round(11.5)`结果为12,`Math.round(-11.5)`结果为-11。`Math.round()`向最接近的整数四舍五入。 #### 16. 代码不妥之处 - **示例缺失**:需要具体代码示例才能分析不妥之处。 #### 17. 访问控制修饰符 - **`public`**:全局可见。 - **`private`**:仅类内部可见。 - **`protected`**:同一包及子类可见。 - **无修饰符**:包内可见。 #### 18. `Overload`与`Override`的区别 - **`Overload`**:方法重载,允许在同一个类中声明多个同名方法,但参数列表不同。 - **`Override`**:方法重写,子类重新定义父类的方法,方法签名完全相同。 #### 19. 构造器与覆盖 - **构造器**:构造器不能被覆盖,因为它是用来初始化对象的,而不是为了继承的目的。 #### 20. 接口与抽象类 - **接口**:可以继承接口。 - **抽象类**:可以实现接口,也可以继承具体类。 - **抽象类**:可以有静态的`main`方法。 #### 21. `clone()`方法的常用代码 - **常用代码**:通常会包含`if (this instanceof Cloneable)`来检查对象是否实现了`Cloneable`接口。 #### 22. 面向对象的特征 - **封装**:隐藏对象的属性和实现细节。 - **继承**:支持类间的层次关系。 - **多态**:对象可以表现为多种类型。 - **抽象**:提供接口而不关心具体实现。 #### 23. Java中的多态机制 - **实现方式**:通过继承和接口实现。 - **示例**:一个类继承另一个类并重写父类的方法。 #### 24. 抽象类与接口的区别 - **抽象类**:可以包含具体方法、抽象方法、构造器、字段等。 - **接口**:只包含抽象方法和常量,默认为公共、抽象、最终。 #### 25. `abstract`方法与其他修饰符 - **`abstract`与`static`**:`abstract`方法不能是`static`。 - **`abstract`与`native`**:可以同时使用。 - **`abstract`与`synchronized`**:可以同时使用。 #### 26. 内部类与静态嵌套类 - **内部类**:非静态内部类可以访问外部类的所有成员,包括私有成员。 - **静态嵌套类**:只能访问外部类的静态成员。 #### 27. 内部类引用外部类成员 - **限制**:非静态内部类可以直接访问外部类的所有成员,而静态内部类只能访问外部类的静态成员。 #### 28. 匿名内部类 - **继承与实现**:匿名内部类可以实现接口,也可以继承类。 - **限制**:匿名内部类只能出现在表达式的上下文中。 #### 29. `super.getClass()`方法 - **作用**:获取父类的`Class`对象。 #### 30. `String`是不是基本数据类型 - **答案**:不是,`String`是引用类型。 #### 31. `String`对象的不可变性 - **示例**:`String s = "Hello"; s = s + " world!";`,原`String`对象未改变,创建了一个新的`String`对象。 #### 32. 继承`String`类 - **不可继承**:`String`类被声明为`final`,因此不能被继承。 #### 33. `String`对象的创建 - **示例**:`String s = new String("xyz");`创建了两个`String`对象,一个在常量池中,一个在堆中。 #### 34. `String`与`StringBuffer`的区别 - **`String`**:不可变字符串。 - **`StringBuffer`**:可变字符串,线程安全。 #### 35. 字符串转换为数组 - **方法**:使用`split()`方法,如`String[] array = str.split(",")`。 #### 36. 数组与`String`的`length` - **数组**:没有`length()`方法,而是使用`length`属性。 - **`String`**:有`length()`方法。 #### 37. 字符串连接的实例 - **创建对象数量**:`String s = "a" + "b" + "c" + "d";`创建了3个对象,因为字符串常量池中已经包含了这些字符串。 #### 38. `try`与`finally`块的执行顺序 - **执行顺序**:即使`try`块中有`return`语句,`finally`块也会被执行,且在`return`之前执行。 #### 39. 程序输出结果 - **示例缺失**:需要具体代码示例才能分析输出结果。 #### 40. `final`、`finally`与`finalize` - **`final`**:表示不可变性。 - **`finally`**:确保资源释放。 - **`finalize`**:对象销毁前的清理工作,已被废弃。 #### 41. 运行时异常与一般异常 - **运行时异常**:通常是由编程错误引起的,可以在运行时抛出。 - **一般异常**:编译时检查的异常,需要被捕获或声明抛出。 #### 42. `Error`与`Exception`的区别 - **`Error`**:严重错误,如系统故障,一般无法处理。 - **`Exception`**:可以通过程序捕获和处理的异常。 #### 43. 异常处理机制 - **关键字**:`throws`、`throw`、`try`、`catch`、`finally`。 - **用途**:`try`块用于尝试执行可能抛出异常的代码,`catch`块用于捕获并处理异常,`finally`块用于释放资源。 #### 44. 常见的`RuntimeException` - **常见类型**:`NullPointerException`、`ArrayIndexOutOfBoundsException`、`ClassCastException`、`IllegalArgumentException`、`SecurityException`。 #### 45. 异常处理关键字 - **`throws`**:声明可能抛出的异常。 - **`throw`**:手动抛出异常。 - **`try`**:包围可能发生异常的代码。 - **`catch`**:捕获异常。 - **`finally`**:无论是否发生异常都会执行的代码块。 - **`try`块中抛出异常**:可以在`try`块中抛出异常。 #### 46. 实现线程的方法 - **实现方式**:继承`Thread`类或实现`Runnable`接口。 - **同步方法**:使用`synchronized`关键字修饰方法。 - **不推荐的方法**:`stop()`和`suspend()`已被废弃,因为它们可能导致死锁等问题。 #### 47. `sleep()`与`wait()`的区别 - **`sleep()`**:使当前线程暂停指定的时间,不会释放锁。 - **`wait()`**:使当前线程等待,直到被唤醒或超时,会释放锁。 #### 48. 同步与异步 - **同步**:调用方需要等待操作完成才能继续执行。 - **异步**:调用方无需等待,操作完成后会通知调用方。 #### 49. 方法同步性判断 - **缺失示例**:需要具体代码示例才能分析方法是否同步。 #### 50. 多线程与同步的实现 - **多线程实现**:继承`Thread`类或实现`Runnable`接口。 - **同步实现**:使用`synchronized`关键字或`ReentrantLock`等显式锁。 #### 51. 启动线程的方式 - **正确方式**:使用`start()`方法启动线程。 - **错误方式**:直接调用`run()`方法只会像普通方法一样执行,不会创建新线程。 #### 52. 线程对同步方法的访问 - **限制**:当一个线程进入一个对象的一个`synchronized`方法后,其他线程无法进入该对象的其他`synchronized`方法。 #### 53. 线程的状态 - **基本状态**:新建(New)、就绪(Runnable)、阻塞(Blocked)、等待(Waiting)、终止(Terminated)。
剩余63页未读,继续阅读
- 粉丝: 4
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助