1 2 3 4

java 基础

Java 基础

1. 继承和多态

类的划分

  • 普通类:使用 class 定义且不含有抽象方法
  • 抽象类:使用 abstract class 定义,它可以含有具体方法和抽象方法
  • 接口:使用 interface 定义,只有抽象方法

继承规则

  • 之间可以互相继承,使用 extends 关键字
  • 可以继承接口,使用 implements 关键字
  • 接口只能继承接口,使用 extends 关键字
  • 一个类只能继承一个类,但可以继承多个接口
  • 继承关系具有传递性
    • private 变量和方法不会被继承

多态

  • 实现多态的必要条件
    • 继承
    • 重写方法
    • 向上转型父类引用指向子类对象
  • 重写的返回类型必须是父类返回值的派生类

2. 值传递和引用传递

  • 在 java 中,默认只有值传递
  • 只有明确使用地址并修改对应地址的值之后才是引用传递

结果分析:

  • 对于数组而言,当我们创建一个数组之后,jvm为数组分配了三个连续的内存空间,这个 arr 就指向这片内存空间。方法 func 得到的是数组的引用/地址的一个拷贝
    • 情况1:修改了第一个空间块中的内容,故输出的是修改后的内容
    • 情况2:只是将arr的引用指向了另一片内存空间,原本的那片内存空间并未发生变化。

【下面代码对比JAVA和C++】

public void func1(int[] arr){
    arr[0] = 1
}

public void func2(int[] arr){
    int[] arr2 = {1, 2, 3}
    arr = arr2
}

int[] arr1 = {3, 4, 5};
func1(arr1); // {1, 4, 5} 传的引用/地址的副本,因此能改变
// c++ 值传递 {3, 4, 5}   c++ 引用传递 {1, 4, 5} 
print(arr1[0]);


int[] arr2 = {3, 4, 5};
func2(arr2); // {3, 4, 5}  传进去的引用/地址的副本,只修改了副本的地址指向
// 
print(arr2[0]);

3. 异常

  • Throwable
    • Error:错误无法恢复和预防,建议终止
      • IOError
      • VirtualMachineError
        • StackOverflowError
        • OutOfMemoryError
    • Exception:发生异常但通常可以恢复
      • RuntimeException
        • IllegalArgumentException
        • NullPointerException
      • SQLException
      • IOException
public static void main(String[] args) {
    try {
        int a = 5 / 0;
    } catch (ArithmeticException e) {
        e.printStackTrace();
    }
    System.out.println("Hello World!");
}

4. 其他

  • 集合
    • List
    • Set
    • Queue
    • Map
  • 正则表达式
  • 注解
  • 序列化和反序列化
    • 用于对象与字节流的转换
    • 用于跨进程数据交换
posted @ 2026-01-14 14:25  y丶innocence  阅读(15)  评论(0)    收藏  举报