问题描述
- Java.awt类是如何实现图形化的呢?
-
一直想知道java.awt内是如何与机器本身实现功能的,查看了下awt里的源码。首先查看了颜色color类,发现该类实际上的功能是定义了一个int对象value,然后给1600万种颜色编分别给个value值,也就是说color类就是一个存有颜色编号值得类,本身并不实现机器的颜色切换功能。
然后我又看了下各种容器的代码,结果从swing的JFrame看到awt里最基的component,基本上所有组件的结构基本上都是定义了如color类的成员变量,初始化也仅仅是更改这些成员变量的值,也就是说初始化的容器只是给容器内的颜色啊,布局管理啊等基本结构设值,而这些基本结构类也只是包含了一些数值。那么,当我们将这些数值编译完成,机器读取的时候是如何实现图形化的呢。
解决方案
底层是操作系统的绘图库实现绘图的,再底层是显示卡的驱动。
int的value其实是一个argb值,我们知道一个int有32bit,我们分为4个字节,每个字节表示一个颜色分量(红、绿、蓝、透明度),用0~255表示这个分量的浓度。
解决方案二:
追问:
1,按以上说法,编译出来的字节码也只是调用了操作系统的代码,难道说编译码本生不能直接与CPU对话,并将指令传递给显卡本身么,还是说可以是可以,但这样代码量太大,不如直接使用操作系统和显驱已经编译好的类库。
2,component类只继承object类,那么这个类本身和我们写的普通类没任何区别,而里面只有一些层次啊,颜色啊,布局啊的成员变量,这是个本身毫无关联的成员变量组成的类,为什么java一执行,就能生成图形了呢(调用显驱图形库)。难道说编译器针对component类的编译方式与普通类的不同,那么我将component类的代码全部复制,做一个除了类名都一样的类,再初始化该类还能生成图形么。如果不能的话就说明编译器针对component实行了不同操作,那component就是图形方面的object了,我们只能继承衍生component里已有的接口了,无法再“创造”component里没有的接口是么。谢谢。
解决方案三:
这个涉及到系统底层了,你这些类全部都是应用层代码。具体显示是需要驱动层代码的。驱动层代码与硬件的直接显示其实还有硬件抽象层(类似这些意思);
java生成的class文件离cpu能够直接识别的指令中间差了很多层次的。如果写应用层代码这些东西真的不需要深究,因为相当复杂。
解决方案四:
“java生成的class文件离cpu能够直接识别的指令中间差了很多层次的。如果写应用层代码这些东西真的不需要深究,因为相当复杂。”
追问:
class文件再经过解释器出来的不是应该就已经是汇编类的代码了吗,汇编与机械码不应该只是替换下就行了么。