对于长期使用C++的人来说,这样的语义确实叫人一下子难以接受。
/*
* Main.java
*
* Created on 2006年8月17日, 下午8:28
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package javaapplication2;
/**
*
* @author Zenny Chen
*/
class Parent
{
protected int t;
public Parent()
{
System.out.println("Creating Parent...");
create();
}
public void create()
{
System.out.println("Parent created!");
t = 1;
}
}
class Child extends Parent
{
private int c;
public void create()
{
c = 1;
System.out.println("Child created!");
}
public Child()
{
System.out.println("Creating Child...");
create();
}
public int getValue()
{
return c + t;
}
}
public class Main {
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Child ch = new Child();
System.out.println("The result is: "+ch.getValue());
}
}
从语义学和工程学角度,在Child对象被创建时首先要创建其父类域,然后可以根据父类属性
来获得创建自身资源的需要。然而Java在处理方法重写这个语义时,执行的是“一刀切”,
父类域尚未被创建完就开始调用其子类所重写的方法来。这样很可能造成子类的资源也无法
被初始化(若子类构造方法不去构建)。
从这点上,C++做得就比较好。创建一个对象就像造房子,一层一层建造。C++中虚函数的多态性
不会表现在构造函数和析构函数中,而且构造函数和析构函数也不会受到const对象的限制。
尽管在语义的实现上确实要比Java复杂一点,但符合语义学和工程学。
分享到:
相关推荐
Java语义模糊测试是一种强大的软件质量保证方法,它利用了模糊测试的概念来发现程序中的潜在错误和漏洞。在Java世界中,JQF(Java QuantiFiable Fuzzing)是一个开源框架,它提供了高级的模糊测试工具,尤其是Zest ...
本文提出了一种基于图网络的Java反序列化漏洞检测方法SerialFinder,该方法利用图结构充分表达反序列化漏洞调用链的语义信息,训练图同构网络模型,进而可以检测潜在的反序列化漏洞调用链。该方法可以弥补已有方法的...
SerialFinder的核心思想是通过构建一个能够表达反序列化漏洞调用链语义信息的图结构,并在此基础上训练图同构网络模型,从而实现对潜在反序列化漏洞的有效检测。 #### 三、SerialFinder工作原理 1. **构建图结构**...
语义-based approach 是一种基于语义的信息流安全研究方法,该方法可以对 Java 程序进行语义分析,以确保信息流的安全性。该方法的优点是可以对 Java 程序进行详细的语义分析,从而检测出可能存在的安全漏洞。 其次...
2. Jad:一个流行的第三方反编译工具,能够将.class文件反编译成可读性较好的Java源代码。Jad在Linux下运行的命令格式为 "./jad helloworld.class",可以生成helloworld.jad文件。 总结以上内容,理解Java的编译和...
4. **JAD**:这是早期的Java反编译器,尽管现在可能不如其他工具先进,但在XJad这个文件名中提到的,可能是对JAD的一种引用。 使用Java反编译器时需要注意的几点: - **版权问题**:反编译他人的软件可能涉及到侵犯...
类文件校验器是Java沙箱安全机制中的另一个重要组件,它的作用是对加载到JVM中的类文件进行校验,确保它们符合Java语言规范,且不会导致系统不稳定或出现安全漏洞。具体而言,类文件校验器的工作分为四步: 1. **...
### JAVA反射机制详解 ...反射是JAVA的一个重要特性,它为开发者提供了在运行时操作类的能力。正确使用反射可以极大地提高程序的灵活性和扩展性,但也需要谨慎对待,以避免引入不必要的复杂性和安全性问题。
在文档中,作者列出了 17 个 Java 语言特性限制,旨在避免一些潜在的安全漏洞。这些限制包括: 1. 不要使用 static、非 final 字段。 2. 不要使用线程同步原语来同步多个组件实例的运行。 3. 不要使用 AWT 函数来...
在早期版本的Java中,JMM存在一些漏洞,导致开发者在编写并发程序时面临挑战,因为它们不能保证在所有平台上都能正确运行。为了解决这些问题,JSR 133(Java Specification Request 133)被提出,目的是增强Java内存...
2. **CFR**: 一个高质量的Java反编译器,支持最新的Java版本,并能生成可读性较高的源代码。 3. **Procyon**: 提供了命令行工具和Eclipse插件,支持多种语言的反编译。 4. **JADX**: 一款强大的Java反编译器,能够将...
总之,Java反编译是软件开发中的一个重要工具,它提供了对字节码的洞察力,帮助我们理解运行时行为、解决复杂问题和学习新技术。然而,它也有其局限性和潜在的法律风险,因此在使用时应谨慎对待。
2021年的Log4j2漏洞就是一个典型的例子,它对Java生态的安全造成了重大冲击。 现有的针对Java软件供应链安全的研究主要集中在对单一组件或项目的抽样调查,忽视了它们在整个开源生态中的影响,无法精确评估其潜在的...
Java反编译是Java开发中一个重要的技术环节,它允许开发者查看Java字节码(.class文件)的源代码,即使原始的.java文件丢失或未曾提供。这在逆向工程、学习开源项目、修复bug或者理解他人代码的过程中非常有用。本篇...
它的设计理念之一是“一次编写,到处运行”,这意味着编写的Java程序能够在任何安装了Java运行环境(JRE)的设备上运行,不受特定操作系统或硬件平台的限制。 Java语言的发展经历了多个重要历史事件,包括Java语言...
为此,本手册以 Java 开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录。 一、编程规约 1. 命名风格 Java ...
它是一种基于语义学习的跨平台二进制漏洞搜索工具。 给定漏洞函数f ,VulSeeker 可以识别二进制程序是否包含与f相同的漏洞。 目前支持X86、X64、ARM32、ARM64、MIPS32、MIPS64六种架构。 如果您遇到任何问题,请随时...
需要注意的是,由于Smali和Java在语义上的差异,反编译的Java代码可能无法完全恢复到原始的编写状态,可能会丢失注释、变量名和方法名,因此在实际使用中需要结合其他工具和知识来辅助理解。此外,逆向工程可能涉及...