Cheney的个人博客

Java学习日记

2022-01-16 · 3 min read

前言

其实我最早自学的一门语言就是Java。初一还是初二的时候某天在书店看到了这本书,头铁就买了下来(中文版豆瓣找不到,想来是太过久远,或者搞不好是盗版)。彼时根本不知道怎么学编程,看到代码片硬是背下来。

这学期开始Software的课好像都很喜欢用Java。而且我猜测KTH本科也很喜欢用Java,因为教授说“鉴于你们本科大多学过Java”。

之前实习的一个公司后端也用的是Spring,我也接过一些小需求,但基本上是人工机器学习:看着代码学代码,根本不知道内容是啥,但还是能写完。

综上所述,是时候学Java了。

2022.1.20

找到了一些网站:

  • https://www.codecademy.com/courses/learn-java/lessons/hello-world-java/exercises/introduction-to-java(UI好看)
  • https://www.programiz.com/java-programming(UI好看)
  • https://beginnersbook.com/java-tutorial-for-beginners-with-examples/(看起来内容比较全)
  • https://www.liaoxuefeng.com/wiki/1252599548343744/1255883772263712 (老牌)

从廖雪峰开始,先把中文的基础顺一遍。

基础

  1. object.equals(...)判断引用类型是否相等
  2. 调对象方法前记得判空
  3. switch记得写break: 老生常谈,VG01、VE280新手常见错误之一
  4. Java 12的Switch新改动
  5. do while循环:这个好像在其他语言很少见,偶尔在写其他语言的时候会很想念这个特性(冷知识:pascal里面叫repeat...until)

OOP

  • sealedpermits: 不允许继承/允许部分继承
public sealed class Shape permits Rect, Circle, Triangle {
    ...  // 仅允许Rect, Circle, Triangle继承
}
  • instanceof和强制类型转换简写
public class Main {
    public static void main(String[] args) {
        Object obj = "hello";
        if (obj instanceof String s) {  // 省去一步obj强转为s
            // 可以直接使用变量s:
            System.out.println(s.toUpperCase());
        }
    }
}

2022.1.21

继续OOP

  1. 包作用域:同一个package内,不写public/protected/private
  2. 包没有父子关系
  3. 推荐把private方法放到class后面定义(专注于public方法)

内部类 (Nested Class)

  • Inner Class:依附于Outer,能访问Outer的private
  • Anonymous Class
  • Static Nested Class:完全独立的类,但能访问外部private

classpath

  • classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class。
  • 推荐在启动JVM时设置classpath变量
  • java -classpath <path>或者java -cp <path>来设置

2022.1.22

Module

  • Package是简单的打包,无依赖关系;Module指定了依赖关系

StringBuilder

  • 可变对象,可以预分配缓冲区

JavaBean

  • private property
  • getter/setter