Java新特性

本文介绍了Java9的基础设置,包括JDK的下载与安装,重点讲解了Java-9的新特性如钻石操作符、try-with-resources语句、接口私有方法以及String底层存储结构的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境准备

jdk下载地址

https://www.injdk.cn/

Java版本向下兼容,直接下载16或以上版本

 jdk安装

将下载后tar包解压到对应路径即可

idea创建Java项目

选择安装好的Java版本

 Java-9新特性

钻石操作符语法升级

代码中new Person<>();中<>的泛型可以省略

public class Demo1 {
    public static void main(String[] args) {
        Person<String> person = new Person<>(){
            @Override
            public void run(String t) {
                System.out.println("Person run. Override, t:" + t);
            }
        };

        person.run("123");
    }
}

class Person<T> {
    public void run(T t) {
        System.out.println("Person run. t=" + t);
    }
}

 try语句升级

public class Demo2 {
    public static void main(String[] args) throws FileNotFoundException {
        // java7
        InputStreamReader isr = null;
        try {
            isr = new InputStreamReader(new FileInputStream("C:\\Users\\16619\\test.txt"));
            int read = isr.read();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (isr != null) {
                try {
                    isr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }

        // java8
        try (InputStreamReader isr2 = new InputStreamReader(new FileInputStream("C:\\Users\\16619\\test.txt"))) {
            int read = isr2.read();
        } catch (Exception e) {
            e.printStackTrace();
        }


        // java9
        InputStreamReader isr3 = new InputStreamReader(new FileInputStream("C:\\Users\\16619\\test.txt"));
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\16619\\test.txt"));
        try (isr3; osw) {
            int read = isr3.read();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

下划线标识符限制(了解)

Java9开始不允许使用"_"单独作为标识符

 接口私有方法

public class Demo4 {
    
}

/**
 * Java7
 * 接口中只能有抽象方法
 */
interface Inter1 {
    void methodA();
}

/**
 * Java8
 * 接口中可以定义static/default修饰的非抽象方法
 */
interface Inter2 {
    static void methodA() {

    }

    default void methodB() {

    }
}

/**
 * Java9
 * 接口中可以定义static/default/private修饰的非抽象方法
 */
interface Inter3 {
    static void methodA() {
    
    }

    default void methodB() {
        methodC();
    }
    
    private void methodC() {
        System.out.println("i am private.");
    }
}

String底层存储结构变化

Java8

使用cahr[],占用空间16bit

Java9

byte[],占用空间8bit

原因:大多数String对象只包含latin-1字符,这样的字符只需要一个字节的储存空间,因此这样的String对象内部的字符数组有一半的空间是没用的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值