字节码

python基础7 - 函数

杀马特。学长 韩版系。学妹 提交于 2020-01-25 04:10:19
1. 函数的快速体验 所谓 函数 ,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用 函数的使用包含两个步骤: 定义函数 —— 封装 独立的功能 调用函数 —— 享受 封装 的成果 函数的作用 ,在开发程序时,使用函数可以提高编写的效率以及代码的 重用 2. 函数基本使用 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_hello() print(name) 定义好函数之后

函数基础

眉间皱痕 提交于 2020-01-25 01:24:33
所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用 函数的使用包含两个步骤: 1. 定义函数 —— 封装独立的功能 2. 调用函数 —— 享受封装的成果 函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的重用 函数基本使用 函数的定义 定义函数的格式如下: def 函数名(): 函数封装的代码 …… 1.def是英文define的缩写 2.函数名称应该能够表达函数封装代码的功能,方便后续的调用 3.函数名称的命名应该符合标识符的命名规则,可以由字母、下划线和数字组成;不能以数字开头;不能与关键字重名 函数调用 调用函数很简单的,通过函数名()即可完成对函数的调用 定义好函数之后,只表示这个函数封装了一段代码而已 如果不主动调用函数,函数是不会主动执行的 PyCharm 的调试工具 F8 Step Over可以单步执行代码,会把函数调用看作是一行代码直接执行 F7 Step Into可以单步执行代码,如果是函数,会进入函数内部 函数的文档注释 在开发中,如果希望给函数添加注释,应该在定义函数的下方,使用连续的三对引号 在连续的三对引号之间编写对函数的说明文字 在函数调用位置,使用快捷键CTRL + Q可以查看函数的说明信息 注意:因为函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留两个空行 函数的参数 函数参数的使用

师徒班作业

只谈情不闲聊 提交于 2020-01-25 01:02:46
=== 做最靠谱的IT培训 , 授专业的技能课程 === 初识 Java 作业 一、 填空题 Java技术按照用途不同分为三大版本,分别是JavaSE、 javaee 和JavaMe Java虚拟机就是一个虚拟的用于执行 Java 程序 的计算机。它是Java最核心的技术,是Java跨平台的基础。 DOS命令中用来改变当前目录的命令是 cd ,用来查看当前目录下的文件和子文件夹的命令是 dir 。 安装JDK后,为了告诉计算机javac.exe和java.exe等执行文件的位置,需要配置的环境变量是______JAVA_HOME _____%JAVA HOME%/bin__。 使用Java开发应用程序包括编写源程序,编译源程序,解释并运行三个步骤,其中Java源程序编译后生成的字节码文件的扩展名为 class 。 Java提供了三种注释类型,分别是单行注释,多行注释和_____________。 一个Java源程序是由若干个类组成。如果源文件中有多个类时,则只能有一个类是 类,并且这个类必须与源文件名同名。 二、 选择题 1. 以下选项中关于 Java 跨平台原理的说法正确的是( cd )。(选择二项) A Java源程序要先编译成与平台无关的字节码文件(.class),然后字节码文件再被解释成机器码运行 B. Java的跨平台原理决定了其性能比C/C++高 C.

java查看字节码javap命令使用

自闭症网瘾萝莉.ら 提交于 2020-01-24 20:39:48
一.环境说明 jdk 1.8 开发工具idea 2019.1.3 二.基础知识 开发中想查看某个类的字节码,了解java编译器的运行机制,这个时候办法之一就是使用javap命令了. javap命令常用选项 -c :显示每一个方法的字节码. 三.idea中查看字节码 .1idea中直接查看字节码.class文件显示结果是idea反编译后的文件.如图所示 这个时候想要查看字节码指令,方式一在idea的terminal(Alt + F12)中使用javap命令 第二种方式可以在idea的external Tool中配置javap指令 如图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191230173030652.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTI3NjIzOA==,size_16,color_FFFFFF,t_70 使用时候直接在当前文件中打开external tool 的该工具即可 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191230173155725.png?x-oss-process=image

Lambda表达式

被刻印的时光 ゝ 提交于 2020-01-24 01:53:46
1.Lambda表达式 1.1Lambda表达式的标准格式 ♦格式: (形式参数)->{代码块} ♦形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可->:由英 文中画线和大于符号组成,固定写法。代表指向动作 ♦代码块:是我们具体要做的事情,也就是以前我们写的方法体内容 ♦组成Lambda表达式的三要素: 形式参数,箭头,代码块 1.2Lambda表达式 Lambda表达式的使用前提 ①有一个接口 ②接口中有且仅有一个抽象方法 1.3Lambda表达式的省略模式 省略的规则 参数类型可以省略。但是有多个参数的情况下,不能只省略一个 如果参数有且仅有一个,那么小括号可以省略 如果代码块的语句只有一条,可以省略大括号和分号,和return关键字 1.4Lambda表达式的注意事项 使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法 必须有上下文环境,才能推导出Lambda对应的接口 ◆根据局部变量的赋值得知Lambda对应的接口 Runnable r = ( ) - > System . out . println ( "Lambda表达式" ) ; ◆根据调用方法的参数得知Lambda对应的接口 new Thread ( ( ) - > System . out . println ( "Lambda表达式" ) ) . start ( ) ; 1

漫谈分布式链路追踪

家住魔仙堡 提交于 2020-01-23 22:58:48
链路跟踪 链路跟踪归根到底只是一种理念和策略,简单的说就是在2次关联调用之间传递特定透传信息的能力。从组件设计的角度说其实关心的是是下面的几个特性: 泛用性:在多大范围的作用域上可用,有没有不可用的情况 完备性:数据模型的设计上是否考虑的足够全面,该有的都有,不该有的可以扔 成本:实现的成本和风险、接入的复杂度。 落地到实现方案上还是有很多不同的策略,但总的来说其实有三种策略。 基于特定语言实现的方案 典型的例子就是Java系的方案,总的来说java是一种编译语言,但是得意于虚拟机和字节码的实现方式,Java实际上是具有动态语言的特性的。 这类实现的基本思路就是在利用java-agent拦截具体类加载过程,在特定的类加载过程加入自定义的代码来实现trace的能力。 这类方案的主要缺点是的只能用于java,但是只要是java技术栈的实现就几乎可以无任何限制的接入,对java技术栈的公司来说是非常有效。接入成本也非常低,只要在启动命令中指定参数就可以了,无论是部署脚本还是构建镜像都很方便。剩下另一个一个缺点就是改字节码本身还是有一定风险的。不过总体来说稳定性还是有保障的。 skywalking 基于组织内编码规范的实现 并不是所有公司内部都是java的,其他语言并没有改字节码这种骚操作,或者认为这种方式太过粗暴该怎么办呢? 这种情况下基本的思路就是抽象出协议层面的概念

JVM简介

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-23 10:52:09
虚拟机(Virtual Machine) 虚拟机就是一台虚拟的计算机,是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。 系统虚拟机,如VMware,完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台 程序虚拟机,如JVM,它专门为执行单个计算程序而设计,在JVM中执行的指令称为Java字节码指令 Java虚拟机(JVM) Oracle拥有市场占用率最高的两款虚拟机:HotSpot和JRockit,并计划未来对它们进行整合:HotRockit。目前默认用的还是HotSpot,可以通过 java -version 命令的输出信息查看 Java虚拟机是一台执行 Java字节码 的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必有Java语言编译而成,也就是说,其他语言如JavaScript、Jython、Scala等经过它们自己的编译器编译为字节码文件后,这些字节码文件只要遵循Java虚拟机规范,Java虚拟机就能执行这些程序。 JVM平台的各种语言可以共享JVM带来的跨平台性、优秀的垃圾回收器,以及可靠的即使编译器。 **Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部解释/编译为对应平台上的机器指令执行。**每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数

初识Java

不羁的心 提交于 2020-01-23 03:30:24
Java三大版本 • J2SE Java的标准版本 (Java2 Standard Edition) 定位在客户端,主要用于桌面应用软件的编程 • J2ME (Java2 Micro Edition) 主要应用于嵌入式系统开发,如手机和PDA的编程 • J2EE 企业版本(Java2 Enterprise Edition)定义在服务器端Java2的企业版,主要用于分布式网络程序的开 发,如电子商务网站 • 2005 JavaOne大会召开,Sun公司公开Java SE6。此时,Java的各种版本被更名,取消其中的数字"2": J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME Java特点 1、 Java是跨平台的 JAVA程序的跨平台主要是指字节码文件可以在任何具有Java虚 拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释 器负责将字节码文件解释成为特定的机器码进行运行。 2、Java是简单的 • 不再有#include 和#define 等预处理功能 • 不再有struct,union及typedef • 不再有函数、 • 不再有指针、不再有多重继承 • 不再有goto • 不再有操作符重载(Operatior Overloading) • 不再有全局变量 取消自动类型转换,要求强制转换 • 不再有手动内存管理 3

【设计模式自习室】详解代理模式

怎甘沉沦 提交于 2020-01-22 19:26:02
前言 《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容有: 该模式的 介绍 ,包括: 引子、意图(大白话解释) 类图、时序图(理论规范) 该模式的 代码示例 :熟悉该模式的代码长什么样子 该模式的 优缺点 :模式不是万金油,不可以滥用模式 该模式的 应用案例 :了解它在哪些重要的源码中被使用 该系列会逐步更新于我的博客和公众号(博客见文章底部),也希望各位观众老爷能够关注我的个人公众号: 后端技术漫谈 ,不会错过精彩好看的文章。 系列文章回顾 【设计模式自习室】开篇:为什么我们要用设计模式? 【设计模式自习室】建造者模式 【设计模式自习室】原型模式 【设计模式自习室】透彻理解单例模式 【设计模式自习室】理解工厂模式的三种形式 【设计模式自习室】适配器模式 【设计模式自习室】装饰模式 【设计模式自习室】桥接模式 Bridge Pattern:处理多维度变化 【设计模式自习室】门面模式 Facade Pattern 【设计模式自习室】享元模式 Flyweight Pattern:减少对象数量 结构型——代理模式 Proxy Pattern 引子 通俗的来讲,代理模式就是我们生活中常见的 中介 。在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。 为什么要用代理模式 中介隔离作用 :在某些情况下

反射机制——(2) 获取Class中的构造函数

我是研究僧i 提交于 2020-01-22 19:07:34
一、创建对象 追根溯源 //早期:new时候,先根据被new的类的名称找寻该类的字节码文件,并加载进内存, //并创建该字节码文件对象,并接着创建该字节文件的对应的Person对象. //com.study.reflection.Person person=new com.study.reflection.Person(); 现在: //现在: String name = "cn.itcast.bean.Person"; //找寻该名称类文件,并加载进内存,并产生Class对象。 Class clazz = Class.forName(name); 如何产生对象? 在1.6API中 java.lang包中有个Clss类,类中有个方法,用于创建对象,返回一个泛型。 T newInstance () 创建此 Class 对象所表示的类的一个新实例。 Object obj = clazz.newInstance(); 查看一下newInstance( )方法 其实还是和new Object( ) 空参构造函数一样。需要调用空参构造函数。 com.study.reflection.Person person=new com.study.reflection.Person(); //现在: String name = "com.study.reflection.Person"; /