字节码

15_Python之函数基础

孤者浪人 提交于 2020-01-22 00:00:25
01. 函数的定义 1.1 快速体验 所谓 函数 ,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用 函数的使用包含两个步骤: 定义函数 —— 封装 独立的功能 调用函数 —— 享受 封装 的成果 函数的作用 ,在开发程序时,使用函数可以提高编写的效率以及代码的 重用 02. 函数基本使用 2.1 函数的定义 定义函数的格式如下: def 函数名 ( ) : 函数封装的代码 …… def 是英文 define 的缩写 函数名称 应该能够表达 函数封装代码 的功能,方便后续的调用 函数名称 的命名应该 符合 标识符的命名规则 可以由 字母 、 下划线 和 数字 组成 不能以数字开头 不能与关键字重名 2.2 函数调用 调用函数很简单的,通过 函数名() 即可完成对函数的调用 2.3 第一个函数演练 需求 编写一个打招呼 say_hello 的函数,封装三行打招呼的代码 在函数下方调用打招呼的代码 name = "小明" # 解释器知道这里定义了一个函数 def say_hello ( ) : print ( "hello 1" ) print ( "hello 2" ) print ( "hello 3" ) print ( name ) # 只有在调用函数时,之前定义的函数才会被执行 # 函数执行完成之后,会重新回到之前的程序中,继续执行后续的代码 say

JVM

╄→гoц情女王★ 提交于 2020-01-21 22:21:31
title: JVM必知必会 1. JVM是啥? JVM(Java Virtual Machine) Java虚拟机 虚拟机有两种: 系统虚拟机: VirtualBox ,VMware 是对硬件的模拟 程序虚拟机:jvm ,是为了执行单个程序设计的 我们都知道java具有跨平台特性,为什么? write once , run anywhere 解释 —> java源程序先经过javac编译器编译成二进制的.class字节码文件(java的跨平台指的就是.class字节码文件的跨平台,.class字节码文件是与平台无关的),.class文件再运行在jvm上,java解释器(jvm的一部分)会将其解释成对应平台的机器码执行,所以java所谓的跨平台就是在不同平台上安装了不同的jvm,而在不同平台上生成的.class文件都是一样的,而.class文件再由对应平台的jvm解释成对应平台的机器码执行 。 JVM是最强大的虚拟机,是比 java更优秀的产品;请注意,JVM不仅仅面向Java JVM直接运行的是字节文件,是二进制格式。意思是,不管是什么语言,只要你可以变成字节码,更准确地说:只要你给我的是Jvm字节码(Java字节码这个名词,其实可以换成Jvm字节码), 那么Jvm都可以运行 例如: Java,Jruby, Groovy,JavaScript, Kotlin 等等

关于代理模式和装饰模式的一些思考

☆樱花仙子☆ 提交于 2020-01-20 12:54:01
文章目录 背景 代理模式概述 装饰模式概述 编程启示录 背景 笔者前几天看了一个面试题 “说一下什么是代理模式?”,于是回忆了一下这个设计模式,并结合一篇旧文 《理理 Java 开发中常见的设计模式》 ,温故了一下这个知识点。 十年前看了好多遍的设计模式,死活处于学了忘、学不会的状态;如今随便翻到的某个 Java 技术点,都能快速反应出它们的前因后果。时光如梭,毕业已经十年了,这大概算是进入了卖油翁纯熟的技艺阶段了吧! 代理模式概述 代理模式类图 。面向对象编程语言中,代理对象和委托对象都需要实现相同接口,同时代理对象关联一个真正的委托对象,客户端得到的是一个代理的引用,实则背后调用的是真正委托对象的方法: 代理类型。 对于有大量类需要代理的应用,这就是一种负担。一方面增加了工作量,而且还产生了大量相似的代理类,所以有了动态代理这个解决方案:不需要为每个类都创建一个代理类,只在需要使用代理的时候,通过反射机制动态地生成一个实现代理接口的匿名类的实例。代理的分类:动态代理和静态代理,即生成代理类的方式是什么。 动态代理的两种类型:JDKProxy 和 CGlib 两种,二者比对结果如下 类型 原理 特点 JDKProxy 运行时直接写Class字节码 生成代理类效率高,反射执行效率低 CodeGeneratorLibrary ASM框架写 Class 字节码 生成代理类效率低

19-张婷-1_19-学习笔记

拈花ヽ惹草 提交于 2020-01-20 10:09:34
文章目录 基本概念 Java的工作方式 怎么做 例子 Java的程序结构 例子:数酒瓶童谣的程序 类 类与对象的区别: 创建 类 基本概念 Java的工作方式 1.源代码:编写源代码文件。 2.编译器:用编译器运行源代码。编译器会检查错误,如果有错就要改正才能产生正确的输出。 3.输出:编译器会产出字节码。任何支持Java的装置都能够把它转移成可执行的内容。编译后的字节码与平台无关。 4.Java虚拟机(JVM):虚拟机可以读取与执行字节码。 java虚拟机:虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。 字节码(Byte-code)是一种包含执行程序、由一序列 op 代码/数据对组成的二进制文件。 按计算机中的规定,一个英文的字符占用一个字节,(如,."’:;avcAVC都占用一个字节),而一个汉字以及汉字的标点符号、字符都占用两个字节,(如,。“”:;AVCavc他们就得占用两个字节)。 另外,他们是没有办法比较的,只能将一个字符占用一个字节,N个字符占用N个字节。 K是千 M是兆 G是吉咖 T是太拉 8bit

Java学习之基本概念

冷暖自知 提交于 2020-01-20 02:07:27
一、Java程序的运行机制 \quad Java程序需要经过编译和解释两个步骤,但其编译步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码(*.class文件)。这种字节码不是可执行的,须使用Java解释器来解释执行。因此,我们可以认为: Java既是编译型语言,也是解释型语言 。 \quad 负责解释执行字节码文件的是Java虚拟机,即 J V M JVM J V M (Java Virtual Machine)。因此编译器只需要面向虚拟机即可,生成虚拟机能解释的字节码再由虚拟机解释执行。JVM是Java程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。因此,Java具有良好的跨平台移植性。 \quad Sun公司将Java分为JavaSE,JavaEE和JavaME三部分。其中 JavaSE是整个Java技术的核心和基础,是JavaEE和JavaME的基础 JavaEE是Java技术中应用最广泛的部分,提供了企业应用开发相关的完整解决方案 JavaME主要用于控制移动设备和信息家电等有限存储的设备 \quad JDK全称是Java SE Development Kit,即Java标准版开发包。它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器,Java运行环境(JRE,JRE包含JVM和类加载器

java是怎样实现平台无关性的

泪湿孤枕 提交于 2020-01-19 03:12:48
当编译java程序时,生成的是于平台无关的字节码,这些字节码不面向任何具 体的平台,而是面向虚拟机,不同平台上的jvm是不同的,但它们都提供了相同 的接口,因此只要有相应的jvm,即使是不同平台,编译后的字节码文件也是可 以在这个平台上运行的。JVM就像是一个中转站、翻译官,即使你不会讲英 文,但是只要有翻译官,那么就能交流,JVM就是翻译官 更形象的例子 java就是电器,jvm就是插板,平台就是插板所安的地方,就是说电器(java) 无论你在客厅还是在房间(各种系统),只要你插插板就可以,当然,可能有 的地方电压高低不同(系统不同),那么安不同插板(JVM)就可以了,和电 器无关 这就是java和系统平台的无关性 来源: CSDN 作者: 小黄学程序 链接: https://blog.csdn.net/weixin_44716359/article/details/103979259

教你查看 Java 字节码

冷暖自知 提交于 2020-01-18 22:52:14
在我们工作、学习、以及研究 JVM 过程当中,不可避免的要查看 Java 字节码,通过查看字节码可以了解一个类的编译结果,也能通过编译器层面来分析一个类的性能。 字节码文件是不能直接打开的,下面给大家介绍我知道的两种查看字节码文件的三种方式。 使用 javap 命令查看字节码 命令格式如下: javap -c xxx.class 该命令是JDK 提供的,直接操作一把: $ javap -c Test.class Compiled from "Test.java" public class com.test.Test { public com.test.Test(); Code: 0: aload_0 1: invokespecial #8 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: return } 如上所示,可以看到 Test 类的的字节码。 Intellij IDEA 中查看字节码 Intellij IDEA 直接集成了一个工具菜单,可以直接查看字节码,打开 ByteCode 插件窗口方法如下: View -> Show bytecode 若看不到字节码,则是当前窗口类没有被编译,编译一下即可。 来源: CSDN

2020-01-10

人走茶凉 提交于 2020-01-18 22:43:38
利用字节码获取对象的属性 获取到字段 并更改了字段。 获取方法:字节码.getMethod() 泛型<>: 规定了创建的列表只能存放整型数据。 泛型在编译成字节码后 会消除泛型规则,如下 使得字符串照样可以放在list中, invoke()是调用list的方法并 传入 参数,然后打印list。 使用注解创建servlet 如果同时写了servive()和doget()方法 ,那么就不会去调用doget()了。只调用service() 登录案例 页面向服务器发送了一个请求,服务器的servlet接受这个请求。请求里面包含用户输入的信息 servletcontext 它是一个域对象:可以存取数据的对象。 作用范围:web应用。 来源: CSDN 作者: qq_33458689 链接: https://blog.csdn.net/qq_33458689/article/details/103849999

java和python真的有区别吗?

ⅰ亾dé卋堺 提交于 2020-01-18 19:17:47
Java和Python的特性区别! 这篇文章整合了java语言的特性和python语言的特性,希望可以帮到想要了解或初学编程的你! Python特性 Python是简单易学的: Python是一种代表简单主义思想的语言,它使你能够专注于解决问题而不是去搞明白语言本身。Python极其容易上手,因为Python有极其简单的说明文档。 Python是速度快的: Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。 Python是免费、开源的: Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。 Python是高层语言: 用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。 Python是可移植的: 由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台 上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、 BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation

二、JVM之体系结构

蹲街弑〆低调 提交于 2020-01-18 18:48:21
JVM体系结构图 Native Interface(本地接口) Java本地接口(Java Native Interface (JNI))允许运行在Java虚拟机(Java Virtual Machine (JVM))上的代码调用本地程序和类库,或者被它们调用,这些程序和类库可以是其它语言编写的,比如C、C++或者汇编语言。 Program Counter Register(程序计数器) 每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。 这块n内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令。如果是一个native方法,那么这个计数器就是空的。因为native方法是java通过JNI直接调用本地C/C++库,可以近似的认为native方法相当于C/C++暴露给java的一个接口,java通过调用这个接口从而调用到C/C++方法。由于该方法是通过C/C++而不是java进行实现。那么自然无法产生相应的字节码,并且C/C++执行时的内存分配是由自己语言决定的,而不是由JVM决定的。 Native Method Stack(本地方法栈) 本地方法栈的功能和特点类似于虚拟机栈