字节码

1.1 什么是java

£可爱£侵袭症+ 提交于 2020-01-03 03:12:42
大部分内容摘自百度百科。 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和 Java平台 (即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 JAVA简介   它最初被命名为 Oak ,目标设定在家用电器等小型系统的 编程语言 ,来解决诸如 电视机 、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景。于是改造了Oak,以“Java”的名称正式发布。   Java 编程语言的风格十分接近 C 、 C++ 语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的 指针 (以引用取代)、运算符 重载 (operator overloading)、 多重继承 (以接口取代)等特性,增加了 垃圾回收

JAVA初识,JAVA是什么?

蓝咒 提交于 2020-01-03 03:12:29
一、什么是JAVA Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。 Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。 Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。 二、JAVA发展历史 1991年 SUN公司为抢占计算机单片机嵌入式领域市场,成立GReen项目小组,专攻家电嵌入式应用。由于C++程序复杂庞大,且跨平台是个问题,所以对C++进行改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言,但由于Oak是以硬件二进制机器码(字节码)作为运行平台,硬件厂商不远冒着Oak语言未被推广就生产硬件的风险,因此Oak语言被搁置。 1994年 GReen项目小组改变应用目标,决定将Oak应用在万维网上,以有线电视网为模型开发小组开发出小型万维网浏览器WebRunner。 1995年 互联网发展要求一种能在网络传播且跨平台运行的程序,因为Oak基于嵌入式系统结构编写,因此十分精简,适合在网络上传输

测试开发基础知识--java

那年仲夏 提交于 2020-01-02 21:54:32
JVM(java virtual Machine) java虚拟机:负责解释执行字节码文件。 可以这样理解:JVM就好比一台虚拟的计算机,拥有指令集并使用不同的存储区域。它负责执行指令,还管理数据、内存和寄存器。 当使用java编译器编译java程序时,生成了与平台无关的字节码文件(*.class),这些字节码不面向任何具体的平台,只面向JVM。不同平台上的JVM不同,但是所有平台上的JVM想编译器提供了相同的接口。JVM是java程序跨平台的关键部分。 shikeyirenyi java源文件的命名规则 java源文件的后缀必须是 .java 通常情况下,Java程序源文件的主文件名是可以任意的。当java程序源代码里有定义public类,则必须文件名与该public类名一致。且一个Java源文件中只能定义一个public类。 推荐: 1、一个Java源文件只定义一个类,不同的类使用不同的源文件定义。 2、让Java源文件的主文件名与该源文件中定义的public类同名。 java main方法 若需要Java解释器直接运行一个类,则这个Java类必须要有main()方法。这个main方法必须使用public和static来修饰,必须使用void声明该方法的返回值,而且该方法的参数类型只能是一个字符串数组。而不能是其他形式的参数。public和static位置可以互换。 (GC

JDK动态代理与Cglib动态代理

淺唱寂寞╮ 提交于 2020-01-02 20:42:24
基本概念 1.什么是代理? JDK动态代理: JDK动态代理主要依靠Proxy和InvocationHandler这两个类来生成动态代理类和类的实例。这两个类都在jdk的反射包java.lang.reflect下面。Proxy是个工具类,有了它就可以为接口生成动态代理类了。如果需要进一步生成代理类实例,需要注入InvocationHandler实例。这点我们上面解释过,因为代理类最终逻辑的实现是分派给InvocationHandler实例的invoke方法的。 JDK动态代理的实例: cglib动态代理: 简单看下cglib的用法:cglib的Enhancer说起来神奇,用起来一页纸不到就讲完了。它的原理就是用Enhancer生成一个原有类的子类,并且设置好callback到proxy, 则原有类的每个方法调用都会转为调用实现了MethodInterceptor接口的proxy的intercept() 函数。 CGLIB动态代理实例 基本概念 1.什么是代理? 在阐述动态代理之前,我们很有必要先来弄明白代理的概念。代理这个词本身并不是计算机专用术语,它是生活中一个常用的概念。这里引用维基百科上的一句话对代理进行定义: A proxy is an agent or substitute authorized to act for another person or a

虚拟机字节码指令表 JVM

流过昼夜 提交于 2020-01-02 18:30:17
虚拟机字节码指令表 标签(空格分隔): Java基础 JVM 记录虚拟机字节码指令,方便分析。以下内容来自《深入理解Java虚拟机》 字节码 助记符 指令含义 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 int 型指令 字节码 助记符 指令含义 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 0x06 iconst_3 将int型3推送至栈顶 0x07 iconst_4 将int型4推送至栈顶 0x08 iconst_5 将int型5推送至栈顶 long 型指令 字节码 助记符 指令含义 0x09 lconst_0 将 long 型 0 推送至栈顶 0x0a lconst_1 将 long 型 1 推送至栈顶 float double 型指令 字节码 助记符 指令含义 0x0b fconst_0 将 float 型 0 推送至栈顶 0x0c fconst_1 将 float 型 1 推送至栈顶 0x0d dconst_0 将 double 型 0 推送至栈顶 0x0e dconst_1 将 double 型 1 推送至栈顶 常量型指令 字节码 助记符 指令含义 0x10

Day1 python基础

核能气质少年 提交于 2020-01-02 18:08:48
一,计算机基础 CPU:中央处理器,相当于人的大脑,运算中心及控制中心 内存:临时存储数据,与CPU交互,读取速度比硬盘快 硬盘:永久存储数据 内存优点:读取速度快 内存缺点:容量小,造价相对高,断电数据丢失 硬盘优点:容量大,造价低,断电数据存在 操作系统:调控统领这些过程 二,Python的发展与应用 python崇尚优美清晰简单,能省就省 应用:云计算,WEB开发,科学运算,人工智能,系统运维 发展:Django框架,2004年诞生,促进python发展 三,python历史: 2008年python同时更新了python2.7和3.0两个版本,区别: python2x:源码不规范,源码重复较多 python3x:源码,清晰,优美,简单 python2:支持到2020年 四,python的分类: 编译型:将代码一次性全部编译成字节码,再执行。   代表语言:C   优点:执行速度快   缺点:不能跨平台,开发速度慢,不好调试。 解释型:代码从上至下逐行解释并运行。   代表语言:python   优点:便于调试,可以跨平台,开发效率高。   缺点:执行速度相对慢 五,pyhthon优缺点 优点: 1.第三方库多 2.开发效率高 3.可移植性 4.可扩展性 5.可嵌入性 6.高级语言 缺点: 1.运行速度慢 2.代码不能加密 3.多线程存在问题 六,python解释器的种类 1

Python学习日记(一)——初识Python

喜你入骨 提交于 2020-01-02 17:24:29
Python的优势 互联网公司广泛使用python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web等。 Python与其他语言 C和Python、Java、C#:   C 语言:代码编译得到 机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作    其他语言:代码编译得到 字节码 ,虚拟机执行字节码并转换成机器码后,再在处理器上执行   对于使用: Python的类库齐全并且使用简洁,如果实现同样的功能,Python 10行代码可以解决,C可能需要100行代码。   对于速度: Python的运行速度相较于C,肯定要慢 Python和Java、C#、PHP等   对于使用:Linux原装Python,其他语言没有;另外以上几门语言都有非常丰富的类库支持   对于速度:Python在速度上可能稍有逊色 所以,Python的其他语言没有什么本质区别,其他区别在于:擅长某领域、人才丰富、先入为主。 Python的种类 Cpython、Jyhton、Iron Python、PyPy、RubyPython、Brython 程序员只要会Python的规则,然后可以用Cpython执行代码,也可以用Jython执行代码 对于Jyhton,会先办你的py代码编译成为 Java认识的中间代码 ,Java虚拟机就可移执行这个中间代码。 Cpython Python的官方版本

Python开发基础-Day1-python入门

血红的双手。 提交于 2020-01-02 17:16:39
编程语言分类 机器语言   使用二进制代码直接编程,直接与硬件交互,执行速度非常快,灵活,但是开发难度高,开发效率低下,缺乏移植性。  汇编语言   对机器语言指令进行了英文封装,较机器语言容易记忆,直接与硬件交互,执行速度快,执行文件小,但是开发难度相对也很高,开发效率低 高级语言   语法简单,容易理解,开发难度低效率高,开发后测试方便,但是开发的程序需要经过转换才能执行,所以执行效率相对慢,可移植性高。   解释执行:代码执行时候,解释器按照源代码文件中的内容,一条条解释并运行,相对编译执行速度慢,但出错方便调试,开发效率高。     例如Python、PHP、Ruby、JavaScript等   编译执行:程序执行前,编译器会将源代码一次性编译成机器能够识别的指令文件,然后运行编译后的文件,速度相对表解释执行要高,但是出错后修改源代码需要重新编译执行,开发效率相对低     例如C语言、C++、GO、Swift、Object-C等   解释执行和编译执行在执行效率上虽然有差别,但是对于当前计算机的硬件计算速度的提升,加上网络环境的限制,执行速度相对来说并不是关键,开发效率才是关键。   像Java和C#属于混合语言,即既有编译执行也有解释执行。 Python简介 Python介绍   Python是一门解释型编程语言,平台兼容性高,省略一堆屁话,这是笔记!!!!  

2019 年终总结 ~ 逆风起航

三世轮回 提交于 2020-01-02 08:52:02
时间过的很快,2019 年过去了,迎来了崭新的 2020。 今天做一个 2019 年终总结,算是对 2019 年的一个交代。 主要总结下 2019 年技术上的 成长、读书、理财、时间管理 方面的东西。 技术 关于 Kotlin 翻开 2019 年第一篇博客,竟然是 2019-1-2 晚上 1:27 发表的,真不敢想象 2019 年初还这么作,不把健康放在心上。现在呢,嗯,10 点半就得睡觉了。 2019 年初系统的学习了下 Kotlin 相关的技术,写了 3 篇关于 Kotlin 的文章。 虽然只有 3 篇,但是有几篇的文章字数是 3-4 万。其实这 3 篇如果进行细分的话可以写很多博客,形成一个体系。 文章的数量不重要,重要的是质量。我习惯一篇文章,把所有的事情讲完。 这些文章基本涵盖了 Kotlin 基本的语法和常用的特性。 我们知道 Kotlin 编译后也是 class 字节码, 在介绍 Kotlin 语法糖的时候不仅仅介绍怎么用,还介绍了它背后的实现原理,语法糖对应的 Java 是什么? 这样对于熟悉 Java 的开发人员来说,可以更快、更加深入的掌握 Kotlin。让我们写的每一行 Kotlin 代码更加自信。 这三篇文章分别为: Kotlin 基础入门详解 Kotlin 操作符重载详解 从 Java 角度深入理解 Kotlin 然后 2019 年 6 月份,在 CSDN

Java 内存区域详解

纵饮孤独 提交于 2020-01-02 00:30:02
一.概述 因为 Java 程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。 二.运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的 内存划分成若干个不同的数据区域 。JDK. 1.8 和之前的版本略有不同。 JDK1.8之前: JDK1.8: 线程私有的:程序计数器、虚拟机栈、本地方法栈 线程共享的:堆、方法区、直接内存(非运行时数据区的一部分) JDK8 将方法区从运行时数据区移到直接内存,并改名为元空间 1.程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。 字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完成。 另外, 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。 从上面的介绍中我们知道程序计数器主要有两个作用: 字节码解释器通过改变程序计数器来 依次读取指令 ,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的情况下,程序计数器 用于记录当前线程执行的位置