
正文
java代码结构图 java代码长什么样
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java SE的结构图怎么看
java语言是跨平台的java代码结构图,所谓一次编写,到处运行。之所以是跨平台的,就是java定义了一套与操作系统,硬件无关的字节码格式,这个字节码就是用java class文件来表示的,java class文件内部定义了虚拟机可以识别的字节码格式,这个格式是平台无关性的,在linux系统或者在windows系统上都是一致的。这个就好比html文件,java代码结构图我们定义好规范,这个系统只要去按照规范显示出来里面的内容就好了。好比html就是class文件,浏览器就是虚拟机一样,通过浏览器去执行html的渲染过程,我们无论是用手机,Windows系统,苹果系统上网,显示出来的内容都是一样。 java虚拟机可以从class文件中加载预定义的字节码,也可以从网络,数据库,消息文件中加载字节码。
下面来说说java class的文件结构,java class文件结构是基于字节流的,用unicode进行编码。其实想想也可以完全用xml文件表示,只不过用xml表示的字节码文本体积可能会很大,占用空间,同时解析起来比较耗时,而且很容易被人为修改,导致未知错误。下面是class文件的内部结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
1
1
简要解释一下:
U4 代表由无符号四个字节组成
u4 magic :是一个固定的数值,java虚拟机里面称为魔数 ,主要是用来标识是否为java虚拟机所支持的文件结构,目前是0xCAFEBABE
u2 minor_version; u2 major_version; 代表次版本号和主版本号
u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; 这里面代表常量池个数以及常量池信息
u2 access_flags : 代表class访问标记,例如:public protected
u2 this_class : 代表这个类的名称 例如 java.lang.Object
u2 super_class : 代表父类名称
u2 interfaces_count; u2 interfaces[interfaces_count]; 实现的接口格式以及接口类名
u2 fields_count; field_info fields[fields_count]; 字段个数以及字段信息
u2 methods_count; method_info methods[methods_count]; 方法个数以及方法信息
u2 attributes_count; attribute_info attributes[attributes_count]; java class文件内部属性信息,和java语言定义的属性没有关系,纯粹就是给java虚拟机用的
以上都是java虚拟机规范中定义的class文件内部结构信息,可以参考Java虚拟机规范 (Java SE 7版)这里就不细讲
每种结构又都定义了自己的结构信息,例如:常量池结构,字段信息,方法信息,类信息,这几种结构之间又都互相引用,下面这幅图简要介绍了java class文件的内部结构信息
其中常量池的里面的信息最为复杂,java虚拟机运行时刻的所有信息都是从常量池来获取的,常量池定义了一下几种结构
相关问答
Q1: java构建下图的结构
下面代码随手写的java代码结构图,未运行验证java代码结构图,大概是这样的java代码结构图,只提供个思路java代码结构图,要运行的话,自己调试下,能不能弄懂,就看你自己的了
/**
* TreeNode.java
* 二叉树节点
*/
public Class TreeNode {
public String val; //当前值
public TreeNode lChild;
public TreeNode rChild;
public TreeNode(){}
public TreeNode(String val) {
this.val = val;
}
}
/**
* TestMain.java
* 主测试程序
*/
public Class TestMain {
private TreeNode root; //树根节点
public void TestMain() {
//初始化树
root = new TreeNode("S");
//S的左儿子A
TreeNode tna = new TreeNode("A");
root.lChild = tn;
//A的左儿子A1
TreeNode tna1 = new TreeNode(“A1”);
tna.lChild = tna1;
//A的右儿子A2
TreeNode tna2 = new TreeNode("A2");
tna.rChild = tna2;
//S的右儿子B
TreeNode tnb = new TreeNode("B");
root.rChild = tnb;
}
//查找树接口
public TreeNode findWithVal(String nodeVal) {
return findNode(root, nodeVal);
}
//递归查找子树
private TreeNode findNode(TreeNode rtNode, String nodeVal) {
if(nodeVal == null) { //查找对象不能为空
throw new RuntimeException("nodeVal can't be null");
}
if(rtNode == null) { //当前结点为空,表示不在此分支中
return null;
} else if(rtNode.val.equals(nodeVal)) { //找到结点
return this;
} else { //当前结点不是要找的结点,在子树中查找
TreeNode resNode = findNode(rtNode.lChild, nodeVal); //在左分支(儿子)中查找
if(resNode == null) { //不在左分支中
resNdoe = findNode(rtNode.rChild, nodeVal); //在右分支中查找
}
return resNode; //返回查找结果,如果不在当前结点的子结点中,则返回空,如果存在则返回该节点对象;
}
}
public static void main(很久不写主函数了,参数怎么写不记得了) {
TestMain testMain = new TestMain();
if(testMain.findWithVal("A1") != null) {
System.out.println("找到结点");
} else {
System.out.println("节点未找到");
}
}
}
Q2: java工作原理
Java工作原理
由四方面组成:
(1)Java编程语言
(2)Java类文件格式
(3)Java虚拟机
(4)Java应用程序接口
当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类 ,通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用 。
关于java代码结构图和java代码长什么样的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







