Java语言概述和编译过程

Copyright©Stonee

最近在学习Java,老师是一位工程经历丰富的工程师。想通过这个笔记把能想到的记下来,当然随着对Java理解的逐步加深,我会不断更新修正这篇文章

Java语言概述

众所周知,因为C语言难以满足日益增加的复杂性应用程序的需求,所以诞生了面向对象的语言。Java正是一门面向对象的语言,面向对象语言具有良好的:

  • 封装性 通过类封装起来实现模块化
  • 多态 实现了可扩展性
  • 继承 可以复用

在刚开始接触Java的一个星期,我一直弄不明白Java究竟和C有哪些区别,虽然列出了这些特点,但是因为对这些特点的不了解,所以并不能真正搞懂他们之间的区别。
 所谓面向过程,就是在解决问题的时候,针对于某个过程,逐步分解成小问题。面向对象则是自底向上逐步抽象(解释的确实很笼统,我现在只是大概理解,以后会更:))
 学习一门语言眼界一定要放开,千万不能揪着语法本身不放,这门语言的特点才是真正核心的东西。
 Java的设计初衷就是为了使程序员更加方便,所以编译器和JVM会帮程序员干好多C语言所不能干事情,譬如垃圾回收,数组越界判断等等。
 另外,Java具有跨操作系统和CPU的优势,原因请看下面的编译过程:

Java编译过程

  • 程序员通过集成环境写出了**.java**文件
  • 经过编译器文件变为**.class**字节码 编译器会优化代码
  • 之后交给JVM执行 JVM在编译的过程中会私自添加一点东西,如类等
  • 再交给操作系统变为二进制
  • 最后交给CPU运行
  • 将结果打印到控制台

现在回答上面的问题,因为Java有了个中间层JVM,当把代码交给JVM的时候,JVM会自动判断OS和CPU的接口和指令集,进而去适应不同版本的OS和CPU。

Java代码是如何在JVM中工作的

用一种不正确的说法来说就是,需要2个区块:

  • 栈:由操作系统分配,储存形参和局部变量
  • 堆:
        1. Java堆:存放着实例对象(实例字段)
        2. 方法区:存储类对象(包括静态字段,静态和实例方法),常量池等

当JVM在代码中遇到类的时候,就会在方法区中加载这个类并对里面的静态字段初始化,之后在新建实例的过程中,在栈中引入变量名称并指向Java堆中的实例,实例中会存有实例字段,然后再指向方法区中的类

二更:这里可以解释一下为什么同样在方法区的类中,静态方法可以直接通过类来调用而实例方法却必须要new一个对象之后才能使用:原因是实例方法中会自动加入一个this的形参,必须要先建立对象然后才能把参数穿进去;而静态方法则没有this形参,(PS:总感觉这样解释也不太对,希望大家指正,以后会继续更:))

  • 举个栗子:
int [] a;
a = new int [10];
  1. 第一步现在类里建立int;
  2. 第二步在栈中给变量名a分配字节并指向实例堆;
  3. 第三步在指向的实例堆中分配空间并标明10个字节(防止数组越界)之后指向类;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值