学习内容
finalize() 方法
Java 虚拟机在销毁对象之前调用 finalize() 方法。
该方法用于释放系统资源或执行其他清理任务。
Object 类包含 finalize() 方法,这意味着所有其他类都是如此(因为所有 Java 类都是从 Object 类派生的)。你可以直接在类中实现自己的 finalize() 方法。
finalize方法往往不会被调用,更像是一个备份。
static 变量和方法
- 类的每个实例只能存在 static 变量的一个副本,并且必须使用类名访问该副本
- 类的方法分为两种:
实例方法是在对象上调用的,并且可以访问该对象的数据。
static 方法没有该访问权限,因为它们根本没有对象引用。
static方法可以引用类的 static 变量和其他 static 方法。
static 方法无法处理非 static 方法或非 static 变量 - static方法的优点:
- 不必传递对象引用即可使用 static 方法和变量
- 有时需要只有一个变量副本
- 有时你需要先调用一个方法,然后才能创建对象
练习内容
课程1 有关对象生存期的任务
任务1 Cat 的 finalize 方法
在 Cat 类中,创建 protected void finalize() throws Throwable 方法。
package zh.codegym.task.task06.task0601;
/*
Cat 的 finalize 方法
*/
public class Cat {
protected void finalize() throws Throwable{
}
public static void main(String[] args) {
}
}
任务2 僵尸猫和僵尸狗
在每个类(Cat 和 Dog)中编写 finalize 方法,该方法将显示有关被销毁的特定对象的文本。
package zh.codegym.task.task06.task0602;
/*
僵尸猫和僵尸狗
*/
public class Cat {
public static void main(String[] args) {
}
protected void finalize() throws Throwable {
System.out.println("一个 Cat 被销毁");
}
}
class Dog {
protected void finalize() throws Throwable {
System.out.println("一个 Dog 被销毁");
}
}
任务3 Cat 和 Dog 对象:各有 50000 个对象
在循环中分别创建 50000 个 Cat 对象和 Dog 对象。
(Java 机器应开始销毁未使用的对象,并且 finalize 方法将至少被调用一次)。
package zh.codegym.task.task06.task0603;
/*
Cat 和 Dog 对象:各有 50000 个对象
*/
public class Solution {
public static void main(String[] args) {
for (int i = 0; i < 50000; i++) {
Cat cat = new Cat();
cat = null;
Dog dog = new Dog();
dog = null;
}
// 在此编写你的代码
}
}
class Cat {
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("一个 Cat 被销毁");
}
}
class Dog {
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("一个 Dog 被销毁");
}
}
任务4 Cat 计数器
在 Cat 类构造方法 public Cat() 中,将 Cat 计数器(Cat 类的 static 变量 catCount)加 1。在 finalize 方法中将其减 1。
package zh.codegym.task.task06.task0604;
/*
Cat 计数器
*/
public class Cat {
public static int catCount = 0;
public Cat() {
catCount = catCount + 1;
}
protected void finalize(){
catCount--;
}
//在此编写你的代码
public static void main(String[] args) {
}
}
任务5 偶数和奇数
使用键盘输入一个正数。确定输入数字中的偶数和奇数的数量。
如果一个数字可被 2 整除而没有余数(即,余数为零),则该数为偶数。
然后,我们将偶数计数器(static 变量 even)加 1。
否则,该数为奇数,我们将增加奇数计数器(static 变量 odd)。
显示以下消息:“偶数:a 奇数:b”,其中 a 为偶数的数量,b 为奇数的数量。
例如,对于 4445:
偶数:3 奇数:1
package zh.codegym.task.task06.task0606;
import java.io.*;
/*
偶数和奇数
*/
public class Solution {
public static int even;
public static int odd;
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String sNum = reader.readLine();
int len = sNum.length();
int num = Integer.parseInt(sNum);
int temp = 0;
for (int i = len; i > 0; i--) {
temp = num;
for (int j = 1; j < i; j++) {