`

JAVA 主动调用与被动调用

    博客分类:
  • Java
阅读更多

public class Test {
    static {
        System.out.println("***");
    }
    public static final String a = "sss";

  //final static double a = Math.random();

}
public class Test1 {
    public static void main(String[] args) {
        System.out.println(Test.a);

    }

}
输出为:        sss

Test使用的是Test1的static final修饰的字段,编译时,成为Test常量的一部分,可以认为编译时成为Test自己的,Test1属于被动使用,不会执行初始化代码,所以Test1的static不会被执行。


下面这六种情形符合主动使用的要求:
1 、当创建某个类的新实例时(或者通过在字节码中执行new指令;或者通过不明确的创建、反射、克隆或者反序列化)。
2、当调用某的类的静态方法时(即在字节码中执行invokestatic指令时)。
3、当使用某个类或接口的静态字段,或者对该字段赋值时(即在字节码中,执行getstatic或putstatic指令时),用final修饰的静态字段除外,它被初始化为一个编译时的常量表达式。

类的成员变量在执行期间才能得到值的,访问此成员也可是对此类的主动调用。比如:final static double a = Math.random();  
4、当调用api中的某些反射方法时,比如类class中的方法或者java.lang.reflect包中的类方法。
5、当初始化某个类的子类时,(某个类初始化时,要求它的超类已经被初始化了)
6、当虚拟机启动某个被表明为启动类的类(即含有main方法的那个类)




java虚拟机实现必须在每个类或接口首次主动使用时初始化。
使用一个非常量的静态字段只有当类或者接口的确声明了这个字段的时候才是主动调用;
类中声明的字段可能会被子类引用;接口中声明的字段可能会被子接口或者实现了这个接口的类引用。对于子类、子接口和实现了接口的类来说,就是被动调用--使用它们并不会触发它们的初始化。

分享到:
评论

相关推荐

    Java 嵌入apache.ftpserver.FtpServer 实现FTP服务

    用Java调用apache.ftpserver.FtpServer相关API完成FTP的被动模式实现。

    DCOS监控模块

    DCOS监控模块设计.doc DCOS Deep Dive.pptx ...1. 及时发现潜在的问题化被动为主动维护; 2. 为平台性能优化提供直观参考依据; 3. 提高系统维护的专业性和规范性; 4. 提高用户体验,降低服务宕机时间。

    java7源码-test1:测试1

    13、实现接口之间的转换,即调用第一个接口会自动转换为第二个接口的方法。--com.cn21.invocation包. 14、java核心技术第二章源码--com.java7book.chapter2.dynamicproxy. 15、方法句柄的例子--invoke包。 16、方法...

    simple-ml:Simple-ML,一个用于在线分类的 Java 库

    被动攻击感知器 平均感知器 下载 使用 CLI(实验) Simple-ML 的用法类似于和 。 该库是用 Java 编写的,需要在您的操作系统上安装 JRE 7。 使用simple-ml-*.*-with-deps.jar分发的便捷方式,它需要最少的安装...

    java安卓辅助源码-PentestLog:记下github中的一些项目

    web页面直接调用工具(dirsearch、masscan、amass、patator)扫描: 自动化扫描网站的CORS配置的漏洞: 长亭X-ray漏洞扫描器: 美杜莎漏扫: w13scan: Burp插件搭配被动式漏扫使用: 应急响应 应

    Hibernate使用技巧汇总

    property-ref:关联类中用于与主控类相关联的属性名,默认为关联类的主键属性名 单向一对多需在一方配置,双向一对多需在双方进行配置 8.lazy=false:被动方的记录由hibernate负责记取,之后存放在主控...

    渗透测试神器BurpSuite pro v2.0.11beta & keygen & 汉化

    Burp Suite 能高效率地与单个工具一起工作,例如:一个中心站点地图是用于汇总收集到的目标应用程序信息,并通过确定的范围来指导单个程序工作。在一个工具处理HTTP 请求和响应时,它可以选择调用其他任意的Burp工具...

    PL/SQL学习笔记

    什么是集合? 集合是用来存放大量数据的一种容器 PL/SQL有三种集合 联合数组 嵌套表 可变数组 联合数组详解: 什么是数组?数组有什么特点 数据是线性存放的,在内存... java-web 自己写一个,从四月开始到中旬任务

    Zabbix监控培训视频.rar

    │ 34 - 08-zabbix-agent主动和被动模式.mp4 │ 35 - 01-zabbix版本升级.mp4 │ 36 02-安装zabbix-proxy服务.mp4 │ 37 - 03-使用zabbix-proxy添加一台主机监控.mp4 │ 38 04-安装tomcat并开启jmx远程监控.mp4 │ 39...

    二十三种设计模式【PDF版】

    它不同于我们以前接触的 Java API 等,那些属于 Toolkist(工具箱),它不再被动 的被使用,被调用,而是深刻的介入到一个领域中去,J2EE 等框架软件设计的目的是将一个领域中不变的东西先定义好,比如 整体结构和一些...

    品味Spring 的魅力

    Spring的哲学是在不影响Java对象的设计的情况下将Java对象加入到框架中。 EJB的框架采用了一种侵略性(Invasive)的...因为IOC的思想要求bean之间不能够直接调用,而应该采用一种被动的方式进行协作。所以bean的管理是s

    汪文君高并发编程实战视频资源全集

     高并发编程第三阶段13讲 一个JNI程序的编写,通过Java去调用C,C++程序.mp4  高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4  高并发编程第三阶段15讲 Unsafe背后的汇编指令,...

    汪文君高并发编程实战视频资源下载.txt

     高并发编程第三阶段13讲 一个JNI程序的编写,通过Java去调用C,C++程序.mp4  高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4  高并发编程第三阶段15讲 Unsafe背后的汇编指令,...

    计算机科学系毕业设计论文范文

    也就是说,所有的组件都是被动的(Passive),所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也...

    TCP-IP详解卷3:TCP事务协议

    13.3.1 报文类型:请求与响应 132 13.3.2 首部字段 133 13.3.3 响应代码 133 13.3.4 各种报文头举例 134 13.3.5 例子:客户程序缓存 135 13.3.6 例子:服务器重定向 136 13.4 一个例子 136 13.5 HTTP的统计资料 138 ...

    PilferShushJammer:轻量级的Android AOSP应用程序可测试麦克风干扰技术,以应对跨设备跟踪(XDT)

    PilferShush干扰器研究与项目页面: : 为AOSP LineageOS构建的Android麦克风检查器和干扰应用程序。 适用于电池电量低的麦克风被动干扰。 调用audioRecord.startRecording(),但不读取音频缓冲区。 拥有麦克风访问...

    PADC-RxJavaSamples:PADC 2.0 Professionals类的RxJava示例

    PADC-RxJava样本 PADC 2.0 Professionals类的RxJava示例。... 使用RxJava进行简单的API调用。 将耗时的操作转换为被动方法。 关于“ PublishSubject”的示例。 链接操作。 过滤,获取, doOnNext 。

Global site tag (gtag.js) - Google Analytics