电子产品展示网站,墨刀怎么做网站,东莞市长安镇网站制作优化,网站搭建多少钱徐州百都网络非常好一、前言
我们都知道计算机的底层逻辑都是0和1的编码#xff0c;当然除了现在所研究的量子计算除外。那么我们在计算机所做的一切操作#xff0c;底层原理是不是都可以翻译到0和1呢。如果刨根问底的话#xff0c;可以这么说#xff0c;当然0和1的表示也属于逻辑门电路电的…一、前言
我们都知道计算机的底层逻辑都是0和1的编码当然除了现在所研究的量子计算除外。那么我们在计算机所做的一切操作底层原理是不是都可以翻译到0和1呢。如果刨根问底的话可以这么说当然0和1的表示也属于逻辑门电路电的状态。大规模集成电路就是用来存储逻辑门电路的。那么一个Java的对象在计算机中是怎么存在的。我们通过一个java对象深入了解程序在计算机上的运行逻辑。
二、JAVA对象
JAVA作为高级编程语言非常接近自然语言。比如声明一个对象 String s new String();
s 为对象的引用new String() 为声明对象。
比如我们编写如下代码
public class Test {public static void main(String[] args) {String s new String();System.out.println(s.getClass());System.out.println(s.getBytes());System.out.println(s.length());System.out.println(s.hashCode());System.out.println(new String());}}
编译成class文件
漱壕 4 3! # init ()V Code LineNumberTable main ([Ljava/lang/String;)V
SourceFile Test.java java/lang/String $ % ( ) * , - . / * 0 1 / * 2 Test java/lang/Object java/lang/System out Ljava/io/PrintStream; getClass ()Ljava/lang/Class; java/io/PrintStream println (Ljava/lang/Object;)V getBytes ()[B length ()I (I)V hashCode (Ljava/lang/String;)V ! *? ? n ? Y? L? ? ? ? ? ? ? ? ? ? ?
? ? ? Y? ?
? 0
运行class文件输出
C:\Users\lenovo\Desktop\testjava Test class java.lang.String [B15db9742 0 0
C:\Users\lenovo\Desktop\testjava Test
class java.lang.String
[B15db9742
0
0 那么编译到class文件到执行class是一个怎样的过程。这里就要说到java虚拟机。
三、java虚拟机 类的加载过程
1.1 加载
Java的类加载器会根据类的全限定名来加载类当需要使用某个类时如果该类还未被加载进内存则需要执行一下步骤进行加载
1.1.1. 通过类的全限定名找到对应的class文件这里的class文件可以是.java文件经过编译之后生成的.class文件也可以是通过其他方式生成的.class文件。
1.1.2 将class文件中的二进制数据读取到内存中并将其转换为方法区的运行时数据结构。
1.1.3 创建由该类所属的java.lang.Class对象。该对象可以理解为是对类的各种数据如名称、访问修饰符、方法、成员变量等的封装。
在加载类时类加载器除了加载某个具体的类外还需要将这个类所依赖的类也加入到内存中。这种依赖性是多层级的也就是说被依赖的类又可能会去依赖其他类所以在加载一个类时通常需要将其类图中所有的类都加载进来。