JAVA入门

Java8新特性

Java 8引入了许多新特性和改进,其中一些最显著的包括:

  1. Lambda 表达式:Lambda 表达式是 Java 8 中最显著的新特性之一。它允许在方法内部定义匿名函数,从而更容易实现函数式编程。这使得代码更简洁和可读,并提供了更好的抽象机制。

    (a, b) -> a + b
  2. 函数式接口:Java 8引入了函数式接口概念,这是一种只有一个抽象方法的接口。这为Lambda表达式提供了类型和基本的函数式编程支持。例如,java.util.function 包中包含了许多常用的函数式接口,如 ConsumerFunctionPredicate

  3. 方法引用:方法引用允许您使用已存在的方法来实现函数式接口。有四种主要的方法引用类型:静态方法引用、实例方法引用、构造方法引用、类构造方法引用。

    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    names.forEach(System.out::println);
  4. 流 (Stream):Java 8引入了Stream API,它提供了一种用于处理集合数据的高级抽象方式。使用Stream,您可以轻松地进行过滤、映射、归约和其他数据处理操作。

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = numbers.stream()
                    .filter(n -> n % 2 == 0)
                    .mapToInt(Integer::intValue)
                    .sum();
  5. 默认方法 (Default Method):接口中可以包含默认方法的定义,这使得向接口添加新方法时不会破坏已经实现该接口的类。

    interface MyInterface {
        default void myDefaultMethod() {
            // 默认实现
        }
    }
  6. 新的日期和时间 API:Java 8引入了java.time 包,提供了全新的日期和时间 API,以替代旧的 DateCalendar 类。

    LocalDate today = LocalDate.now();
    LocalTime now = LocalTime.now();
  7. 新的 JavaScript 引擎:Java 8引入了 Nashorn JavaScript 引擎,可用于在Java应用程序中嵌入和执行JavaScript代码。

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    engine.eval("print('Hello, world!')");
  8. 并行数组:Java 8引入了并行数组,可用于在多核处理器上并行处理大规模数据。

    int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8};
    int sum = Arrays.parallelStream(numbers)
                    .sum();

这些新特性和改进使Java 8成为了一个更强大、更现代的编程语言,更容易进行并发编程和函数式编程。它提供了更多的工具来简化和改进Java应用程序的开发。

Java基本数据类型

Java 的基本数据类型包括以下八种:

  1. byte:字节类型,8 位,范围为 -128 到 127。用于节省内存空间。

    byte myByte = 42;
  2. short:短整数类型,16 位,范围为 -32,768 到 32,767。

    short myShort = 1000;
  3. int:整数类型,32 位,范围为 -2^31 到 2^31 - 1。

    int myInt = 12345;
  4. long:长整数类型,64 位,范围为 -2^63 到 2^63 - 1。

    long myLong = 1234567890L;
  5. float:单精度浮点类型,32 位,用于表示小数。通常用 f 后缀表示。

    float myFloat = 3.14f;
  6. double:双精度浮点类型,64 位,通常用于表示小数。

    double myDouble = 3.14159265359;
  7. char:字符类型,16 位,用于表示一个 Unicode 字符。

    char myChar = 'A';
  8. boolean:布尔类型,用于表示真或假。

    boolean myBoolean = true;

这些基本数据类型用于存储不同类型的数据,根据需要选择合适的类型以节省内存并确保数据的准确性。例如,使用 byte 类型来存储年龄通常足够,而使用 double 类型来存储精确的浮点数值。

除了基本数据类型,Java 还提供了对象数据类型,如 StringIntegerDouble,用于处理更复杂的数据。但这些对象数据类型通常包装在基本数据类型之上,以提供额外的功能。

Java重点内容总结

Java 是一门功能强大的编程语言,有一些主要的重点概念,其中一些可能较难理解。以下是一些 Java 中的重难点内容以及相应的示例:

  1. 面向对象编程(OOP):Java 是一门面向对象的语言,它强调类和对象的概念。在 Java 中,你可以创建类和对象,这些对象可以包含属性和方法。

    // 创建一个类
    class Dog {
        String name;
    
        // 构造方法
        public Dog(String name) {
            this.name = name;
        }
    
        // 方法
        public void bark() {
            System.out.println(name + " is barking!");
        }
    }
    
    // 创建对象
    Dog myDog = new Dog("Buddy");
    myDog.bark();
  2. 继承:Java 支持继承,一个类可以派生自另一个类,从而获得其属性和方法。

    // 基类
    class Animal {
        void eat() {
            System.out.println("Animal is eating");
        }
    }
    
    // 派生类
    class Dog extends Animal {
        void bark() {
            System.out.println("Dog is barking");
        }
    }
  3. 多态:Java 具有多态性,允许一个对象在不同上下文中采用不同的行为。

    Animal myDog = new Dog();
    myDog.eat(); // 调用 Dog 类的 eat 方法
  4. 接口:接口定义了一组抽象方法,类可以实现接口以提供这些方法的具体实现。

    interface Drawable {
        void draw();
    }
    
    class Circle implements Drawable {
        public void draw() {
            System.out.println("Drawing a circle");
        }
    }
  5. 异常处理:Java 强制处理异常,使用 try-catch 块来捕获和处理异常。

    try {
        int result = 5 / 0; // 产生 ArithmeticException
    } catch (ArithmeticException e) {
        System.out.println("Division by zero is not allowed");
    }
  6. 多线程编程:Java 具有强大的多线程支持。你可以创建多个线程来执行并发任务。

    class MyThread extends Thread {
        public void run() {
            System.out.println("Thread is running");
        }
    }
    
    MyThread thread = new MyThread();
    thread.start(); // 启动线程
  7. 集合框架:Java 提供了各种集合类来处理不同类型的数据。例如,ArrayList 用于存储一组对象。

    ArrayList<String> names = new ArrayList<>();
    names.add("Alice");
    names.add("Bob");
    System.out.println(names.get(0)); // 输出 "Alice"
  8. Lambda 表达式:Java 8 引入了 Lambda 表达式,它允许你以更简洁的方式编写函数式接口的实现。

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    numbers.forEach(n -> System.out.println(n));

思考

  1. Java 中的接口和抽象类有什么区别?
    接口是抽象方法的集合,抽象类是抽象方法和具体方法的集合。
  2. 什么是泛型?
    泛型允许你使用一个通用类型来表示多个类型。
  3. 什么是 Java 注解?
    注解是元数据,用于为 Java 代码提供额外的信息。注解可用于生成文档,跟踪代码中的依赖关系,甚至在运行时执行检查和编译时检查。
  4. 什么是 Java 反射?
    Java 反射使你可以在运行时查看和修改 Java 对象。
  5. 什么是 Java 序列化?
    Java 序列化允许你使用 ObjectOutputStreamObjectInputStream 保存和读取 Java 对象。
  6. 什么是 Java 异常处理?
    Java 异常处理通过检查异常,参数检查,运行时异常和错误处理来处理错误。
  7. 什么是 Java 枚举?
    Java 枚举允许你声明一个枚举类型,其中每个常量都是枚举类型中的唯一实例。
  8. 什么是 Java 注解处理器?
    Java 注解处理器允许你扫描和处理 Java 源文件。
  9. 什么是 Java 集合?
    Java 集合用于存储和操作数据。Java 集合类提供了一种存储和访问对象的统一方式。
  10. 什么是 Java 泛型?
    Java 泛型允许你使用一个通用类型来表示多个类型。
  11. 什么是 Java 并发?
    Java 并发用于在 Java 程序中实现并发。
  12. 什么是 Java IO?
    Java IO 用于读取和写入原始数据。
  13. 什么是 Java 字符串?
    Java 字符串用于存储和操作文本。
  14. 什么是 Java 字符串?
    Java 字符串用于存储和操作文本。
  15. Java中如何创建线程?
    Java 提供了三种创建线程的方法:
  • 继承 Thread
  • 实现 Runnable 接口
  • 实现 Callable 接口
  1. Java 中的同步是什么?
    Java 同步用于防止线程冲突。
  2. Java 中的同步锁是什么?
    Java 同步锁用于防止线程冲突。
  3. Java 中的同步集合是什么?
    Java 同步集合用于防止线程冲突。
  4. Java 中的同步方法是什么?
    Java 同步方法用于防止线程冲突。
  5. Java 中的同步代码块是什么?
    Java 同步代码块用于防止线程冲突。
  6. Java 中的同步类是什么?
    Java 同步类用于防止线程冲突。
  7. Java 中的同步变量是什么?
    Java 同步变量用于防止线程冲突。
  8. Java中的Builder和Buffer有什么区别和联系?
    在 Java 编程中,“Builder” 和 “Buffer” 是两个不同的概念,它们用于不同的目的,并且通常与不同的数据类型相关联。
  • “Builder” 通常用于创建不可变对象(Immutable Objects)。它是一种设计模式,目的是解决创建复杂对象的问题,允许你通过一系列的方法链式调用来设置对象的属性,最后返回一个不可变的对象。这有助于确保对象在创建后不会被修改,提高了线程安全性。
  • 常见的使用场景包括 StringBuilderStringBuilderDateTimeFormatter.Builder 等。
StringBuilder builder = new StringBuilder();
builder.append("Hello").append(" ").append("World");
String result = builder.toString();
  • “Buffer” 通常用于缓存数据,特别是在处理 I/O 操作或大量数据时。它是一块内存区域,可以用来临时存储数据。通常与 I/O 操作(如文件读写、网络通信)或处理大型数据集合时结合使用。
  • 常见的使用场景包括 ByteBuffer(用于处理二进制数据)、CharBuffer(用于处理字符数据)、StringBufferStringBuilder 的线程安全版本)等。
ByteBuffer buffer = ByteBuffer.allocate(1024);
// 将数据写入缓冲区
buffer.put("Hello, World".getBytes());
// 从缓冲区读取数据
byte[] data = new byte[buffer.remaining()];
buffer.get(data);

总之:

  • “Builder” 用于构建不可变对象,支持链式方法调用,返回最终不可变对象。
  • “Buffer” 用于临时存储数据,通常用于 I/O 操作和数据处理。
  • 它们在概念上不同,没有直接的联系,因为它们用于不同的用途和场景。

JAVA入门
https://www.lihaibao.cn/2023/09/22/JAVA入门/
Author
Seal Li
Posted on
September 22, 2023
Licensed under