
java path/to/MyProg.java.java#!/usr/bin/env java --source 25
.java///usr/bin/env java --source 25 "$0" "$@" ; exit $?
~/bin/BackupFileFilter.java
class MyClass {
void main() { ... }
...
}
String[] parameterpublic, protected, static, but why?class MyClass, but just
var variable = initialValue; Type method(Type param, ... ) { ... }void main() { ... }
IO class with static println, print, readln~/bin/Audio.java and its shell predecessor ~/bin/audio
import module java.base; import module java.sql;
java.base modulejava.lang.Annotation/java.text.Annotation, java.lang.reflect.Proxy/java.net.Proxy, etc.import static java.lang.System.*; import static java.lang.Math.*; err.println(sqrt(PI));
brick = [ { 'x': 0, 'y': 0 }, { 'x': 10, 'y': 20 }] // top left, bottom right
record Brick(Point topLeft, Point bottomRight)
toString, equals, hashCoderecord Brick(...) {
static Brick parse(String s) { ... }
boolean overlaps(Brick other) { ... }
}
enum
var userIdMap = new HashMap<String, User>();beats
userIdMap = {} # Map from user ID to User object
var, diamondList.of, Map.of are good enoughvar seasons = List.of("Spring", "Summer", "Fall", "Winter");
BufferedReadermap, filter, count, collect, max/min/sum Path.of(".")).mydir, not mydir/src/main/javavoid main() throws Exception
paths.stream().map(Files::readString) // Error: incompatible thrown types...
p -> { try { return p->Files.readstring(p); } catch (IOException ex) { ... } }paths.stream().map(Sneaky.Function.of(Files::readString))
paths.stream().forEach(Sneaky.of(this::dump))
Sometype variable = Sneaky.call(() -> constructor or factory with checked exception);
Sneaky.of?find . -type f -printf '%s %p\n' | sort -nr | head
Sneaky.java?
var json = new String(URI.create("https://dog.ceo/api/breeds/image/random").toURL().openStream().readAllBytes())
var kv = Pattern.compile("\"(?<key>[^\"]+)\"\\s*:\\s*\"(?<value>[^\"]+)\"")
kv.matcher(json)
$3.find()
$3.group("value")
/edit command/save filename to save your snippetsjshell --class-path /home/cay/binor inside JShell:
/env --class-path /home/cay/bin
var json = new String(URI.create("https://dog.ceo/api/breeds/image/random").toURL().openStream().readAllBytes())
{"message":"https://images.dog.ceo/breeds/appenzeller/n02107908_754.jpg","status":"success"}
message value. Use your choice of Essential JSON or Java 28 with JEP 540.URL.openStream, Files.newOutputStream, InputStream.transferTo)jshell first to see if you like that exploratory workflow. If you use Java 28, start with
jshell --enable-preview --add-modules jdk.incubator.json
smalljava.Exec.exec("ls", "-al", ".") or smalljava.Exec.exec("cmd", "/c", "dir") in jshell~/books/cji4/katacodaMakeLab.javajbang app install jpm@codejive
jpm search jfiglet
jpm copy com.github.lalyos:jfiglet:0.0.9
ls deps
jshell --class-path deps/\*
import com.github.lalyos.jfiglet.FigletFont;
IO.println(FigletFont.convertOneLine("Hello, Basel"));
//DEPS com.github.lalyos:jfiglet:0.0.9
import com.github.lalyos.jfiglet.FigletFont;
void main() throws Exception {
IO.println(FigletFont.convertOneLine("Hello, Basel"));
}
jbang HelloBasel.java
//COMPILE_OPTIONS ... //RUNTIME_OPTIONS ...
Try it out with a preview feature of your JDK
jbang export fatjar HelloBasel.java java -jar HelloBasel-fatjar.jar
sdk use java 25-graal jbang export native HelloBasel.java
jbang --interactive HelloBasel.java
How can you tell the dependencies were loaded?
emacs, vim, etc. if you like.
jbang edit -b --live --verbose --open=codium HelloBasel.java
What links were made?


6 * 7 and run (Alt+Enter)var generator = new Random(); generator.nextInt()
BigInteger.probablePrime(100, generator)
addDependency("org.knowm.xchart:xchart:3.5.2");
import org.knowm.xchart.*;
double[] xData = IntStream.range(0, 100).asDoubleStream().map(i -> 2 * Math.PI * i / 100).toArray();
double[] yData = DoubleStream.of(xData).map(x -> Math.sin(x) + Math.cos(2 * x)).toArray();
XYChart chart = QuickChart.getChart("Sample Chart", "x", "y", "y(x)", xData, yData);
What is displayed? Why?
chart
BitmapEncoder.getBufferedImage(chart)
BitmapEncoder. What happens?import java.awt.image.BufferedImage;
import javafx.scene.image.ImageView;
import javafx.embed.swing.*;
void show(BufferedImage bi) {
ImageView iv = new ImageView();
var fxi = SwingFXUtils.toFXImage(bi, null);
iv.setImage(fxi);
display(iv);
}
and change the last cell to show(BitmapEncoder.getBufferedImage(chart))

jbang:
jbang install-kernel@jupyter-java jjava
TimeZone.getAv // Hit Tab now
TimeZone.availableIds().toList()
%maven org.knowm.xchart:xchart:3.5.2followed by
import org.knowm.xchart.*;
import java.util.stream.*;
double[] xData = IntStream.range(0, 100).asDoubleStream().map(i -> 2 * Math.PI * i / 100).toArray();
double[] yData = DoubleStream.of(xData).map(x -> Math.sin(x) + Math.cos(2 * x)).toArray();
XYChart chart = QuickChart.getChart("Sample Chart", "x", "y", "y(x)", xData, yData);
BitmapEncoder.getBufferedImage(chart)
BufferedImage is displayed
%maven org.dflib:dflib-jupyter:2.0.0-M7
import org.dflib.*;
import org.dflib.echarts.*;
DataFrame df = DataFrame.foldByRow("name", "salary").of(
"J. Cosin", 120000,
"J. Walewski", 80000,
"J. O'Hara", 95000);
var chart = ECharts
.chart()
.xAxis("name")
.series(SeriesOpts.ofBar(), "salary")
.plot(df);
chart
Does the chart show up? As image?
!pip install jbang # change to pip3 if pip command not found
import jbang
jbang.exec("trust add https://github.com/jupyter-java")
print(jbang.exec("install-kernel@jupyter-java --java 25 --enable-preview").stdout)
import os os.environ["JAVA_TOOL_OPTIONS"] = "-Xlog:os+container=off"
Java (JJava-j!)-tcp kernel
//DEPS or look for simple one-file solutions