栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-11-12

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-11-12

Java学习日志

提示:这里可以添加学习目标
例如:一周掌握 Java 入门知识


学习内容:

------

  1. 了解 Java 发展史和其特点特性。
  2. 掌握环境搭建(JDK 与 eclipse 下载安装)
  3. 学习如何编写代码
  4. 了解 Java 特性,JDK 和 JRE 等概念
学习笔记:

------

一、Java的起源:

SUN 公司为了抢占市场先机,在 1991 年成立了一个由詹姆斯·高斯林(James Gosling)领导, 名为“Green”项目小组,目的是开发一种能够在各种消费性电子产品上运行的程序架构。他们开发了一种名 为“Oak”的面向对象语言。

后来,OaK 语言因为缺乏硬件的 支持而无法进入市场,从而被搁置一旁。

1994 年,项目小组看到了浏览器在未来的发展前景,于是决定将 OaK 应用于万维网。1995 年, 他们用 OaK 语言研发了一种能将小程序嵌入到网页中执行的技术——Applet,由于 Applet 不仅能嵌 入网页,还可随同网页在网络上进行传输,这让无数的程序员看到了 OaK 这门语言,与此同时,OaK 正式更名为 Java。从此,Java 在互联网的推动下火了。

最终,1996 年 1 月,SUN 公司推出了 JDK1.0。

二、Java的体系特点

Sun 公司把 Java 体系分为三个方向:

Java SE:Java Platform,Standard Edition
标准版:各应用平台的基础,桌面开发和低端商务应用的解决方案。

Java EE:Java Platform,Enterprise Edition 企业版:以企业为环境而开发应用程序的解决方案

Java ME :Java Platform, Micro Edition 微型版:致力于消费产品 和嵌入式设备的最佳解决方案

其实,Java并不擅长去做一些桌面应用上的开发,它更擅长用于服务器上的开发,也就是我们的Java EE,以企业为环境而开发应用程序的解决方案。JavaME在之前用于一些嵌入式的设备的开发,现在相对较少了。

三、Java的特性

一种纯面向对象的编程语言。

一种与平台无关(跨平台)的语言。(它提供了在不同平台下运行的解释环境)

一种健壮的语言,吸收了 C/C++语言的优点。

有较高的安全性。(自动回收垃圾,强制类型检查,取消指针)

四、Java跨平台原理


JVM其实相当于一个翻译官,将.class文件翻译成操作系统可执行的指令。

五、Java技术的两种核心机制

1、Java 虚拟机(Java Virtual Machine)

JVM现在我们可以称之它是一个跨语言的平台。作为JVM虚拟机来讲目前能够在JVM上跑的语言太多了,据调查能有100多种。所谓的JVM虚拟机本身也是一种规范,Linux上有Linux的实现,JVM帮你屏蔽了这些操作系统的底层。

扩展:JVM是一台虚构出来的计算机,既然它是一个虚拟的计算机,你就可以想像成一层单独的机器,那么它就会有自己的CPU,有自己的指令集,汇编语言。

2、JVM 垃圾回收器(Garbage Collection) GC

不再使用的内存空间应当进行回收-垃圾回收。

在 C/C++等语言中,由程序员负责回收无用内存。

Java 语言消除了程序员回收无用内存空间的责任:JVM 提供了一种系统线程跟踪存储空间的分配情况. 并在 JVM 的空闲时,检查并释放那些可以被释放的存储空间。

垃圾回收器在 Java 程序运行过程中自动启用,程序员无法精确控制和干预。

六、JDK、JRE、JVM

JDK、JRE、JVM这三个到底是一个什么样的关系,

看图可能一时半会不明白,我解释一下:
Jvm叫java的虚拟机只是来执行的,就是你所有东西都弄好后它来执行;JRE运行时环境,java想要在操作系统上运行,除了虚拟机外,java那些核心类库你得有,如果那些核心类库没有的话你跑不起来;JDK是java开发工具包,包含JRE和JVM


七、提升内功

整个java虚拟机是以class文件为核心的,这个class文件是什么。我今天来分析一下。

整个class文件的格式就是一个二进制字节流,这个二进制字节流是由java虚拟机来解释的。

来看这个最简单的小程序,不用再看里面已经没有什么东西了,我要讲的是这个东西编译后会是一个class文件。
package com.legend.jvm.bytecode
public class ByteCode{ }

这是它的编译版本,这时再看看它的反编译版本,就能看到区别了。它会自动的帮你加了构造方法默认的无参构造,其实任何文件打开里面全是0101,不管你是png,jpg,txt也好打开全是0101.以下是它的反编译版本
package com.legend.jvm.bytecode
public class ByteCode{ public ByteCode(){ }}


这个class文件如果用16进制编辑器sublime打开的话,会发现里面全是十六进制的数字(0-f)


映入眼帘的就是一堆16进制的数字,而这,就是我们class文件的真实模样。也就是说,整个class文件的格式就是个二进制的字节流,这个字节流怎么解释就看由谁来解释了,这个东西是由java虚拟机来解释。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号