java实现静默加载Class示例代码
前言
本文主要介绍了关于java静默加载Class的相关内容,之所以有这篇文章,是因为有时候在开发的时候,我们有这样的场景,我们只想得到一个Class的基本信息,但是并不想触发相关的静态代码块,在之前的一篇《JAVA扫描包》文章中就用到了这种方式,我将其称之为静默加载,如果有专业的叫法,欢迎指正。
一般情况下,我们加载一个Class的时候会使用Class.forName(String name)
方法,该方法会返回一个Class对象,同时会触发该类中的静态代码块,举个例子:
我们先来编写一个只包含静态代码块的Bean类。
package com.jinggujin.classloader; public class Bean { static { System.err.println("static code block."); } }
使用err流是为了让信息及时输出,使用out会有缓存,可能会导致输出信息顺序错乱
然后编写测试方法进行测试。
package test; import org.junit.Test; public class ClassLoaderTest { @Test public void test() throws Exception { Class.forName("com.jinggujin.classloader.Bean"); } }
运行观察控制台输出:
static code block.
此时控制台会输出我们在静态代码块中打印的内容,这样就证明了了在使用Class.forName(String name)
会触发静态代码块,那么,要实现静默加载,我们就不能用这种方式了,我们可以使用ClassLoader的loadClass(String name)
方法进行加载,该方法仅会加载类而不会触发静态代码块,同样的编写测试方法进行测试。
package test; import org.junit.Test; public class ClassLoaderTest { @Test public void test() throws Exception { Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass("com.jinggujin.classloader.Bean"); System.err.println(clazz.getName()); } }
运行观察控制台输出:
com.jinggujin.classloader.Bean
我们发现,在控制台中仅输出了我们打印的类名信息,而静态代码块没有执行,除此之外,其实我们还可以使用Class.forName(String name)
的重写方法forName(String name, boolean initialize, ClassLoader loader)
,同样可以达到静默加载的效果。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
Java基础类Class使用指南
大家都知道Java是一门面向对象编程语言,在Java世界里,万事万物皆对象,那个Java中怎么表示对象呢?Class 我们知道Java中的对象都是Object类的子类,那么今天我们就一起来研究一下Java中的Class的使用. 问一下小问题:类是对象吗?类是谁的对象?答案是:类是对象,是java.lang.Class类的实力对象. package com.edu.hpu; public class Test { public static void main(String[] args) { /
-
学习Java中Class类及其用法
Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类.Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建. 简单总结如下: Class类也是类的一种,只是名字和class关键字高度相似.Java是大小写敏感的语言. Class类的对象内容是你创建的类的类型信息,比如你创建一个shapes类,那么,J
-
浅析java class 文件
class 文件是什么 1).是对一个java类或一个java接口的全面描述:2).是对java程序二进制文件格式的精确定义:3).一个class文件中只能包含一个类或接口:4).作为程序传给jvm的中间语言:5).class文件不一定和java语言相关: class 文件内容class文件包含了jvm所需知道的,关于类或接口的所有信息. 基本类型ClassFile常量池特殊字符串字段方法属性
-
运行java的class文件方法详解
一.运行class文件 执行带main方法的class文件,命令行为: java <CLASS文件名> 注意:CLASS文件名不要带文件后缀.class 例如: 复制代码 代码如下: java Test 如果执行的class文件是带包的,即在类文件中使用了:package <包名> 那应该在包的基路径下执行,命令行为: java <包名>.CLASS文件名 例如:PackageTest.java中,其包名为:com.ee2ee.test,对应的语句为: package
-
实例分析Java Class的文件结构
学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号,说"一次编写,到处运行",其实说到无关性,Java平台还有另外一个无关 性那就是语言无关性,要实现语言无关性,那么Java体系中的class的文件结构或者说是字节码就显得相当重要了,其实Java从刚开始的时候就有两套 规范,一个是Java语言规范,另外一个是Java虚拟机规范,Java语言规范只是规定了Java语言相关的约束以及规则,而虚拟机规范则才是真正从跨 平台的角度去设计的.今天我们就以一个实际的例子来看看
-
深入解析Java中的Class Loader类加载器
类加载的过程 类加载器的主要工作就是把类文件加载到JVM中.如下图所示,其过程分为三步: 1.加载:定位要加载的类文件,并将其字节流装载到JVM中: 2.链接:给要加载的类分配最基本的内存结构保存其信息,比如属性,方法以及引用的类.在该阶段,该类还处于不可用状态: (1)验证:对加载的字节流进行验证,比如格式上的,安全方面的: (2)内存分配:为该类准备内存空间来表示其属性,方法以及引用的类: (3)解析:加载该类所引用的其它类,比如父类,实现的接口等. 3.初始化:对类变量进行赋值. 类加载器
-
java实现静默加载Class示例代码
前言 本文主要介绍了关于java静默加载Class的相关内容,之所以有这篇文章,是因为有时候在开发的时候,我们有这样的场景,我们只想得到一个Class的基本信息,但是并不想触发相关的静态代码块,在之前的一篇<JAVA扫描包>文章中就用到了这种方式,我将其称之为静默加载,如果有专业的叫法,欢迎指正. 一般情况下,我们加载一个Class的时候会使用Class.forName(String name)方法,该方法会返回一个Class对象,同时会触发该类中的静态代码块,举个例子: 我们先来编写一个只包
-
Android ListView 实现上拉加载的示例代码
本文介绍了Android ListView 实现上拉加载的示例代码,分享给大家,具体如下: 我们先分析一下如何实现 ListView 上拉加载. 当我们上拉的时候,会出现一个提示界面,即 ListView 的 Footer 布局. ListView 要实现滚动,所以要监听 ListView 滚动事件,即 OnScrollListener() 事件. 当我们开始滚动时,Footer 布局才慢慢显示出来,所以需要监听 ListView 的 onTouch() 事件. 实现思路 首先判断 ListVi
-
layui实现table加载的示例代码
js实现: layui.use(['table','form'], function() { $ = layui.jquery; table = layui.table; tableIns = initTable(); }); //加载列表 function initTable(){ // 执行渲染 tableIns = table.render({ id: 'idTest', elem : '#deviceTable', // 指定原始表格元素选择器(推荐id选择器) size: 'lg',
-
Flutter 实现下拉刷新上拉加载的示例代码
本文介绍了Flutter 实现下拉刷新上拉加载的示例代码,分享给大家,具体如下: 效果图 使用方法 添加依赖 dependencies: pull_to_refresh: ^1.5.7 导入包 import 'package:pull_to_refresh/pull_to_refresh.dart'; 页面代码样例 class _MyHomePageState extends State<MyHomePage> { List<String> items = ["1&quo
-
java selenium智能等待页面加载完成示例代码
java selenium 智能等待页面加载完成 我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作. 否则页面上的元素不存在,会抛出异常. 或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操作 selenium 中提供了非常简单,智能的方法,来判断元素是否存在. 阅读目录 实例要求 隐式等待 显式等待 实例要求 实例:set_timeout.html 下面的html 代码, 点击click 按钮5秒后, 页面上会出现一个红色的div
-
微信小程序实现图片懒加载的示例代码
本文主要介绍微信小程序的模拟图片懒加载,实现的原理是通过页面预加载图片(默认图),加载完成后再显示出来原图,而非真正意义上的懒加载(跟web的懒加载还有很大的差距),只是借此提高用户体验度. 多图片懒加载 1.xml页面 <block wx:for="{{list}}" wx:key=""> <image class='relative width-100 mgb-20 fade_in' src='{{item.cover_url}}' mode=
-
easyui下拉框动态级联加载的示例代码
easyui的下拉框动态加载数据,高校中要根据首先查询所有学院,然后根据学院动态加载课程.下面看如何实现. 1.界面效果 2. html + js代码 <span>学院名称:</span> <input class="easyui-combobox" style="width:30%;" id="collegeName"> <span>课程名称:</span> <input cla
-
Swift快速集成下拉刷新和上拉加载更多示例代码
ESPullToRefresh ESPullToRefresh是一个非常易于开发者使用的下拉刷新和加载更多组件.通过一个UIScrollView的扩展,可以轻松为UIScrollView的所有子类添加下拉刷新功能. 如果你想定制组件的UI样式,只要实现指定的协议方法即可.Github地址 如何安装 使用CocoaPods pod "ESPullToRefresh" 手动安装 git clone https://github.com/eggswift/pull-to-refresh.gi
-
bootstrap table动态加载数据示例代码
我最近在研究bootstrap的学习路上,那么今天也算个学习笔记吧! 效果如下: 点击选择按钮,弹出模态框,加载出关键词列表 TABLE样式: <div class="modal fade " id="ClickModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" &
-
asp.net上传execl文件后,在页面上加载显示(示例代码)
复制代码 代码如下: #region 上传Execl文件 protected void Button1_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { string NewFileName = string.Empty; string ErrorMess = UpLoadFile(FileUpload1, ".xls|.xlsx&quo
随机推荐
- redis命令行查看中文不乱码的方法(十六进制字符串处理)
- AngularJS基础 ng-cloak 指令简单示例
- vbs下一些取特殊路径的方法总结
- Bat脚本处理ftp超强案例分析
- Angular.js中定时器循环的3种方法总结
- Django基础之Model操作步骤(介绍)
- javascript中处理时间戳为日期格式的方法
- js鼠标点击图片切换效果实现代码
- C#中IEnumerable、ICollection、IList、List之间的区别
- c语言可变参数实现示例
- JQuery 文本框回车跳到下一个文本框示例代码
- 用Ruby进行CGI编程的入门指引
- Lua中的逻辑运算符使用详解
- VBS教程:VBScript 基础-VBScript 数据类型
- 在centos5下安装配置VNC的具体操作步骤
- C++指针数组、数组指针、数组名及二维数组技巧汇总
- C++实现单链表删除倒数第k个节点的方法
- PHP中header和session_start前不能有输出原因分析
- Android 出现问题 Gradle
- Android中Fragment 真正的完全解析(上)