JavaParser入门:以编程方式分析Java代码

JavaParser入门:以编程方式分析Java代码

Java系列 1年前 (2022-12-21) 浏览: 6379 评论: 0

是否可以解析代码并对其执行自动操作? JavaParser库(https://github.com/javaparser/javaparser)提供Java代码的抽象语法树。AST结构允许您以简单的编程方式使用Java代码。 当使用JavaParser时,我们通常希望每次都执行一系列操作。通常,我们希望对整个项目进行操作,因此,给定一个目录,我们将探索所有Java文件。该类应有助于完成以下操作:

Java反射真的慢吗?

Java反射真的慢吗?

Java系列 4年前 (2020-11-08) 浏览: 482 评论: 0

你是否听到人们说“Java反射太慢了”或“使用反射刚刚降低了性能”,但我还没有听到任何确切的数字。不如我们做些测试来了解真实情况。 下面我编写了一些示例代码来对典型的Java方法调用与基于反射的方法调用进行比较。结果正是我对JVM的期望。任何可优化的函数(比如返回一个常量,或者一个只依赖于输入的方法,或者像交换内存中的整数这样的简单操作)都会因为在方法中执行的工作太快而出现明显的减速。但是,当该方

Java8 Lambda和invokedynamic

Java8 Lambda和invokedynamic

Java系列 3年前 (2021-09-14) 浏览: 534 评论: 0

Java8于2014年3月发布,并引入了lambda表达式作为其旗舰功能。您可能已经在代码库中使用它们来编写更简洁、更灵活的代码。例如,您可以将lambda表达式与新的Streams API结合起来,以表达丰富的数据处理查询: int total = invoices.stream() .filter(inv -> inv.getMonth() == Month.JULY) .mapToIn

JUC并发包概述

JUC并发包概述

Java系列 3年前 (2021-10-30) 浏览: 387 评论: 0

java.util.concurrent包提供了创建并发应用程序的工具。 在本文中,我们将对整个包进行概述。 主要组件 java.util.concurrent包含的特性太多,无法在一次编写中讨论。在本文中,我们将主要关注此软件包中一些最有用的实用程序,如: Executor ExecutorService ScheduledExecutorService Future CountDownLatc

Java踩坑记系列之Arrays.asList

Java踩坑记系列之Arrays.asList

Java系列 4年前 (2020-02-12) 浏览: 678 评论: 0

java.util.Arrays的asList方法可以方便的将数组转化为集合,我们平时开发在初始化ArrayList时使用的比较多,可以简化代码,但这个静态方法asList()有几个坑需要注意: 一. 如果对集合使用增加或删除元素的操作将会报错 如下代码: List list = Arrays.asList("a","b","c"); list.add("d"); 输出结果: Exception

spring5新特性一览

spring5新特性一览

Java系列 3年前 (2021-06-07) 浏览: 476 评论: 0

Spring5于2017年9月发布,正式发布(GA),标志着自2013年12月以来的第一个主要Spring框架发布。它提供了期待已久的改进,并采用了一种新的编程范式,该范式基于反应性宣言中提出的反应性原则。 这个版本是Spring框架长期以来最激动人心的版本。与Java兼容™ spring5集成了jdk8和jdk9,为端点和web应用程序开发提供了一种改变游戏规则的方法。 事实上,反应式编程是本次

Java8接口–默认方法和静态方法

Java8接口–默认方法和静态方法

Java系列 2年前 (2022-03-29) 浏览: 163 评论: 0

在Java8之前,java中的接口只能有抽象方法。默认情况下,接口的所有方法都是公共和抽象的。Java8允许接口具有默认和静态方法。我们在接口中使用默认方法的原因是,允许开发人员向接口添加新方法,而不会影响实现这些接口的类。 为什么选择默认方法? 例如,如果A、B、C和D等几个类实现了一个接口XYZInterface,那么如果我们向XYZInterface添加一个新方法,我们必须更改实现该接口的所

递归算法科普二

递归算法科普二

Java系列 4年前 (2020-10-09) 浏览: 686 评论: 0

递归数据结构(结构递归) 递归在计算机科学中的一个重要应用是定义列表和树等动态数据结构。递归数据结构可以根据运行时需求动态地增长到理论上无限大的大小;相反,静态数组的大小必须在编译时设置。 当以递归的方式定义基础问题或待处理的数据时,递归算法特别适用。 本节中的示例说明了所谓的“结构递归”。这个术语指的是递归过程作用于递归定义的数据。 只要程序员从数据定义中派生模板,函数就采用结构递归。也就是说,

Java开发利器之重试器

Java开发利器之重试器

Java系列 4年前 (2020-02-12) 浏览: 894 评论: 0

在平时开发中经常会遇到需要调用接口和外部服务的场景,但是有些接口服务方不能立即返回数据,而是需要处理一段时间才能返回真实的业务数据,如果没有处理完则直接返回一个中间状态的结果。 业务场景: 代码中存在依赖不稳定的场景,需要使用重试获取预期结果或者尝试重新执行逻辑不立即结束,比如远程接口访问,数据加载访问,数据上传校验等 对于异常需要重试的场景,同时希望把正常逻辑和重试逻辑解耦 对方接口不支持异步回

java8 stream和Parallel Streams使用注意事项

java8 stream和Parallel Streams使用注意事项

Java系列 3年前 (2021-04-13) 浏览: 1745 评论: 0

当java8的第一个早期access版本出现时,最重要的演变似乎是lambdas。这一点现在正在改变,许多开发人员现在似乎认为流是最有价值的Java8特性。这是因为他们相信通过改变程序中的一个单词(用parallelStream替换stream),他们将使这些程序并行工作。许多Java8的传道者已经展示了这方面的惊人例子。这有什么问题吗?不,不是什么。很多事情: 并行运行可能是一个好处,也可能不是

JEP 425:虚拟线程(预览)

JEP 425:虚拟线程(预览)

Java系列 2年前 (2022-07-18) 浏览: 459 评论: 0

JEP 425:虚拟线程 Virtual threads(https://openjdk.org/jeps/425)以JDK 19作为预览API。虚拟线程是Project Loom的一部分,该项目自2017年以来一直在制作中。该项目旨在通过让开发人员使用熟悉的API编写和维护并发应用程序,并更高效地使用硬件资源,提高Java中的并发性能。 虚拟线程 动机 Java中的并发由线程处理。每个线程独立于

实现Runnable还是扩展Thread类?

实现Runnable还是扩展Thread类?

Java系列 2年前 (2022-07-19) 浏览: 299 评论: 0

“我应该实现Runnable还是扩展Thread类?”这是一个很常见的问题。 在本文中,我们将看到哪种方法在实践中更有意义以及为什么。 使用Thread 我们首先定义一个扩展线程Thread的SimpleThread类: public class SimpleThread extends Thread { private String message; // standard logger, co

Java内存模型-永久代PermGen和元空间Metaspace

Java内存模型-永久代PermGen和元空间Metaspace

Java系列 4年前 (2020-09-28) 浏览: 532 评论: 0

一. JVM内存模型 根据JVM规范,JVM内存分为五个部分:虚拟机堆栈、堆、方法区、程序计数器和本地方法堆栈。 虚拟机堆栈:每个线程都有一个私有堆栈,该堆栈在创建线程时创建。堆栈内部是一种称为“堆栈帧”的东西。每个方法将创建一个堆栈帧。堆栈帧存储局部变量表(基本数据类型和对象引用)、操作数堆栈、方法退出和其他信息。堆栈的大小可以固定,也可以动态扩展。当堆栈调用深度大于JVM允许的范围时,将抛出s

Java正则表达式API系列一

Java正则表达式API系列一

Java系列 2年前 (2022-05-05) 浏览: 351 评论: 0

在本文中,我们将讨论java正则表达式API,以及如何在Java编程语言中使用正则表达式。 在正则表达式的世界中,有许多不同的风格可供选择,比如grep、Perl、Python、PHP、awk等等。 这意味着在一种编程语言中工作的正则表达式可能在另一种编程语言中不工作。Java中的正则表达式语法与Perl中的最相似。 要在Java中使用正则表达式,我们不需要任何特殊设置。JDK包含一个特殊的jav

使用Byte Buddy轻松实现Java Agent

使用Byte Buddy轻松实现Java Agent

Java系列 3年前 (2021-08-19) 浏览: 1145 评论: 0

Java agent是在另一个Java应用程序(“目标”应用程序)启动之前执行的Java程序,为该agent提供修改目标应用程序或其运行环境的机会。在本文中,我们将从基础知识开始,使用字节码操作工具Byte Buddy实现高级代理。 在最基本的用例中,Java agent设置应用程序属性或配置特定的环境状态,从而使代理能够充当可重用和可插入的组件。下面的示例描述了这样一个代理agent,它设置了可

Micronaut框架简介

Micronaut框架简介

Java系列 3年前 (2021-04-21) 浏览: 1123 评论: 0

什么是Micronaut Micronaut是一个基于JVM的框架,用于构建轻量级、模块化的应用程序。Micronaut是由创建Grails的同一家公司OCI开发的最新框架,旨在使创建微服务变得快速和简单。 虽然Micronaut包含一些类似于Spring等现有框架的特性,但它也有一些新特性使它与众不同。通过对Java、Groovy和Kotlin的支持,它提供了多种创建应用程序的方法。 主要特点

Java9 Flow-Reactive Stream编程

Java9 Flow-Reactive Stream编程

Java系列 3年前 (2021-07-06) 浏览: 1073 评论: 0

在本文中,将通过一个示例了解Java9中的FlowAPI如何帮助我们使用新的发布者和订阅者接口构建反应模式。通过本文你可以了解这种新的编程风格及其优缺点。所有代码都在GitHub上:https://github.com/mechero/java-9-flow-reactive,因此您也可以自己运行或尝试一些修改。 Java9的Flow API简介 Java9在这个古老但非常流行的编程语言中引入了一

Java中的函数式编程

Java中的函数式编程

Java系列 3年前 (2021-10-17) 浏览: 321 评论: 0

函数式编程是一种编程范式,其中程序是通过应用和组合函数来构造的。它是一种声明式编程范式,其中函数定义是表达式树,每个表达式树返回一个值,而不是一系列改变程序状态的命令语句 维基百科 Java8引入了Lambda形式的函数式编程。术语Lambda来自Lambda演算,用于描述计算。 Lambda 我们可以将lambda表达式视为一个匿名函数,可以将其分配给变量并传递给方法,该方法接受函数接口作为参数

如何在eclipse中配置tomcat

如何在eclipse中配置tomcat

Java系列 3年前 (2021-02-19) 浏览: 1796 评论: 0

在本文中,我们将了解如何在eclipse中配置Tomcat,以及如何配置Tomcat来部署web应用程序。 Tomcat简介 Tomcat实际上由许多组件组成,包括tomcatjsp引擎和其他连接器,但是主要组件是Catalina,它提供了servlet规范的实现。当启动Tomcat服务器时,实际上是Catalina在启动。变量CATALINA_HOME是存储CATALINA文件位置的配置属性。

Java Stream API扩展简介

Java Stream API扩展简介

Java系列 3年前 (2021-10-20) 浏览: 431 评论: 0

Stream API Java8中引入的Stream API可能仍然是Java在过去几年中包含的最重要的新特性。我认为每个Java开发人员在其职业生涯中都有机会使用Java Stream API。或者我更愿意说,你可能每天都在使用它。但是,如果您将函数式编程提供的内置功能与其他一些语言(例如Kotlin)进行比较,您会很快意识到流 Stream API提供的方法数量非常有限。因此,社区创建了几个库

登录

忘记密码 ?

切换登录

注册