#在控制台中
java -version
jshell
System.out.println("Hello world");
String hello = "hello world";
System.out.println(hello);
创建一个module-info.java类声明一个模块,一个模块只能有一个文件,且在顶层包的目录下
使用exports来声明可以被外部引用的包,可以有多个exports语句
module func1 {
export com.intmall.func;
}
使用requires来声明依赖的外部的模块,可以有多个requires语句
module func2 {
requires func1;
}
必须能推导出实际类型
只能用于局部变量
public class Test {
public static void main(String[] args) {
var test = new Test();
var list = new ArrayList<>();
}
}
JDK8及之前的版本,java需要编译后才能执行
javac Test.java
java Test
在JDK10中,可以直接执行java文件了
java Test.java
Shebang通常出现在类Unix系统的脚本中第一行,作为前两个字符
#!/bin/sh 使用sh,即Bourne shell或其它兼容shell执行脚本
#!/usr/bin/python -O 使用具有代码优化的Python执行
#!/usr/bin/php 使用PHP的命令行解释器执行
创建一个没有后缀的文件,如果test
#!D:\Java\jdk-17\bin\java --source 11
public class Test {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
使用git-bash命令行执行
cd /d/java/work/
./test
使用--source 11
可以用java
命令执行非.java后缀的文件
cp Test.java test.sh
java --source 11 test.sh
#双引号、回车不需要转义
public class Test {
public static void main(String[] args) {
String json = """
{
"name": "Zhang"
}
""";
System.out.println(json);
}
}
public class Test {
public static void main(String[] args) {
Object a = "hello";
if (a instanceof String) {
String b = (String) a;
System.out.println(b);
}
if (a instanceof String b) {
System.out.println(b);
}
}
}
public class Test {
public static void main(String[] args) {
#执行时,错误信息中会包含那个变量值为null的
List data = null;
System.out.println(data.size());
}
}
纪录数据的类,自动生成类似get/set的方法;初始化后不能修改属性的值
public record TestRecord(String username, String password) {
}
public class Test {
public static void main(String[] args) {
TestRecord testRecord = new TestRecord("Zhang", "123456");
System.out.println(testRecord.username());
}
}
使用sealed显式管理类的继承关系
父类如果是sealed类,则必须至少有一个子类
sealed类的子类,必须是final,sealed,no-sealed之一
public sealed class Parent permits Child {
}
#打破sealed继承规则
public non-sealed class Child extends Parent {
}
public final class Child extends Parent {
}
public class Test {
public static void main(String[] args) {
Object a = "hello";
switch (a) {
case String b -> System.out.println(b);
case Integer b -> System.out.println(b);
case Long b -> System.out.println(b);
default -> System.out.println("default");
}
}
}
JIT(Just-in-Time实时编译) Java跨平台的基础
AOT(Ahead-of-Time预编译) 无法跨平台
AOT优势
启动和运行的速度快
打包体积小
AOT缺点
编译后的程序不支持跨平台
不支持动态功能,如AOP
热点应用启动时,大量请求进来,导致多个类同时触发JIT超时,CPU升高性能下降
解决方法
预热:初始让程序自动运行热点代码几百次
流量控制:启动时小流量,运行几分钟后再放到正常流量