碎碎念: 最近总算给自己打气开始了解Java语言。以下均来自廖雪峰Java教程的笔记

基本单位为class

  • 通常大写字母开头

基本变量类型

  • 整数: byte, short, int, long
  • 浮点数: float, double
  • 字符类型: char
  • 布尔类型: boolean

常量

  • 定义变量时加finnal修饰符

var关键字

  • var sb = new StringBuilder() 等价于 StringBuilder sb = new StringBuilder()

字符串类型

  • 字符串是个引用类型
  • 使用+连接任意字符串和其他数据类型
  • 空值为null

数据

  • 有默认值,整型是0,浮点型是0.0,布尔型是false
  • 空间大小不可变,长度用.length 获取
  • 初始化指定值: int[] ns = { 68, 79, 91, 85, 62 }

判断是否相等

  • 引用类型 == 判断是否指向同一个对象, .equals 判断值是否相等,null.equals会报错NullPointerException
  • 浮点数a,b 用Math.abs(a-b) < tolerence判断相等

类的构造

  • 构造方法名称和类名相同
  • 未定义时,编译器自动创建一个无参数的构造方法
  • 可以定义多个参数方法,编译器根据参数自动判断
  • 一个构造方法可以调用另一个构造方法,以便代码复用

类的方法重载(overload)

  • 方法名相同,但参数不同
  • 功能相似
  • 返回类型应相同

类的继承

  • 关键字extends
  • 最基础的类Object
  • 一个类有且只有一个父类,除了没有父类的Object之外
  • private -> protected 可使属性让子类可访问
  • 实例化类时,会先实例化父类即调用super()
  • upcasting向上转型: ParentClass p = new ChildrenClass()
  • downcasting向下转型: ChildrenClass c = (ChildrenClass) p
  • 判断类型 instanceof: c instanceof ParentClass

类的多态

  • 概念: 针对某个类的方法调用,其真正执行的方法取决于运行时期对应的实际类
  • Override覆写:与父类方法名相同,且参数和返回类型也相同。 可使用@Override显示声明
  • final
    • final修饰的方法可以阻止被覆写
    • final修饰的class可以阻止被继承
    • final修饰的field必须在创建对象时初始化,随后不可修改

类的抽象

  • 用abstract声明,用于定义接口规范
  • 抽象类不可实例化
  • 抽象方法必须被子类覆写

接口

  • 用interface声明, 类似于一个没有字段,都是抽象方法的抽象类
  • 所有方法默认为 public abstract
  • 接口用extends声明继承接口
  • 具体的类用implements声明实现接口
  • 一个类可以实现多个接口
  • default方法不需要被覆写

静态字段

  • 用static声明,所有实例共享,推荐用 .字段调用
  • 接口可以定义静态字段,为public static final类型

静态方法

  • 用static声明,所有实例共享,只能访问静态字段,不能访问this,常用于工具函数

  • 声明: 文件首行 package 路径
  • 导入: import path.Class
  • 简单类名查找顺序:当前package -> 导入的package -> java.lang

作用域

  • 包作用域是指一个类允许访问同一个package的没有public、private修饰的class,以及没有public、protected、private修饰的字段和方法
  • 如果不确定是否需要public,就不声明为public
  • 一个.java文件只能包含一个public类,但可以包含多个非public类