Java学习笔记–脚本语言支持API

Java语言的动态性之脚本语言支持API

描绘为 Android 开发者的模糊使用手册

点击打开链接
毫无疑问,混淆是包过程被最好要的流水线有,在尚未例外原因之情景下,所有
app 都应该打开混淆。
首先,这里说之之混淆其实是概括了代码压缩、代码混淆和资源减少等之优化过程。依靠
ProGuard,混淆流程将主项目和借助库中无受采用的好像、类成员、方法、属性移除,这有助于规避
64K
方法数之瓶颈;同时,将看似、类成员、方法还命名吧无意义之简练名称,增加

Android彻底组件化demo发布


(本文提出的组件化方案都开源,参见Android彻底组件化开源项目)
今年6月份开始,我开始背对“得到app”的android代码进行组件化拆分,在入手前自己翻了好多组件化或者模块化的稿子,虽然有局部取,但是大少出篇会给出一个完都实用的方案,大部分文章还只逗留于组件…

Android OpenGL ES 2.0 完全入门(三):2D
纹理的推、翻转、旋转、缩放


本人于去年六月份上了 OpenGL 的片基本概念,整理了一个 demo
和少数篇文章,并在今年六月份复习修正了一如既往胡。不久前自家越向铁蕾兄学习了季种常用
2D
纹理变换的落实思路(以及本文中的别样总结性文字),由于铁蕾兄实在尽忙碌,无暇快速整理成文,因此我就是当此间也外代笔了
🙂

绝完善总结 Android WebView与 JS
的交互方式(含实例Demo)


前言 今多App里都停放了Web网页(Hyprid
App),比如说多电商平台,淘宝、京东、聚划算等等,如下图 京东首页
上述意义是由于Android的WebView实现的,其中涉嫌到Android客户端与Web网页交互的贯彻
今天本身拿到介绍Android通过WebVie…

Android
存储路径而询问多少


Android 存储路径而了解小

高仿微信视频录制, 涂鸦水印添加, 基于 ffmpeg
视频编辑


成效重要涵盖 5 点:

  1. 基于 ffmpeg 的视频拍摄和合成;
  2. 自打定义拍摄按钮, 长按放大并且出示拍摄进度;
  3. 从定义 view, 实现手绘涂鸦;
  4. 自定义可触摸旋转缩放位移的表情文 view;
  5. 因 ffmpeg 的图形以及视频合成处理.
[初探Android中Window与DecorView](https://link.jianshu.com?t=https%3A%2F%2Fjuejin.im%2Fentry%2F59bf4716f265da06560452ef)

Android中View可以说凡是无与伦比关键的几乎单地方有,包括事件分发,测量,绘制等等,都是特别大的气象。那么我们只要想好好掌握这些知识,就得深刻摸底Andorid整个View从开头至成功所涉之同样名目繁多工作。本文分析的源代码均出自Android
API 24。

【Android】状态栏颜色的适配


而外 Mi UI 其他厂商也时有发生定制,Flyme,EMUI,Color OS 以及同样加以的氢
OS,Smartisan OS 等等,每款定制 ROM 都生夫独特之处,不过个人就习惯了
Mi UI。
MI UI 一个要命好的体会就是状态的字体能够变色,黑色变白色,白色变黑色。

自一行代码都未写实现Toolbar!你可还于封装BaseActivity?


原文地址:
https://juejin.im/post/590f09ec128fe100584ee6b0
前言 距离 上篇稿子
的发表时已仙逝少独多月了,这简单个月时里我从不写文章可直接在创新着本人之
MVPArms 框架,让他渐渐往 可配置化集成框架 发展 就以前段时间我…

Android 热修复 – 微信
Tinker


简而言之快速集成微信热修复 Tinker

旋即不是沉浸式状态栏


前言 首先请求大家看几摆放图:
以上的机能,一般我们统称为沉浸式状态栏。其实,这种叫法不是好准,而且为从未沉浸式状态栏就同样说,只有沉浸模式。以上几乎栽情景,可以称作透明状态栏或者状态栏着色。
一、两种状态
进行Android开发时,有少栽办法还见面针对状态栏进行安装:Translucen…

高级UI特效仿直播点赞效果—一个华美炫酷的点赞动画


Android下载文件(一)下充斥进度&断点续传


从今接触Android开发至今也尽快点儿年了,一路动过来可以说凡是站于巨人之肩头上前进,真的要命感激吗开端源世界作出贡献的总人口。话说回来,搞了这样绵长的支付可直接于于是他人的劳动成果也非是转事,所以自己操写几篇稿子分享我本着Android下载文件的了解,并在结尾整合并开源一个框架,也是对自身当And…

Android匿名共享内存(Ashmem)原理


阅读之前,不妨先想一个题目,在Android系统被,APP端View视图的数额是哪传递SurfaceFlinger服务之也罢?View绘制的多少最终是依照一帧一帧显示到屏幕的,而每一样轴都见面占有一定的储存空间,在APP端执行draw的早晚,数据很鲜明是设绘制到APP的过程空间,…

动用 RecyclerView 实现 Gallery 画廊效果,并操纵 Item
停留位置


RecyclerView
作为一个列表滑动控件,我们还懂她既可以横向滑动,也堪竖直滑动,可以兑现线性布局管理,瀑布流布局管理,还有
GridView 布局管理。其实我们可决定该 Item
的栖位置,并设其促成画廊效果。如果大家耳熟能详 SnapHelper
的口舌,估计大家就是…

Android Studio 3.0
新效能解析及原路适配


上周四,Google 终于于经验多年之错锤炼之后正式发表 Android Studio 3.0
版本,给科普安卓开发人员一卖满意的答卷。如往昔一致,每次新版开发工具的发布,很多审慎点之心上人照担心稳定性、是否是坑等问题,选择隔岸观火,等一段时间再创新提升。
经过查阅官网对新…

unity3d与android交互


简述 实现unity3d导出到android
studio工程并打包为library,供其他工程导入module直接使用。最终效果:
点击ZoomIn、ZoomOut的按钮,通过android端调用unity中艺术,进行放大放小;
触摸unity中之3D立方体,调用androi…

玩转APK:实现Android
APK瘦身99.99%


摘要: 如何瘦身是 APK 的基本点优化技术。APK
在安与翻新时还需要通过网络下充斥至装备,APK
越聊,用户体验更好。本文作者通过对 APK 内在机制的详尽剖析,给来了对 APK
各做成分的优化措施以及技术,并实现了一个基本 APK 的顶小化过程。

开源整理:有趣的Android动画交互设计


诸君同学,早上吓,今天为大家推荐几个口碑不错且当Github上开源的代码库,如果想让好之App在彼此动画方面变得还有意思,学习一下这些开源项目之代码用会晤指向你有裨益。
https://github.com/googlesamples/android-topeka
Topeka是…

MIUI 系统 BUG,Android
调用相机崩溃?将拍适配方案进行到底!


提起 Android 调用系统相机照上传图片或是亮图片,想必任何一样各项支付
Android
的情人还不见面生,基本是效果已包含各个应用了,今天,我哪怕来深受大家你一言我一语网上并无多呈现也同时经常坏操蛋的
Android 7.0 相机适配…

望购买区三级联动选择器


通过几独 APP 的出,发现多每个 APP
都产生这么一个要求,那就是是望购买区三级地址之选择,一般都务求近似于 iOS
的滚轮实现,在 github
上面找了有些开源控件实现了瞬间,发现会并发有的题材,所以就是打算自己包裹一个,直接坐数据源,不欲团结再次手动设置数据了,一行代码搞定一个城市选择功能。

发出矣这些 Chrome
插件,效率提升10倍增


Chrome
浏览器被周边程序员的爱,把她称为一会浏览器革命毫不为过。而它们的插件能够极大地提高生产效率,笔者把好经常应用的感觉不错的插件分享给大家,同时欢迎大家推荐更多更好玩的插件。
0、Proxy SwitchyOmega Proxy SwitchyOmega 是科…

局部关于加快 Gradle
构建的个体经验


即大部分底 Android 项目还是依据 Grale 了,因为 Gradle
确实为我们带来了很多有利于,然而,在使用了 Gradle
后,最老之缺憾就是编译起来最慢了。解决慢的题目无非有一定量栽艺术

晋级硬件配备,选择 CPU 和内存和硬盘等重新可以的硬件
于软件方面,减少非必要之耗时,充分利用现有机的习性。
正文的重要经验围绕着怎么减少非必要的耗时操作以及哪些充分利用机器性能进行。

RecyclerView
使用攻略(刷新首)


跟着《RecyclerView
使用攻略(助力篇)》之后,一直从未更新上下拉刷新的力量实现,主要要受限于个人现有的技术实力,总看没有经过实际打磨的,就不敢有出场的自信。虽说本曾经引用到温馨的品种及了,但要么得累跟进优化的。

种类需要讨论 – RecycleView
分页加载实现分析


以项目需要,需要实现 RecycleView
分页加载功能,看多篇章要都是直封装好,拿来让他人用,而没有证实是现实怎么落实,就和好写了平首分析的。

Android布局优化技术


一.完完全全原则:减少布局层次,加快渲染速度
尽量避免RelativeLayout嵌套RelativeLayout 二.重用
标签可以于一个布局中引入另外一个搭架子,重用共同之布局文件。
比如说共同的标题栏common_title.xml <…

Android彻底组件化方案实施


类提高及一定水平,随着人口之增加,代码越来越臃肿,这时候就得开展模块化的拆分。在我看来,模块化是一样种植点意见,其核心思想就是分而治之、降低耦合。而于Android工程中安执行,目前发生个别栽途径,也是简单坏派,一个凡组件化,一个凡插件化。
组件化是一个整体为?去矣条和胳膊还能够…

Android中View的绘图流程


View的绘图流程是从ViewRootImpl的performTraversals方法开始,它经过measure、layout和draw三单过程才能够最终以一个View绘制出来。
1、measure,即测量的意思,measure方法是当View中,它是final类型,意味着and…

android强大的SpannableStringBuilder


SpannableStringBuilder和SpannableString的界别类似与StringBuilder、String,就是SpannableStringBuilder可以凑合,而SpannableString不可拼接。
SpannableStringBuilder和…

Android优化方案的–Fragment的懒加载实现


当Android应用中,ViewPager是咱不可避免用的一个控件,因为其可使我们以挤占比较少空间的而,增强内容的丰富性,同时因那内部流淌着Google的血液,所以其几乎成为了各级一个App的标配控件。但是,假如ViewPager的诸一个Fragment都要经网拉取数据加载,而ViewPager是默认加载前少桩的,所以于那个爱造成网络丢包或者网络堵塞等题材,所以Fragment使用懒加载是不行有必不可少之。

Android
中直播视频技术探讨


多年来各种视频直播 app
到处都是,各种霸屏,当然我们呢是需要经验的,关于视频直播的软件这里就非介绍了,在无是技术的总人口来拘禁,直播是均等种潮流,是相同种娱乐方式,但是当一个作技术之,我们除了看望,更主要的是读技能,其实
Android
中之视频技术没什么说的,因为网上的资料很多,但是前的视频技术大部分都冒出在了视频播放,就是主流的视频播放器,那个最关键的一个技巧就是视频的编解码,这个啊会见当继承文章被详细介绍视频的处理技术。但是今直播的技巧是在头里的视频技术及以发矣一个要求就是是视频录制,现在录制很多凡靠牛逼的硬件摄像头。但是除了是技术,还来外的我们采用移动装备为堪去解决之题目。这个累也会商量如何以设备去录制视频。

Android 开发中争动态加载 so
库文件


自怀念对静态加载 so 库文件,大家还已不行熟悉了,这里虽非多说了。在
Android 开发被调用动态库文件(*.so)都是由此 jni
的道,而静态加载往往是当 apk 或 jar 包中调用so文件时,都使将本着许 so
文件包进 apk 或 jar 包。 动态加载的长处 …

RecycleView开源项目BRVAH分析


看源码对再次好之知道和用开源软件产生高度的援助

谈谈 WebView
的使用


座谈 WebView 的使 -(从零开始搭建 android 框架系列(5))

MVP架构开发,一首被你从扣懂到会使用


当今网上关于mvp架构的文章产生好多,但是对部分休是特意明白是架构的开发者,不是大和睦,所以,我一旦描写一首博客,通过我的鼎力,让大家会再好之知晓他,并采用他。下面是自家就片文章使教的内容。

为我们由第一部初步,一步步倒上前mvp。

5 个 Android
开发中于广泛的内存泄漏问题和解决办法


每当Android程序支付被,当一个目标就休需重新使了,本该受回收时,而另外一个正在使用的目标拥有它的援从而造成它不可知叫回收,这就招致该受回收的目标不克为回收而待于积内存中,内存泄漏就发生了。

自定义粘性下拉刷新


原先创 2017年08月09日 19:51:35 编辑 删除
在android中于定义之下拉刷新很常用,尤其是当刷新页面更新数据的时光,b比较炫酷的下拉刷新可以授予一个页面比较好之互相体验;
下面先来看…

android中带索引的列表—–索引的高等级应用


在Android中索引无处不在 比如通讯录 方便找信息之显得页等
脚介绍一个实用的索引demo

RecyclerView
优雅封装


本着 Android 中 RecyclerView
的雅致封装,能够实现小耦合的下拉刷新,上拉加载重多,支持类似 ListView
的多 HeaderView、FooterView。扩展性强,能够从定义下拉、上拉个性化
View。

玩转仿探探卡片式滑动效果


玩转仿探探卡片式滑动效果

一个故事讲完
Https


因为故事之款式为您介绍网络安全中的常见问题

Android
中冲物理特性的动画片简介


据悉物理特性的卡通依赖让物理学定律,这能够当动画中见来惊人的现实感。

类似支付宝首页——RecyclerView
多布局结构实现


大家都知晓,RecycleView 默认只能够透过 setLayoutManager()
方法指定同种植布局结构,那么像支付宝首页这样复杂的大都布局情况如何处理也?在
ListView 中,我们呢遇过这种气象,是经过 getItemViewType
结合其他办法,通过判断项目来加载不同的布局。在 RecycleView
中呢同样应用,今天我们第一介绍 RecycleView 多布局实现,其中布局嵌套了
GridView,有些坑需要专注,避免陷入。

Android
开发时,那些亲近之家伙或网站!


每当实质上 Android
开发过程着实会来很多亲切之家伙要网站出现,本文是自己要好的一些享。

干货 |
Android高级动画(2)


Android高级动画进阶,矢量动画。

2017 Android 极其完善试行总结 –
这些面试题你早晚要


事关到了 Android 的上上下下,引用了许多资源,也得以视作上纲要。

Google
官方推出以开发架构指南


虽说说 Android 的架构选择直接都怪随意,MVP、MVC、MVVM 各起拥趸。但
Google
最近还是出了千篇一律份关于下架构的行指南,并为出了一对一详尽的步骤和片指建议。希望大家都能看无异看,学习一下,打造更优秀易用的
APP,也也 Android 生态的改进做一点献。: )

Android 自定义——点赞效果 (仿
Twitter)


经打定义控件,意欲效仿 Twitter 的点赞效果。

Android Gradle
常用使用状况实现方式的下结论


Gradle 作为同放缓灵活多变的构建插件,与 Android Studio
的构成,能够缓解过去下 Eclipse 开发 App 时所遇的许多题目。同时,基于
Groove 这样同样缓慢 DSL
语言的台本特性,记住各种语法显然又是一样件比较紧的事体。 事实上,Gradle
插…

从零开始的 Android 新路 2 – Gradle


深信大家之种用上 gradle
都已经老老了,但因此得怎么样为?本篇文章介绍了借助管理,版本号管理,签名保护,Java8
支持,Apk Splits、module aar 等顶尖实践

       随着Java平台的盛,很多底脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中较盛行的有JavaScript、JRuby、Jython和Groovy等。相对Java语言来说,脚本语言由于那个灵活性非常强,非常适合在少数情况下下,比如描述下中复杂多变的政工逻辑,并于动运行过程被进行动态修改;为利用提供平等种世界特定语言(Domainspecific Language,DSL),供没有技术背景的普通用户使用;作为利用被各个零部件之间的“胶水”,快速开展零部件之间的三结合;快速支付有利用的原型系统,从而迅速收获用户举报,并开展改良;帮助开发人员快速编写测试用例等。等于这些现象,如果以java来开则从倍功半。

       对于这些运行于Java虚拟机平台及的脚本语言来说,并不需要为他们准备额外的运行条件,直接复用已有的Java虚拟机环境即可。这即省了以运转条件达标所用的基金投入。在运开发中行使脚本语言,实际上是“多语言开发”的平种植十分好之履,即基于使用之用跟语言本身的表征来选最适于的变成语言,以快速便捷地化解使用被之之一平有问题。多种不同语言实现的机件组合起来,用Java编写核心业务逻辑,用Ruby来拓展数据处理。不同语言编写的代码可以以运行的及一个Java虚拟机之上。这些脚本语言和Java语言里的彼此,是出于脚本语言支持API来好的。

1.脚本发动机

     
 一段脚本的实践要由该脚本语言对应之本子引擎来就。一个Java程序可以选而含有多脚本语言的行引擎,这一点一滴是因为程序的需要来支配。程序中所用到之脚本语言,都要来对应的剧本引擎。JSR
233遇定义了本子引擎的报与查找体制。这对于脚本引擎的实现者来说,是索要了解的。而相似的开发人员只待了解什么通过脚本引擎管理器来抱相应语言的脚本引擎,并不需要了解脚本引擎的挂号机制。Java
SE6中起带了JavaScript语言的剧本引擎,是依据Mozilla的Rhino来实现之。对于其余的脚本语言,则要下载对应之本子引擎的库并放在程序的接近路径中。一般只要在类路径中倍受,脚本引擎就足以叫应用程序发现并应用。
       
首先介绍脚本引擎的形似用法。首先创建一个剧本引擎管理器javax.script.ScriptEngineManager对象,再通过管理器来询问所用的JavaScript脚论引擎,最后经过脚本引擎来施行JavaScript代码。

ScriptEngineManagerDemo

图片 1

施行结果

图片 2

     
 上面的代码中是经脚本引擎的名字进行搜的。实际上,脚本引擎管理并支持三栽检索脚本引擎的方法,分别通过名称、文件扩展名与MIME类型来成功。

2.语言绑定

     
 脚本语言支持API的一个特别挺优势在她规范了Java语言及脚本语言之间的交互方式,使Java语言编写的程序可以和剧本之间开展双向的法子调用和数码传递。方法调用的点子会当稍后介绍。数据传递是由此言语绑定对象来形成的。所谓的绑定对象就是是一个简的哈希表,用来存放在和获得需要共享的数目。所有数据都指向承诺以此哈希表中的一个条条框框,是大概的名值对。接口javax.script.Bindings定义了言语绑定对象的接口,继承自java.util.Map接口。一个剧本引擎在履进程被可能会见动多单语言绑定对象。不同语言绑定对象的作用域不同。在默认情况下,脚本引擎会提供多独语言绑定对象,用来存放在于执行进程遭到出全局对象等。ScriptEngine类提供了put和get方法对台本引擎中一定作用域的默认语言绑定对象进行操作。程序可以一直采用是默认的语言绑定对象,也可以应用自己之言语绑定对象。在脚本语言的尽过程遭到,可以拿语言绑定对象看成是一个外加的变量映射表。在条分缕析变量值的时候,语言绑定对象中之号为会见给考虑在内。脚本执行进程中产生的全局变量等情节,会出现在语言绑定对象吃。通过这种方法就是得了Java同脚本语言之间的双向数据传递。

本子引擎默认的语言绑定对象的示范

    /**
    * 脚本引擎默认的语言绑定对象的示例
     */
    public static void useDefaultBinding(){
        try{
            ScriptEngine  engine = getJavaScriptEngine();
            engine.put("name","Arthur");
            engine.eval("var message = 'Hello,' + name;");
            engine.eval("print(message);");
            Object obj = engine.get("message");
            System.out.println(obj);
        }catch (Exception e){
            System.out.println("异常信息:"+e.getMessage());
        }
    }

本子引擎默认的言语绑定对象的言传身教执行结果

图片 3

    在大多数情景下,使用ScriptEngine的put和get方法就是足够了。如果只有以put和get方法,语言绑定对象自我对开发人员来说是晶莹的。在好几情况下,需要采取程序自己的语言绑定对象,比如语言绑定对象被含了次自己独有的数目。如果指望以好的言语绑定对象,可以调用脚本引擎的createBindings方法还是创造,并传递让脚本引擎的eval方法。

自从定义语言绑定对象的言传身教

    /**
     * 自定义语言绑定对象的示例
     */
    public static void userCustomBinding(){
        try{
            ScriptEngine engine = getJavaScriptEngine();
            Bindings bindings = new SimpleBindings();
            bindings.put("hobby","playe games");
            engine.eval("print('I like ' + hobby);",bindings);
        }catch(Exception e){
            System.out.println("异常信息:"+e.getMessage());
        }
    }

自打定义语言绑定对象的示范的尽结果

图片 4

    通过eval方法传递的语绑定对象,仅以眼前eval调用中生效,并无见面转移引擎默认的言语绑定对象。

3.脚依照实施上下文

    与剧本引擎执行有关的另外一个首要的接口是javax.script.ScriptContext,其中蕴藏脚论引擎执行过程的有关上下文信息,可以经过和Java
EE中servlet规范被之javax.servlet.ServletContext接口来开展类比。脚本引擎通过者达成下文对象获得与剧本执行相关的音信,也允许开发人员通过这目标来布局脚本引擎的表现。该上下文对象要涵盖以下3类信息:

3.1输入与输出

    首先介绍与下部论输入和出口的布置信息,其中包脚论以推行着因故来读取数据输入的java.io.Reader对象以及出口正确内容以及失误信息之java.io.Writer对象。在默认情况下,脚本的输入输出都在来在正规控制台中。

管脚论运行时之出口写副到文件被的示范

    /**
     * 把脚本运行时的输出写入到文件中。
     */
    public static void scriptToFile(){
        try {
            ScriptEngine engine = getJavaScriptEngine();
            ScriptContext context = engine.getContext();
            context.setWriter(new FileWriter("output.txt"));
            engine.eval("print('Hello World!');");
        } catch (ScriptException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

实行结果

图片 5

说明
    通过setWriter方法把剧本的出口重定向到一个文本被。通过ScriptContext的setReader和setErrorWriter方法可以分别设置脚本执行时的多寡输入来源及生错误时错信息之出口目的。

3.2从定义属性

    ScriptContext中为出与ServletConext中好像之获与安装属性之计,即setAttribute和getAttribute。所不同的是,ScriptContext中之属性是生作用域之分的。不同作用域的界别在寻找属性时之相继不同。每个作用域都为一个相应之平头表示该搜索顺序。该整数值越小,说明查找时的逐条越优先。优先级赛之作用域中的性能会隐藏优先级低之作用域中之同名属性。因此,设置属性时需显式地指定所在地作用域。在取属性地时,既可选在指定地作用域中查找,也得择因作用域优先级电动进行搜索。
    不过脚本执行上下文实现着含有地作用域是一定的,开发人员不可知随随便便定义自己之作用域。通过ScriptContext的getScopes方法好赢得有可用的作用域列表。ScriptContext中优先定义了片只作用域:

  • 常量ScriptContext.ENGINE_SCOPE表示的作用域对应之是现阶段之剧本引擎。
  • 常量ScriptContext.GLOBAL_SCOPE代表的作用域对应之凡打同引擎工厂中创造出来的有着脚本引擎对象。

    说明: 前端的事先级较高

#### 作用域影响同名属性查找示例

       /**
     * 作用域影响同名属性查找的示例
     */
    public static void scriptContextAttribute(){
        try{
            ScriptEngine engine = getJavaScriptEngine();
            ScriptContext context = engine.getContext();
            context.setAttribute("name","Arthur Ming",ScriptContext.GLOBAL_SCOPE);
            context.setAttribute("name","明国宾",ScriptContext.ENGINE_SCOPE);
            System.out.println(context.getAttribute("name"));
            System.out.println(context.getAttribute("name",ScriptContext.GLOBAL_SCOPE));
        } catch(Exception e){
            System.out.println("异常信息:"+e.getMessage());
        }
    }

#### 执行结果

![](https://images2015.cnblogs.com/blog/1001991/201703/1001991-20170326223034830-213077996.png)

3.1言语绑定对象

    脚论实施上下文中的末梢一近乎信息是言语绑定对象。语言绑定对象为是和意域相对应之,同样的作用域优先级依次对语言绑定对象呢适用。这样的预先级依次会对剧本执行时的变量解析出震慑。

言语绑定对象的先期级依次的示范

    /**
     * 语言绑定对象的优先级顺序的示例
     */
    public static void scriptContextBindings(){
        try {
            ScriptEngine engine = getJavaScriptEngine();
            ScriptContext context = engine.getContext();
            Bindings binding1 = engine.createBindings();
            binding1.put("name","Arthur Ming");
            context.setBindings(binding1,ScriptContext.GLOBAL_SCOPE);
            Bindings binding2 = engine.createBindings();
            binding2.put("name","明国宾");
            context.setBindings(binding2,ScriptContext.ENGINE_SCOPE);
            engine.eval("print(name)");
        } catch (Exception e){
            e.printStackTrace();
        }
    }

履结果

图片 6

    通过ScriptContext的setBindings方法设置的语言绑定对象见面影响至ScriptEngine在实践脚本时变量解析。ScriptEngine的put和get方法所操作的其实就是是ScriptContext中之作用域为ENGINE_SCOPE的语言绑定对象。

通过脚本执行上下文获取语言绑定对象的言传身教

   /**
     * 通过脚本执行上下文获取语言绑定对象的示例
     */
    public static void useScriptContextValues(){
        try{
            ScriptEngine engine = getJavaScriptEngine();
            ScriptContext context = engine.getContext();
            Bindings bindings = context.getBindings(ScriptContext.ENGINE_SCOPE);
            bindings.put("name","Arthur Ming");
            engine.eval("print(name)");
        } catch (Exception e){
            e.printStackTrace();
        }
    }

实践结果

图片 7

    自定义属性实际上为保留在语言绑定对象被。

自定义属性保存在语言绑定对象吃示范

    /**
     * 自定义属性保存在语言绑定对象中示例
     */
    public static void attributeInBindings(){
        try{
            ScriptEngine engine = getJavaScriptEngine();
            ScriptContext context = engine.getContext();
            context.setAttribute("name1","Arthur Ming",ScriptContext.GLOBAL_SCOPE);
            context.setAttribute("name2","明国宾",ScriptContext.ENGINE_SCOPE);
            engine.eval("print(name1);");
            engine.eval("print(name2);");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

推行结果

图片 8