碎碎念: 最近总算给自己打气开始了解Java语言。以下均来自廖雪峰Java教程的笔记
基本单位为class
基本变量类型
- 整数: byte, short, int, long
- 浮点数: float, double
- 字符类型: char
- 布尔类型: boolean
常量
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类