Java SE之Java工作原理
编译器(高级语言.java To 字节码.class)
------->【虚拟机(解释执行.class字节码文件,送达解释器)】------->解释器(翻译为机器码,面向特定系统的特定机器而运行) 即 .java--.class--机器码
特性:
1.跨平台(可移植,平台无关性)
2.安全性(参考文献:http://www.bubuko.com/infodetail-187060.html)
3.1封装:在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属性,同时也具有eat(),sleep()等行为,我们在行为中实现一定的功能,也可操作属性,这是面向对象的封装特性;
3.2继承:继承就像是我们现实生活中的父子关系,儿子可以遗传父亲的一些特性,在面向对象语言中,就是一个类可以继承另一个类的一些特性,从而可以代码重用,其实继承体现的是is-a关系,父类同子类在本质上还是一类实体;
3.3多态:多态就是通过传递给父类对象引用不同的子类对象从而表现出不同的行为
3.4抽象:抽象就是将一类实体的共同特性抽象出来,封装在一个抽象类中,所以抽象在面向对象语言是由抽象类来体现的。比如鸟就是一个抽象实体,因为抽象实体并不是一个真正的对象,它的属性还不能完全描述一个对象,所以在语言中体现为抽象类不能实例化
4.垃圾自动回收机制
5.健壮性:
5.1 异常处理机制
5.2 垃圾自动回收机制与内存管理
6.简单性:Eg.取消了指针,取消了goto .etc
7.网络技能
8.多线程
学习重点:
个人理解:
.Java File ----JVM执行完后输出的.Class File 可以视为 编译
[Process]
A.编译器(Javac,Java Compiler):将.java文件编译成.class文件
A.1 系统平台无关
A.2 面向虚拟机编译
A.3 Questions:
Q:C/C++与Java编译器的区别?(将有助于理解Java的跨平台特性)
A:参考文献:https://openhome.cc/Gossip/JavaEssence/WhyJVM.html
B.虚拟机(Java virtual Machine) :通过在实际的计算机上仿真模拟各种计算机功能来实现的。
B.1 系统平台相关
C.类加载器(Java ClassLoader):类加载器把一个类装入JVM虚拟机需要经过三步骤:
1. 装载(Load):查找和导入.class文件
2.链接(Link):检查装入.class文件的正确性,然后JVM虚拟机为变量分配内存,设置默认值
2.1校验
2.2准备
2.3解析
3.初始化(Initialize):把符号引用变成直接引用

4.Questions:
4.1那为什么我要有验证这一步骤呢?首先如果由编译器生成的class文件,它肯定是符合JVM字节码格式的,但是万一有高手自己写一个class文件,让JVM加载并运行,用于恶意用途,就不妙了,因此这个class文件要先过验证这一关,不符合的话不会让它继续执行的,也是为了安全考虑吧。
4.2在一个类加载器中一个类能初始化几次?Only once.
4.3类的加载?
JVM的类加载是通过ClassLoader及其子类来完成的。
4.3.1 类的加载的最终产品是位于堆区中的Class对象

[参考文献:http://blog.csdn.net/bingduanlbd/article/details/8363734]
D.类的初始化
7)Java 中所有定义的基本类型或对象都必须初始化才能输出值
Eg:
import java.io.*;
import java.util.*;
public class foo{
public static void main (String[] args){
String s;
System.out.println("s=" + s);
}
}
A. 代码得到编译,并输出 “s=”
B. 代码得到编译,并输出 “s=null”
C. 由于 String s 没有初始化,代码不能编译通过
D. 代码得到编译,但捕获到 NullPointException异常
答案:C
0.含义:class为后缀名的Java虚拟机可装载的文件。这个特定格式就是指JVM能够识别、能够装载的格式。
因:JVM在装载class文件时,要进行class文件验证,以保证装载的class文件内容符合正确的内部结构。
2.此类文件均由八位字节流组成,所有的16位,32位,64位分别通过读入2个,4个,8个字节来构造(按照高位字节在前---低地址的Big-endian顺序)。
3.每个class文件包含且仅包含一个Java类型(类or接口)
4.参考文献:
《The JavaTM Virtual Machine Specification》
《Inside the Java Virtual Machine》(Second Edtion)
http://wenku.baidu.com/view/481b5b024b73f242336c5f95.html
Java SE之Java工作原理的更多相关文章
- Java类加载器的工作原理
Java类加载器的作用就是在运行时加载类.Java类加载器基于三个机制:委托.可见性和单一性.委托机制是指将加载一个类的请求交给父类加载 器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它. ...
- Java 详解 JVM 工作原理和流程
Java 详解 JVM 工作原理和流程 作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java ...
- Java 连接池的工作原理(转)
原文:Java 连接池的工作原理 什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释 ...
- Java SE、Java EE、Java ME
Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.J ...
- Java SE、Java EE和Java ME有什么区别?
Java现在已不仅仅是一种语言,从广义上说,它代表了一个技术体系.该体系根据应用方向的不同主要分为Java SE.Java EE和Java ME的3个部分. 1998年12月份Sun公司公布的Java ...
- java的几个版本以及jre,jdk等概念——【转载】JDK、Java SE、Java EE、Java ME我该选
我们平时使用的一些软件,有一部分需要Java环境的支持,但是SUN那么多的产品,让人眼花缭乱的版本号,前看后看都差不多的缩写,让我们选择起来的时候常常望而却步,只好跟着感觉走.所以下面我要介绍的就是那 ...
- 浅谈Java SE、Java EE、Java ME三者的区别
本文把JAVA SE.JAVA EE.JAVA ME拿来做下区别,同时也分享一下作者的一些成果.目前的Java平台根据软件开发人员.服务提供商和设备生产商可以针对特定的市场可以分为三个版本JAVA S ...
- Java SE、Java EE、Java ME 三者区别
现在一个个来分析 1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 ...
- Java、Java SE、Java Web和Java EE的区别
刚接触Java对这些概念上的东西有点模糊,查了很多资料,想把它分享出来,要是哪里不对请大家指正(^_^) 1.Java 毫无疑问这就是门语言和C.C++.C#一样没什么好说的. 2.Java SE和J ...
- 24. Java SE 、 Java EE 、JavaME 、 JavaWeb 直接的区别和联系
这个是在别人博客抄的,并不是本人撰写 Java是一门编程语言.Java分为三大版本,SE即标准版,包含了Java核心类库,主要用来开发桌面应用:EE即企业版,包含SE,又有扩展部分(Servlet,J ...
随机推荐
- Lodop打印控件输出页码(超文本和纯文本页码)
Lodop打印控件打印超文本既可以手动分页,也可以自动分页,自动分页可阅读本博客的另一篇博文:Lodop打印控件 超文本自动分页 自动分页的时候,往往是不知道需要打印的内容到底分了几页,也就不可能预先 ...
- Linux下创建和删除软、硬链接 可临时处理空间不足
在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问. ...
- List泛型集合
List和数组 相同点: 都可以控制元素类型 不同点: List的长度是可变的,所以list比数组更容易掌控 List属性 1.Count 获取集合中实际包含的元素个数 2.Capcity 集合中可以 ...
- mysql关于binlog日志的操作
查看binlog日志选项和存储位置: mysql> show variables like 'log_%'; 1.查看所有binlog日志列表 mysql> show master log ...
- BZOJ3881[Coci2015]Divljak——AC自动机+树状数组+LCA+dfs序+树链的并
题目描述 Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是空的. 接下来会发生q个操作,操作有两种形式: “1 P”,Bob往自己的集合里添加了一个字符串P. ...
- BZOJ4538 HNOI2016网络(树链剖分+线段树+堆/整体二分+树上差分)
某两个点间的请求只对不在这条路径上的询问有影响.那么容易想到每次修改除该路径上的所有点的答案.对每个点建个两个堆,其中一个用来删除,线段树维护即可.由于一条路径在树剖后的dfs序中是log个区间,所以 ...
- APICloud之封装webApp
注册用户 https://www.apicloud.com/ 使用步骤 进入开发控制台 创建应用 选择webApp 根据自己的情况填写信息,然后创建即可 应用创建后的界面 端设置 app界面设置 证书 ...
- 【Sublime Text3】Package Control:Install Package不能使用解决方法
官网地址 https://packagecontrol.io/installation 报错内容 解决方法 https://packagecontrol.io/docs/troubleshoo ...
- HDU4288-STL模拟
给你插入,删除的操作,维护一个降序排列的表,查询所有下标模5等于3的元素和. 2012年成都网络赛的一道签到题.但是还是搜了题解才做出来了,意志不坚定啊... 这道题给10s的时间,做法多种多样. 最 ...
- BZOJ5337 [TJOI2018] 碱基序列 【哈希】【动态规划】
题目分析: 这道题的难点在于要取模,而题面没有写. 容易想到一个O(1E7)的dp.KMP或者哈希得到相关位置然后对于相关位置判断上一个位置有多少种情况. 代码: #include<bits/s ...