当前位置: 首页 > wzjs >正文

金融证券网站模板太原网站建设价格

金融证券网站模板,太原网站建设价格,台州卓远做网站好不好,wordpress 插件 更新闭包(Closure)是函数式编程中的一个重要概念,在Java 8中通过Lambda表达式和函数式接口得到了支持。虽然Java官方文档中并不直接使用"闭包"这一术语,但Lambda表达式的行为本质上实现了闭包的功能。 什么是闭包 闭包是指一…

闭包(Closure)是函数式编程中的一个重要概念,在Java 8中通过Lambda表达式和函数式接口得到了支持。虽然Java官方文档中并不直接使用"闭包"这一术语,但Lambda表达式的行为本质上实现了闭包的功能。

什么是闭包

闭包是指一个函数(或方法)能够访问并记住其词法作用域(lexical scope)中的变量,即使该函数在其原始作用域之外执行。

Java中的闭包通过Lambda表达式和匿名内部类实现,具有以下特点:

  • 可以捕获外部作用域的变量
  • 保持这些变量的生命周期
  • 即使外部方法执行完毕,闭包仍可访问这些变量

Java中的闭包实现

Lambda表达式作为闭包

public class ClosureDemo {public static void main(String[] args) {int a = 10;// Lambda表达式捕获了外部变量aFunction<Integer, Integer> closure = i -> a + i;System.out.println(closure.apply(20)); // 输出30// 即使a超出作用域,闭包仍可访问它们// 因为闭包"记住"了这些变量System.out.println(f(closure)); // 输出110}public static int f(Function<Integer, Integer> closure){// 这里虽然只有100,但是仍然能访问到a这个参数return closure.apply(100);}
}

匿名内部类作为闭包

public class AnonymousClassClosure {public static void main(String[] args) {final String message = "Hello, ";Runnable runnable = new Runnable() {@Overridepublic void run() {// 访问外部final变量System.out.println(message + "World!");}};new Thread(runnable).start();}
}

Java闭包的关键特性

变量捕获规则

  • 局部变量:Lambda表达式或匿名内部类只能捕获final或等效final(effectively final)的局部变量

  • 实例变量和静态变量:可以自由访问和修改,不需要是final

闭包中的this关键字

在Lambda表达式中,this关键字指的是包含Lambda表达式的方法所在类的实例,而不是Lambda表达式本身。

public class ThisInClosure {private String name = "Outer";public void test() {String name = "Inner";Runnable r = () -> {System.out.println(this.name); // 输出"Outer"System.out.println(name);      // 输出"Inner"};new Thread(r).start();}
}

Java闭包的限制

  • 变量必须是final或等效final:Lambda表达式只能捕获不会改变的局部变量
  • 性能考虑:每次捕获变量都会创建一个新对象,可能影响性能
  • 内存泄漏风险:闭包可能意外延长对象的生命周期

Lambda表达式实现闭包的内部原理

还是以ClosureDemo为例,添加jvm参数,重新运行,打印lambda运行过程中jvm动态生成的类:

-Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles

如下:

final class ClosureDemo$$Lambda implements Function {private final int arg$1;private ClosureDemo$$Lambda(int var1) {this.arg$1 = var1;}public Object apply(Object var1) {return ClosureDemo.lambda$main$0(this.arg$1, (Integer)var1);}
}

这就看的很清楚了,lambda表达式捕获的变量会作为运行时动态生成的类的成员变量记录下来,因此当lambda表达式运行的时候就可以访问被捕获的变量了。


文章转载自:

http://AzsnHh3G.syhwc.cn
http://eRzU0nkQ.syhwc.cn
http://f3I0V5zm.syhwc.cn
http://Ma20TSEW.syhwc.cn
http://1ukCAUjj.syhwc.cn
http://E07MA86N.syhwc.cn
http://iufMwj32.syhwc.cn
http://HOX6vQs2.syhwc.cn
http://YVQatHOe.syhwc.cn
http://jlwa920R.syhwc.cn
http://YTr88vR9.syhwc.cn
http://dnpH4dEf.syhwc.cn
http://5KTQI4lx.syhwc.cn
http://Tc5s8CQ4.syhwc.cn
http://uquuqCxj.syhwc.cn
http://lXwP3aU3.syhwc.cn
http://eQWNZmUQ.syhwc.cn
http://jKY9XBQU.syhwc.cn
http://aonwkZ48.syhwc.cn
http://isXPMbvd.syhwc.cn
http://NOpkfErK.syhwc.cn
http://NDsTd2P9.syhwc.cn
http://QxUfjDQe.syhwc.cn
http://cuUtV5TU.syhwc.cn
http://O7llYEiJ.syhwc.cn
http://FeFxBbnV.syhwc.cn
http://jHhhRb2Y.syhwc.cn
http://LsPwEz0x.syhwc.cn
http://Aarv66so.syhwc.cn
http://hBrnpaxt.syhwc.cn
http://www.dtcms.com/wzjs/690089.html

相关文章:

  • 网络营销方式分析厦门seo推广优化
  • 沙田镇网站建设旅行社手机网站建设成
  • 承德市建设局网站电话今天的新闻联播文字版
  • wordpress网站设置关键词设置微信公众号文章里好看的图片在哪个网站做
  • 吴桥做网站家电企业网站模板
  • 网站建设与管理 试卷wap网页游戏枭雄
  • 建筑公司网站制作网站点击快速排名
  • 西昌网站建设公司网站建设公司优惠大酬宾活动
  • 网站开发字体西安市建设工程交易信息网
  • 手机网站首页模板网站文字源码
  • 网站做缓存网站界面设计基础
  • 餐饮类网站设计wordpress主题的连接函数
  • 怎样在网做旅游网站如何做网站好看
  • jsp个人网站设计南县网站建设推荐
  • 响应式网站建设联雅网站开发中加入cad功能
  • 深圳营销型网站策划网站建立时间
  • 网站后台维护内丘企业做网站
  • 莒县做网站的电话深圳响应式网站建设
  • 网站建设与管理是什么网页设计精品课程网站
  • 莆田网站建设推广全球网站流量排名100
  • 建设部网站官网造价工程师孙思新移动商城积分兑换官网
  • 如何进行网站的建设和维护做衣服的教程网站有哪些
  • 合肥网站建设 卫来网络南昌污水厂最新数据
  • 重庆seo网站推广优化购物网站是多少
  • 南京网站制作百家号百度恶意屏蔽网站
  • 服务器网站托管最新军事新闻新浪网
  • 怎么注册网站平台手机网站模板建站
  • 旅游网站建设流程wordpress wordpress.org
  • 自己做网站内容读取太慢公司宣传片如何制作
  • 创新的微商城网站建设项目经理查询系统