Idea快捷键:
Main 打印main函数
.fori for循环
.forr 倒序for循环
sout 输出函数
集体单行注释:ctri+/
多行注释:ctri+shift+/
static:
Static修饰成员变量:如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。
Static修饰成员方法:调用时不需要通过对象 通过方法即可
静态方法不能直接使用非静态变量
静态方法不能使用this,因为this指的是当前对象,但静态指的是所有对象
Arrays中常用两个方法:
tostring 和 sort(可对数字和字符串)
继承和多态:
1.继承
继承主要解决的问题:共性抽取
使用extends
一个类的直接父类只能有一个
区分子类方法中重名的三类变量:
局部变量:直接写变量名
本类的成员变量:this.成员变量名
父类的成员变量:super.成员变量
重载(overload):方法名一致,参数列表不一样
重写(override):方法名和参数列表都一样
重写中,子类方法的返回值必须小于等于父类方法的返回值范围
object是所有类的公共最高父类
子类方法的权限必须大于等于父类方法的权限
public>protected>default(什么都不写)>private
一般来说,方法的返回值范围和权限都是相等的
父子类构造方法的访问特点:
子类必须调用父类的构造方法,不调用则系统自动赠送(super)
子类构造可以通过super关键字调用父类有参数的构造函数
super只能有一个,且必须是子类构造方法的第一个语句
this关键字的用法:
在本类的成员方法中,调用本类的成员变量或者另一个成员方法
2.抽象类
概念:如果父类当中的方法不确定如何进行{}方法体实现,那么这就应该是一个抽象方法
抽象方法:加上abstract关键字,去掉大括号,直接分号结束。
抽象类:在class前加入abstract
抽象方法所在的类必须是抽象类
抽象类中可以有普通成员方法
抽象方法和抽象类的使用
1.不能直接创建抽象类对象
2.必须用一个子类来继承抽象父类
3.子类必须覆盖重写抽象父类中的所有抽象方法
4.覆盖重写时,子类需要去掉abstract关键字,然后加入大括号,写入自己需要的功能
5.覆盖重写时,最好在前面加上@override ,显得专业
6.覆盖重写时,可以直接鼠标点击extends后面的父类名称,按alt+回车
3.接口
1.如何定义一个接口:
public interface 接口名称 {
//接口内容
}
2.接口中内容:
1.常量
2.抽象方法
3.默认方法
4.静态方法
3.接口中的抽象方法
1.接口中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2.这两个关键字可以选择性省略
3.接口不能直接使用,必须有一个实现类来实现此接口
格式: public class 实现类名称 implements 接口名称{
//。。。
}
4.接口的实现类必须覆盖重写接口中所有的抽象方法
4.接口中的默认方法
1.格式: public default 返回值类型 方法名称 (参数列表){
}
2.接口中的默认方法,可以解决接口升级的问题:在已有接口中添加新内容,不影响已有实现类的使用
3. 接口的默认方法可以被接口的实现类直接调用,即:调用默认方法,如果实现类里面没有,会向上找接口
4. 接口的默认方法可以被接口的实现类覆盖重写
5.接口的静态方法:
1.格式:将abstract或者default换成static即可
2.不能通过接口实现类的对象来调用接口中的静态方法
3.实现方法:接口名称.静态方法名(参数)
6.接口中常量
1.必须用public static final修饰
2.final如果引用为基本数据类型,则该引用为常量,该值无法修改(不止在接口中);
3.接口名称调用
4.接口中的常量必须赋值
5.常量的名称一般用完全大写,用下划线进行分割(shift+f6),如:NUM_OF_MYCLAS
7.一个类可以同时实现多个接口,如
需要覆盖重写里面全部的抽象方法
4.多态
1.多态的概述
针对对象:既有父类又有子类(既有接口又有实现类)
代码中体现:父类引用指向子类对象,即父类名称 对象名 = new 子类对象(),右侧创建一个子类对象,把它当做父类来看待使用
2.多态的优点
3.访问成员变量的两种方式:
1.直接通过对象名称访问成员变量:看等号左边是谁就优先用谁,没有则向上找
2.间接通过成员方法访问成员变量:看该方法属于谁就优先用谁,没有则向上找(子类没有覆盖重写就是父,子类覆盖重写就是子)
4.访问成员方法的规则
看new的是谁就优先用谁,没有就向上找
成员方法:编译看左边 运行看右边
5.向下转型
对象一旦向上转型为父类,就无法调用子类原本特有的内容了,因此需要向下转型来还原
6.instance关键字
怎样才能知道一个父类的引用对象,本来是什么子类?
格式:
对象 instanceof 类名称
5.final关键字
1.概念与四种用法
final代表最终、不可改变的
常见四种用法:
1.修饰一个类
2.修饰一个方法
3.修饰一个局部变量
4.修饰一个成员变量
final修饰一个类
格式:
public final class 类名称{
}
含义:当前类不能有任何子类
final修饰一个成员方法
格式:
修饰符 final 返回值类型 方法名称(){
}
含义:不能被子类覆盖重写
final修饰局部变量
此时局部变量不能被重新赋值 即只能有一次赋值
final修饰成员变量
final关键字修饰成员变量 成员变量也不能再被改变
注意:用final修饰成员变量时必须对成员变量赋值(因为成员变量不赋值的话默认为0)
6.四种权限修饰符
7.内部类
1.内部类的概念
整体和部分的关系
分类:1.成员内部类 2.局部内部类
2.成员内部类
格式:你懂得
注意:外部类调用内部类 需要内部类对象
调用成员内部类有两种方式:
1.间接:在外部类方法当中建立内部类对象,进而调用内部类方法
2.直接:外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称()
如果外部类和内部类出现了同名的变量,那么格式是:
外部类名称.this.外部成员变量名
3.局部内部类
概念:类定义在方法内部
具体使用没细看
4.随机发红包启示
方案1:前一个红包在总金额里面随机取,下一个红包在剩余金额中随机抽取
方案2:方案1可能导致某一个红包数额特别大,因此最大金额设置为(LeftMoney/LeftPerson)*2,即剩余金额平均值的2倍,在0.01到最大金额中间抽取
常用api
object类
1.tostring方法:打印对象的地址或者成员变量(使用generate中equal and hashcode重写),个人感觉没有意义
2.equal方法:未重写时,比较两个对象的地址值,没有意义
重写之后(使用generate中equal and hashcode)比较构造方法中的参数是否相同,相同则返回true
date类
- 计算时间的方法没有仔细看,用时百度即可
- DateFormat类:1.格式化日期(日期到文本) 2.解析(文本到日期)
- 计算两个日期之间间距多少天
解析:
解答:
Stringbuilder类
可以看做可变的字符串,主要用于字符串相加,可以提高字符串的操作效率
使用方法:
- StringBuilder sb = new StringBuilder (字符串参数)
- append方法:添加数据,sb.append(“abc”)
- tostring方法:转向String
包装类
对应创建Arrylist时<>里的内容
集合
**
Collection集合
**
集合与数组的区别
- 数组长度不可变,集合长度可变
- 数组可以存储基本元素,也可以存储对象;集合只能存储对象
集合框架
详细框架
集合常用功能
Iterator迭代器
collection集合中没有索引,所以要遍历的话需要迭代器
迭代器是通用的取出集合中元素的方式
工作方式:在取出元素前先判断集合中是否还有元素,如果有就取出来,继续再判断,如果有就继续取出来
常用方法:
- boolean hasnext() :如果有元素可以迭代,那么返回true
- E next () 返回迭代的下一个元素
迭代器的使用步骤:
增强for循环
专门用来遍历数组和集合,不能对元素进行增删操作
泛型
概念:可以看做一种未知的数据类型,不知道用什么数据类型的时候,可以用泛型
创建集合对象的时候,就会确定泛型的数据类型
如:
把数据类型作为参数传递,把String赋值给E
泛型的定义和使用
定义含有泛型的类:
使用含有泛型的类:
定义含有泛型的方法:
使用含有泛型的方法:很简单,不需要在前面加<>,传入的是什么参数泛型就是什么类型
斗地主案例
启示:
- 洗牌时,可以用shuffle方法来打乱集合中元素的位置
- 发牌时,可以用索引对3取模,即%
list接口
特点:
- 有序
- 有索引
- 允许重复元素
常用方法:ArrayList集合
特点:增删慢,查询快
LinkedList集合
特点:
- 增删快,查询慢
- 是链表组成的集合,有很多在头和尾处理的方法
- 常用方法:
set集合
特点:
- 不允许重复元素
- 没有索引,不能用for循环遍历(用迭代器遍历)
- 无序,存储顺序和取出顺序可能不一致
- 底层是哈希表,查询速度非常快
collections集合工具类的方法
常用方法
使用:
- sort方法:
1.默认升序排序
2.要排序自定义的对象(如按年龄对person(age,name)进行排序时),需要实现Comparable接口,重写接口中的方法comparableTo定义排序规则
3.升序:this - o
降序:o - this
- sort方法第二个参数也可实现对person的排序(更简单)
o1-o2 升序,反之降序
Map集合
- 存储键值对
- key不能重复,value可以重复
- key和value数据类型可以不同
常用方法
- put方法:
- remove方法:
- get方法:
- 遍历MAP集合的方法:keySet、entrySet(用时再学)
异常和多线程
异常
异常的处理方式
关键字:try、catch、finally、throw、throws
throw关键字:
使用throw关键字在指定的方法中抛出指定的异常
使用格式: throw new ***Exception(“产生异常的原因”)
注意:
- 必须写在方法内部
- new的对象必须是Exception或者Exception的子类对象
- 抛出异常 我们就必须处理这个异常
- new后面是RuntimeException或者其子类对象时,可以不处理
- 创建的是编译异常时(写代码的时候报错),我们就必须处理这个异常,要么throw 要么try catch