今天在检验垃圾回收方法时,想通过对象调用finalize方法来进行垃圾回收,却未找到当前方法,发现自己在基础方向尚有欠缺。
finalize方法是被projected来修饰的,那么需要针对关键字来理解一下了。
projected访问修饰符,它能在哪些地方调用呢?
先创建一个学生类:
package com.bo.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@ConfigurationProperties(prefix = "student")
@Component
public class Student {
private String name;
private Integer age;
private List<String> subjects;
protected String temp;
private Student friend;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List<String> getSubjects() {
return subjects;
}
public void setSubjects(List<String> subjects) {
this.subjects = subjects;
}
public Student getFriend() {
return friend;
}
public void setFriend(Student friend) {
this.friend = friend;
}
protected void outStudent(){
System.out.println("我是Struent类");
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", subjects=" + subjects +
", friend=" + friend +
'}';
}
@Override
protected void finalize() throws Throwable {
try{
//release resources here
System.out.println("finalize已调用");
}catch(Throwable t){
throw t;
}finally{
super.finalize();
}
}
}
我们看到temp属性定义的是projected访问修饰符,那么我在同一个包下的另一个类中直接访问这个属性:
package com.bo.pojo;
import com.bo.annotate.DbColumn;
import com.bo.annotate.DbTable;
public class Teacher {
public void test(){
Student student = new Student();
student.temp = "1";
}
}
这个时候直接访问student类的temp是不报错的,因为它们都在com.bo.pojo这同一个包下。
但如果我们换一个包下调用呢?
这个时候就没有办法直接调用了,会爆红报错。
那么在不同包下继承这个student类呢?
当然在这个继承类的方法内部就可以直接调用student.temp了。
用projected修饰的方法也是同样的道理。