当前位置: 代码迷 >> 综合 >> Java编程思想之初始化与清理
  详细解决方案

Java编程思想之初始化与清理

热度:96   发布时间:2023-09-29 03:26:27.0
  • 用构造器确保初始化

构造器与类名称相同;是一种特殊类型的方法,因为它没有返回值。

在创建对象时,会为对象分配存储空间,并调用相应的构造器。

不包含任何参数的构造器叫做默认构造器

  • 方法重载

class Person {
           public Person() {}
           public Person(String name){}
           public Person(String name,int age){}
        }

区分重载:每个方法都有独一无二的参数类型列表

方法重载

1.如果传入的数据类型小于方法中声明的形式参数类型,实际数据类型就会被提升;
char略有不同,如果无法找到恰好接受char参数的方法,就会把char直接提升至int型

2.如果传入的实际参数大于重载方法声明的形式参数,就需要进行强制转换,否则编译器就会报错。
eg:
       void test(byte b) {}

int i = 5;
       test(i);//编译器会报错

  • 默认构造器

默认构造器又名“无参”构造器,是没有形式参数的。

如果类中没有构造器,编译器会自动帮你创建一个默认构造器。

作用:用于创建一个“默认对象”

  • this关键字

this关键字只能在方法内部使用,表示对“对调用方法的那个对象”的引用

如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可

class Test {
           private Test(){}
           public Test newInstance() {
               return this;
           }
       }

在构造器中调用构造器
       class Test {
           String s;
           public Test(){this("test");}
           public Test(String s){this.s = s;}
       }
      构造器中只能用this调用一个构造器,并且必须置于初始处
      除构造器外,编译器禁止其他方法调用构造器

static的含义

可以通过类本身来调用static方法,也可以通过对象来调用

static方法就是没有this的方法

在static方法内部不能调用非静态方法,反过来是可以的。

  • 清理:终结处理和垃圾回收

java垃圾回收器负责回收无用对象占据的内存资源

垃圾回收器只知道释放那些经由new分配的内存

finalize()的用途何在

一旦垃圾回收器准备好释放对象占用的储存空间,将首先调用其finalize(),并且在下一次垃圾回收动作发送时,才会真正回收对象占用的内存

无论是“垃圾回收”还是“终结”,都不保证一定会发生。

如果java虚拟机(JVM)并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以恢复内存的。

System.gc()用于强制进行终结动作

Java虚拟机采用一种自适应的垃圾回收技术。

自适应技术

标记-清扫:

从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象。

每当它找到一个存活的对象,就会给对象设一个标记,这个过程中不会回收任何对象。
只有全部标记工作完成的时候,清理动作才会开始。

在清理过程中,没有标记的对象将被释放,不会发生任何复制动作。

停止-复制:

先暂停程序的运行,然后将所有的存活的对象从当前堆复制到另一个堆,没有被复制的全部都是垃圾。

“标记-清扫”与“停止-复制”都是在程序暂停的情况下才能进行。

Java虚拟机会进行监视,如果所有对象都很稳定,垃圾回收器的效率降低的话,就切换到“标记-清扫”方式;
同样,Java虚拟机会跟踪“标记-清扫”效果,要是堆空间出现很多碎片,就会切换回“停止-复制”方式

注意

1.对象可能不被垃圾回收

2.垃圾回收并不等于“析构”

3.垃圾回收只与内容有关