java基础

43 阅读5分钟

1. java中数据类型有哪些?分为哪两大类?(考点:java数据类型及其分类)

两种数据类型:基本数据类型、引用数据类型

  1. 基本数据类型:
  • 整数类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
  • 浮点数类型:float(4字节)、double(8字节)
  • 布尔类型:boolean(1字节)
  • 字符类型:char(2字节)
  1. 引用数据类型
  • 字符串类型:String
  • 数组:array
  • 集合:collection
  • 类:class
  • 基本数据类型的包装类:Byte、Short、Integer、Long、Float、Double、Boolean、Character
    补充 类型转换:
  1. 小范围转大范围是隐式转换,大范围转小范围是显式转换。
  2. 布尔类型别能用0表示false,1表示true。
  3. 小范围的数据和大范围的数据一起参与运算,结果是转为大范围的数据类型。
  4. byte、short、char进行运算之后会自动转为int类型。
  5. 布尔类型不参与类型转换。

2. java中final关键字可以修饰什么?被final修饰后有什么特点

可以修饰类、方法、变量

  • 修饰的类不能被继承
  • 修饰的方法不能被重写
  • 修饰的变量不能被修改

3. 解释一下java中自动装箱和拆箱。(考点:自动装箱和拆箱机制)

  • 自动拆箱:将引用数据类型转为基本数据类型。
  • 自动装箱:将基本数据类型转为引用数据类型。

补充 java底层源代码中,默认是缓存了-128~127这些数据。

public class Test { 
    public static void main(String[] args) { 
        int i = 10; 
        Integer i1 = 10; 
        Integer i2 = new Integer(10); 
        System.out.println(i == i1); // true  
        System.out.println(i1 == i2); // false 
        System.out.println(i1.equals(i2)); // true 
    } 
}

4. java中==和equals()方法有什么区别?(考点:==与equals()的区别)

== :比较的是两个对象的地址是否相同。
euqals():默认比较的也是两个对象的地址,但是通常都会重写equals()方法,从而实现比较两个值是否相同。

5. java中访问修饰符有哪些?各自的访问范围是什么?(考点:Java访问修饰符)

访问修饰符有publicdefaultprotectprivate,通常用的最多的就是public 和private。

  • public:在任何位置都可以访问。
  • default:同一包中可以访问。
  • protect:不同包的子类可以访问。
  • private:只有当前类可以访问。

6. java中的静态变量(static)和非静态变量有什么区别?(考点:静态变量和非静态变量的区别)

  1. 静态变量是类加载的时候创建的,保存在静态变量区;非静态变量是随着实例的创建而创建,随着实例的回收而消失。
  2. 静态变量是全局共享的,所有的实例对象以及静态方法都能使用;非静态变量只能在当前实例对象中使用。
  3. 静态变量可以使用类名.变量访问;非静态变量则只能通过实例对象调用访问。

7. java中方法重载(overloading)和方法覆盖(overridding)有什么区别?

  1. 重载是发生在同一类中,除了方法名一致,其他都可以不相同;重写是发生在父子类中,除了代码块不同,其他的都应该保持一致。
  2. 重载是编译时多态,重写是运行时多态。

8. java的异常处理机制是怎么样的。

采用try...catch...finally的形式来捕获可能出现的异常。
对于可能出现的异常,采用thrwos抛出异常。
也可以使用throw显式抛出异常。

9. 解释一下java中泛型(Generics)及其作用。

  • 泛型:通常我们在编写类、方法、接口时,不知道需要操作什么类型的数字,而是在实例化的时候指定数据类型,对于这种情况,就需要使用到泛型。
    • 泛型类:class 类名<T>{}
    • 泛型方法:T void 方法名(T 参数){}
    • 泛型接口:interface 接口名<T>{}
  • 泛型的作用:提高代码的安全性和复用性。
    通配符? extends T表示类型是T的子类,? super T表示类型是T的父类。

10. java中的String类为什么是不可变的?

  1. 线程安全,提高安全性。
  2. 采用常量池存储,提高效率,避免重复创建相同的数据。\

怎么保证不可变的\

  1. 类使用final修饰的。
  2. 类中都没有提供可以修改的方法。
  3. 每次修改都是创建新的字符串。

11. String、StringBuffer、StringBuilder有什么区别?

  • String:不可变,线程安全,不适用于频繁操作的场景。
  • StringBuffer:可变,线程安全,适用于频繁操作字符串的场景。
  • StringBuilder:可变,线程不安全,适用于单线程环境。

12. java中Lambda表达式是什么?他带来了哪些便利?

  • 基本结构:(参数列表)->{方法体}
  • 特点:简化代码的编写,提高代码的简洁性,通常应用于流式操作。
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    names.stream().filter(name -> name.startsWith("A")) // 用Lambda表达式过滤
     .forEach(System.out::println); // 输出符合条件的元素

13. java中的Optional类是什么?为什么需要它?

  1. Optional类的定义:

    • 包装类:将可能为null的值封装为Optional对象。
    • 明确空值意图:通过方法名显式表达"值可能不存在的逻辑"。
  2. Optional类的作用:

    • 避免NullPointerException:强制开发者去处理空值,减少运行时错误。
    • 代码更简洁:链式调用替代多层if(obj != null)判空
    • API设计更清晰:方法签名中明确表示返回值可能为空。

14. 谈谈JDK8新特性

  1. 使用Lambda表达式。
  2. 采用stream流式编程。
  3. 提供Optional类,来处理空指针异常错误。
  4. 新的时间API:LocalDate。
  5. 允许接口中使用default默认方法。
  6. 使用了函数式接口和@FunctionalInterface
  7. 方法引用