OnJava02--控制流、初始化和清理

OnJava02--控制流&初始化和清理

1、控制流

  • if-else
  • 迭代语句
    • while
    • do-while
    • for
  • for-in语法(增强for、foreach):用于数组和容器
  • return
  • break、continue
  • switch
    • Java7之后,switch的选择器添加了使用字符串的能力

2、初始化和清理

2.1、用构造器保证初始化

2.2、方法重载

  • 方法重载对于构造器是必须的:不同的构造器必须要有相同的名字--类名,如果要实现具有不同参数类型、个数的构造器,就必须要有方法重载。
  • 使用基本类型的重载:
    • 如果有重载方法的参数与传入数据的基本类型一样,则调用该方法
    • 如果传入数据的类型小于方法中的参数类型,数据会被提升
    • 如果传入数据的类型比方法参数的类型更宽,则需要显示窄化转型,否则编译报错。

2.3、this关键字

(1)基本概念:
  • 类的方法其实都有一个隐藏参数,位于所有显式参数之前,代表着被操作对象的引用
  • this:用来在一个方法里获得对当前对象的引用
  • this只能用于非静态方法中
  • 可以用于return语句,返回对当前对象的引用,实现对同一对象执行多个操作
(2)使用this实现在构造器中调用构造器:
  • 目的:减少代码重复
  • 不能同时调用两个
  • 构造器调用必须出现在方法的最开始部分,否则编译报错(侧面解释了为何不能调两个:第二个调用不在最开始部分了)
  • 禁止在非构造器的普通方法里调用构造器

2.4、清理

  • 你的对象可能不会被垃圾收集
  • 垃圾收集不是析构
  • 垃圾收集仅与内存有关
(1)finalize()
  • 必须与内存及其释放相关
  • 使用仅限于:对象以某种方式分配存储空间,而不是通过创建对象来分配
    • Java中一切都是对象,上述分配主要通过本地方法来实现,即Java中调用非Java代码,在非Java代码中分配存储空间。

2.5、初始化

  • static初始化仅在必要时发生:如果不创建对应class的对象,则该class中的静态字段就不会被创建。

    • 仅在第一个对象创建或第一次访问静态数据时被初始化
  • 顺序:先静态字段,后非静态字段

  • 显式静态初始化:

    1
    2
    3
    4
    5
    6
    public class Obj {
    static int i;
    static {
    i = 47;
    }
    }
  • 非静态实例初始化:

    1
    2
    3
    4
    5
    6
    public class Obj {
    int i;
    {
    i = 47;
    }
    }

    实例初始化子句在构造器之前执行。