java再学习

static关键字

可以修饰什么?
变量,类,方法,代码块

静态的作用到底是什么?
一般就表示该部分共享,在类加载或其他初始化的时候就被创建,因而后边有人new这个类的时候并不会再去创建,也就是说static修饰的内容是隶属于类,而不是直接隶属于对象,这样也就导致静态方法内部是不能访问非静态方法的,因为静态资源是在类加载的时候就建立好的,反之是可行的。

一般static修饰的类为工具类

四个关键字

default一定弄清楚
在这里插入图片描述

接口相关

接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public

接口方法和变量

因为接口是被实现的,所以接口中的普通方法一般是抽象的,可以用以下关键字修饰:
public, abstract, default

当然接口中可以有static修饰的方法,而且必须在接口中就实现,且该静态方法一定是public或default修饰的。

对于接口中的变量:
由于接口被大家使用或实现,所以变量在一开始就要赋值,并且使用final修饰,即不能被后续修改。

在这里插入图片描述

临界区

临界资源是一次仅允许一个进程使用的共享资源,而临界区就是指访问临界资源的那段代码。
因为临界资源无法被多者访问,所以不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问,一般使用信号量去控制。
此外要注意
在这里插入图片描述

类加载器

在JVM那块大概了解了下类加载器,其中大概分为四类:
启动类加载器,应用程序类加载器,扩展类加载器,自定义类加载器,具体并没有理解,在这里再补充一下:
类的五个生命周期中的第一个周期就是加载,也知道类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。

而这些类加载器是java.lang.ClassLoader的一个实例。

对于这四种类加载器在别的资料里有别的叫法
在这里插入图片描述
其中箭头指向的是该加载器的父类加载器,这里的引导类加载器就相当于前边说的启动类加载器,
系统类加载器也叫 应用加载器。

Java 虚拟机是如何判定两个 Java 类是相同的

不仅要看类的全名是否相同,还要看加载此类的类加载器是否一样
在这里插入图片描述

为什么要说这个呢?

因为类加载器在尝试自己去查找某个类的字节代码并定义它时,会先代理给其父类加载器,由父类加载器先去尝试加载这个类,依次类推。

这就是所谓的代理模式,这个代理模式中,所有 Java 应用都至少需要引用 java.lang.Object 类,也就是说在运行的时候, java.lang.Object 这个类需要被加载到 Java 虚拟机中。如果这个加载过程由 Java 应用自己的类加载器来完成的话,很可能就存在多个版本的 java.lang.Object 类,而且这些类之间是不兼容的。通过代理模式,对于 Java 核心库的类的加载工作由引导类加载器来统一完成,保证了 Java 应用所使用的都是同一个版本的 Java 核心库的类,是互相兼容的。

类加载器

双亲委派

之前经常看到,而且解释了一大堆也不怎么懂,今天学习梳理之后,知道:
上边讲到的类加载器除了引导类加载器,其他之间的层次关系被称为类加载器的双亲委派模型。

而这个双亲委派的过程就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值