0Pricing
Clojure Functional Programming & JVM Backend Development · 课时

从 Clojure 调用 Java

了解如何直接从 Clojure 代码调用 Java 方法、访问字段并实例化对象。

从 Clojure 调用 Java 是 CoddyKit 上的免费 Clojure Functional Programming & JVM Backend Development 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Clojure Functional Programming & JVM Backend Development 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Clojure Functional Programming & JVM Backend Development 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

Clojure & Java: Best Friends!

Clojure runs on the Java Virtual Machine (JVM), which means it can use all the amazing Java libraries directly! This is called Java Interop.

  • Access Java classes and methods.
  • Leverage the vast Java ecosystem.
  • Combine Clojure's power with Java's stability.

This lesson will show you how to call Java code from Clojure.

Creating Java Objects

To use a Java class, you often need to create an instance of it. In Clojure, you can do this using a special syntax.

  • Use (new ClassName args) or the shorthand (ClassName. args).
  • The . after the class name is a convenient way to call a constructor.

Example: (java.util.Date.) creates a new Date object.

Demo: New Date Object

Try creating a new java.util.Date object. It will represent the current date and time.

(ns my-app.core
  (:gen-class))

(defn -main
  "Creates and prints a new Java Date object."
  [& args]
  (let [current-date (java.util.Date.)]
    (println "Current date:" current-date)))

Calling Static Java Methods

Static methods belong to the class itself, not to a specific object instance. You can call them directly on the class.

  • Syntax: (ClassName/staticMethodName args)
  • The / separates the class name from the static method name.

Example: (java.lang.Math/random) calls the random static method of the Math class.

Demo: Math.random()

Let's get a random number using Java's Math/random static method. It returns a double between 0.0 (inclusive) and 1.0 (exclusive).

(ns my-app.core
  (:gen-class))

(defn -main
  "Generates and prints a random number using Java's Math/random."
  [& args]
  (let [rand-num (java.lang.Math/random)]
    (println "Random number:" rand-num)))

Calling Instance Java Methods

Once you have an object, you can call its instance methods. These methods operate on that specific object's data.

  • Syntax: (.methodName instance args) or (. instance methodName args).
  • The . before the method name indicates an instance method call.

Example: (.getTime my-date) calls the getTime method on the my-date object.

Demo: Date.getTime()

Create a Date object and then call its getTime() method. This method returns the number of milliseconds since January 1, 1970, 00:00:00 GMT.

(ns my-app.core
  (:gen-class))

(defn -main
  "Creates a Date object and calls its getTime() method."
  [& args]
  (let [current-date (java.util.Date.)
        time-in-millis (.getTime current-date)]
    (println "Current date:" current-date)
    (println "Milliseconds since epoch:" time-in-millis)))

Accessing Java Fields

Java objects can have fields (variables) that store data. You can access these fields directly from Clojure.

  • Syntax: (.-fieldName instance) for getting a field's value.
  • For static fields, use (.-staticFieldName ClassName).

Example: (.-out System) accesses the out static field of the System class, which is a PrintStream.

Demo: System.out Field

The java.lang.System class has a static field named out, which is a PrintStream object. We can access it to print to the console.

(ns my-app.core
  (:gen-class))

(defn -main
  "Accesses System.out and prints a message using its println method."
  [& args]
  (let [out-stream (.-out java.lang.System)]
    (.println out-stream "Hello from System.out!")))

Quick Check: Java Interop

You've learned how to interact with Java classes. Which Clojure expression uses the ClassName. shorthand to instantiate a java.io.File object for the path "myfile.txt"?

Recap: Java Interop Basics

Great job! You've learned the fundamentals of interacting with Java from Clojure:

  • Instantiate objects: Use (ClassName. args) or (new ClassName args).
  • Call static methods: Use (ClassName/staticMethodName args).
  • Call instance methods: Use (.methodName instance args) or (. instance methodName args).
  • Access fields: Use (.-fieldName instance).

This powerful capability allows you to leverage the entire Java ecosystem within your Clojure projects. Next, we'll explore implementing Java interfaces.

常见问题解答

「从 Clojure 调用 Java」课时是免费的吗?

是的 — 「从 Clojure 调用 Java」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Clojure Functional Programming & JVM Backend Development 课程的其余内容,请升级到 CoddyKit PRO。 Clojure Functional Programming & JVM Backend Development 课程共包含 4 节课。

「从 Clojure 调用 Java」这节课中我会学到什么?

了解如何直接从 Clojure 代码调用 Java 方法、访问字段并实例化对象。 你通过在浏览器中直接运行的动手代码来练习 Clojure Functional Programming & JVM Backend Development,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Clojure Functional Programming & JVM Backend Development 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Clojure Functional Programming & JVM Backend Development 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「从 Clojure 调用 Java」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Clojure Functional Programming & JVM Backend Development 课中编写并运行代码吗?

能。每节 Clojure Functional Programming & JVM Backend Development 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 从 Clojure 调用 Java
  2. 实现 Java 接口
  3. 利用 Java 库与工具
  4. 使用 Java 集合与数组
← 返回 Clojure Functional Programming & JVM Backend Development