一.jdk版本:
openjdk-jdk15u
二.下载代码,并引入为idea项目
1.进入页面地址:https://github.com/openjdk/jdk
2.到idea下,通过git 下载项目 https://github.com/openjdk/jdk.git
3idea引入项目后,为了关联关系,将src目录标记为resource
src目录上右击-->Mark Directory as -->
日常用的基础类:
\src\java.base\share\classes\java\lang\String.java
三.阅读内容记录
1.src/java.base/linux/classes/sun/nio/fs/LinuxFileStore.java
/*
*。。。。。。。。。。。。。。。。。。。。。
*/
package sun.nio.fs;
import java.io.IOException;
import java.nio.file.attribute.DosFileAttributeView;
import java.nio.file.attribute.FileAttributeView;
import java.nio.file.attribute.PosixFileAttributeView;
import java.nio.file.attribute.UserDefinedFileAttributeView;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
/**
* Linux implementation of FileStore
*/
class LinuxFileStore
extends UnixFileStore
{
// used when checking if extended attributes are enabled or not
private volatile boolean xattrChecked;
private volatile boolean xattrEnabled;
LinuxFileStore(UnixPath file) throws IOException {
super(file);
}
LinuxFileStore(UnixFileSystem fs, UnixMountEntry entry) throws IOException {
super(fs, entry);
}
。。。。。。。。。。。。。。。
}
特殊之处:该.java 文件里没有public修饰的类。只有class修饰。
验证:编写一个类
package top.fairy.global.globalfairytoppi4j.utils;
/**
* @author jiao_zg22
* @version 1.0
* @description 接口
* @date 2021/4/19 9:12
*/
class NoPublicClass {
public static void main(String[] args) {
System.out.println("NoPublicClass");
}
}
经运行,可以打印出结果 NoPublicClass
查看class文件,文件名称和正常的public修饰的一样。反编译后,仍然没有public 修饰。
考虑 类属性和类方法的权限:当属性和方法默认不加访问权限修饰符即default访问权限的时候,该类的属性可以被继承的子类访问。本包的子类,非子类都可以访问,非本包的子类,非子类都不能访问。
这个默认的类是否也遵循该权限呢?
经验证,在本包的类里面,可以直接引入并使用。
但是非本包下,无法引入。无论是继承,还是直接创建引用都报错。
所以class的public权限和默认权限实际上和方法和属性的权限可以认为是一致的。
2.关于精灵引用 PhantomReference,子类PhantomCleanable
我们知道引用分为4种:强引用,软引用,弱引用,精灵引用(虚引用)。
虚引用(精灵引用)在哪些地方被使用呢?
在查看源码时,有一个类:java.io.FileCleanable。继承结构如下:
java.io.FileCleanable --> PhantomCleanable<FileDescriptor>
PhantomCleanable<FileDescriptor> --> PhantomReference<T>,
PhantomReference<T> --> Reference<T>。
类图关系如下:
精灵引用的cleanable类,继承了精灵引用,但实现了Cleanable接口。
在文件清理的时候,为什么用到精灵引用呢?