【Java编程思想笔记】第五章-初始化与清理

  • 重载:方法名相同,参数列表不同(参数类型、个数、顺序)。

  • 以基本类型参数重载方法时,会优先调用该类型的参数的方式,如果没有找到相同类型时,则提升最近的参数类型。

  • this(type x)用来在构造函数中调用其他构造函数,也只能用于构造函数中,并且只能用在第一行。

  • 如果你的对象(并非使用new)获得了一块“特殊”的内存区域中,由于垃圾回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块“特殊”内存。

  • finalize():该方法并不是用来释放由Java程序本身分配的空间,因为它有可能不被调用,由Java程序本身分配的空间会由JVM在适当的时机释放,有可能不调用,分配的空间直到程序运行完时一次性还给操作系统,那其作用是什么呢?由于在分配内存时可能采用了类似C语言中的做法,而非Java中的通常做法。这种情况主要发生在使用“本地方法”的情况下,在非Java代码中,也许会调用C的malloc()函数系列来分配存储空间,而且除非调用了free()函数,否则存储空间将得不到释放,从而造成内存泄露。当然free()是C与C++中的函数,所以需要在finalize()中用本地方法来调用它。

  • C++中在堆栈中创建的对象相当于局部对象(Java是不可以在栈上创建对象的),会在方法调用完毕时自动销毁对象。但如果是采用的new方式创建的对象(类似Java),那么程序员调用C++的delete操作符时(Java中没有该命令),就会调用相应的析构函数。如果没有调用delete,那么就不会调用析构函数,这样就会引起内存泄露。

  • 可变参数
    如果有多个参数,则可变参数只能放在最后,否则编译不能通过。
    可变参数接收到所有参数时,实质上是一个数组,所以可变参数的所有参数都是同一类型的。
    即然是可变的,当然我们也可不输出任何参数。

public static void main(String[] args) {
       print("you input:", 1, 2, 3);
       //与下面等效,即可变参数也可使用数组进行传递
       print("you input:", new int[] { 1, 2, 3 });
}
private static void print(String msg, int... is) {
       System.out.print(msg + " ");
       for (int i : is) {
              System.out.print(i + " ");
       }
}
  • 可变参数重载时,有时有问题,如下:
    static void f(float i, Character... args) {}
    static void f(Character... args) {}

  • 因为在只传一个参数时可能引起模糊,所以这样是不允许的,如果你给这两个方法都添加一个非可变参数,就可以解决问题:
    static void f(float i, Character... args) {}
    static void f(char c, Character... args) {}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值