java 内部类 加载_举例讲解Java的内部类与类的加载器
内部类
class A {
//Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用
class Inner1 {
int k = 0;
// static int j = 0; //A加载后,Inner1没有加载,所以这个 静态变量j 无法立即使用,报错
final int z = 0;
/*static void say1() {
}*/
void say2() {
}
}
//Inner2 在A加载好后就可以使用了
static class Inner2 {
int k = 0;
static int j = 0;
final int z = 0;
static void say1() {
}
void say2() {
}
}
// 调用内部类
void c() {
final int x = 0;// final 修饰后,可以由局部内部类调用
new A().new Inner1();// 非静态内部类Inner1,需要它所属的类的对象调用
new A().new Inner1().say2();
A.Inner2.say1();
new A.Inner2().say2();// 非静态方法say2(),需要它所属的类的对象调用
class Inner3 {
void print() {
System.out.println(x);
}
}
/*
* 方法中的局部内部类的调用,需要在声明后 因为,
* 在方法里的执行顺序是 从上往下,而这个类
* 就相当于一个 局部 变量 当然 要先声明,再使用
*/
new Inner3().print();
}
}
类的加载器 java.lang.ClassLoaderjava.lang.ClassLoader 类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个 Java 类,即java.lang.Class 类的一个实例。除此之外,ClassLoader 还负责加载 Java 应用所需的资源,如图像文件和配置文件等。不过本文只讨论其加载类的功能。为了完成加载类的这个职责,ClassLoader 提供了一系列的方法:
getParent() 返回该类加载器的父类加载器。
loadClass(String name) 加载名称为 name 的类,返回的结果是 java.lang.Class 类的实例。
findClass(String name) 查找名称为 name 的类,返回的结果是 java.lang.Class 类的实例。
findLoadedClass(String name) 查找名称为 name 的已经被加载过的类,返回的结果是 java.lang.Class 类的实例。
defineClass(String name, byte[] b, int off, int len) 把字节数组 b 中的内容转换成 Java 类,返回的结果是 java.lang.Class 类的实例。这个方法被声明为final 的。
resolveClass(Class> c) 链接指定的 Java 类。
public class ClassLoaderTest extends ClassLoader {
public static void main(String[] args) throws SecurityException, NoSuchMethodException {
// 根类加载器,加载的核心类库
URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();
for (URL u : urls) {
System.out.println(u);
}
// 扩展类 加载器,,加载的系统属性:java.ext.dirs 返回的路径下的 class
System.err.println("扩展类(extention classLoader)加载器"
+ ClassLoader.getSystemClassLoader().getParent());//非继承关系,只是意义上
System.out.println(System.getProperty("java.ext.dirs"));
// 应用(系统 application classLoader)类加载器,, 加载系统环境变量 PATH 或 CLASSPATH
// 指定的JAR包和类路径
System.err.println("应用(系统)类加载器" + ClassLoader.getSystemClassLoader());
// System.out.println(System.getenv("PATH"));
// System.out.println(System.getenv("CLASSPATH"));
}
}
java 内部类 加载_举例讲解Java的内部类与类的加载器相关推荐
- java 流的概念_举例讲解Java中的Stream流概念
1.基本的输入流和输出流 流是 Java 中最重要的基本概念之一.文件读写.网络收发.进程通信,几乎所有需要输入输出的地方,都要用到流. 流是做什么用的呢?就是做输入输出用的.为什么输入输出要用&qu ...
- java自旋锁使用_实例讲解Java 自旋锁
一直以来不是怎么清楚自旋锁,最近有点时间,好好的学习了一下: 所谓的自旋锁在我的理解就是多个线程在尝试获取锁的时候,其中一个线程获取锁之后,其他的线程都处在一直尝试获取锁的状态,不会阻塞!!!那么什么 ...
- java pdf添加图章_实例讲解Java处理PDF图章的方法
图章(印章)是一种在合同.票据.公文等文件中表明法律效应.部门机关权威的重要指示物,常见于各种格式的文件.文档中.对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现.本篇文档分享通过 ...
- java 动态调用函数_深入讲解Java语言中的函数动态调用方式
相 信 有 不 少 人 使 用C 语 言 的 函 数 指 针 实 现 过 函 数 的 动 态 调 用. 适 当 地 运 用 函 数 动 态 调 用 功 能 不 仅 能 减 少 代 码 数 量, 而 且 ...
- java 自定义语言 解析_视频讲解 Java 语言基础编程题(自定义异常类,IO 流)
第一题>点击这里查看学生信息管理系统的视频讲解知乎视频www.zhihu.com 基于学生信息管理系统增加以下两个功能:自定义学号异常类和年龄异常类,并在该成员变量不合理时产生异常对象并抛出. ...
- java类二次加载_深入理解java之类加载器
一.类与类加载器 类加载器:实现加载阶段的第一步,通过一个类的全限定名来将这个类的二进制字节流加载进jvm. 类与类加载器:任意一个类唯一性都是由它本身和加载它的类加载器确定,两个类是否相等在它们是由 ...
- java rtti_举例讲解Java的RTTI运行时类型识别机制
1.RTTI:运行时类型信息可以让你在程序运行时发现和使用类型信息. 在Java中运行时识别对象和类的信息有两种方式:传统的RTTI,以及反射.下面就来说下RTTI. RTTI:在运行时,识别一个对象 ...
- Java show两个整数加减_怎么样用java编写界面实现两个数的加法运算
展开全部 import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...
- java date加月_如何在Java中向当前日期添加一个月?
LocalDate::plusMonths 例: LocalDate.now( ) .plusMonths( 1 ); 最好指定时区. LocalDate.now( ZoneId.of( " ...
最新文章
- 大数据时代的数据挖掘
- Bootstrap按钮使用
- 解决不了“不可能三角”,火山抖音化只是个昏招
- C语言 2048小游戏
- android点击地址调用地图,Android 实现点击按钮 调用手机外部地图导航
- php中命名空间、面向对象、访问控制、接口
- docker初级操作
- 设备描述符请求失败_如果用户发出过多请求 苹果将取消Apple ID帐户恢复
- CCF201503试题
- ARX帮助文档:数据库对象
- OpenCV---膨胀与腐蚀
- 2021-06-17
- 防火墙之ipsec vpn实验
- Fer2013 数据集人脸表情识别 详细代码
- 一个普通211本科生找工作的那些事儿!
- 用户与组的创建、删除
- 最快最好用的数据增强库「albumentations」 一文看懂用法
- ui加Java岗位_本人不怕加班,java和ui学哪个好,打算以后往产品经理方向发展?...
- 经纬度度与度分格式转化
- Spring boot将项目的静态资源提取到项目外面的文件夹