内部类
弥补继承的不足(可以继承多个类)
在一个类的内部创建一个新的类
用protect,private修饰
- 普通的内部类
- 静态的内部类
前两种与外部类使用方法相同
非静态内部类不允许有静态成员 - 方法中的内部类
- 匿名内部类(在很多API里比较常见)
直接new一个接口,大括号里写抽象类的实现
创建非静态内部类对象:
Outer o = new outer();
Outer.Inner i = o.new Inner();
创建静态内部类对象:
Outer.Inner i = new Outer.Inner();
内部类访问外部类同名成员时用Outer.this访问
Lambda表达式
又称闭包
(paramenters)->expression
或
(paramenters)->{statements;}
outer.operator(()->{
System.out.println("lambda表达式");
});
方法参数为接口类型,抽象类都可用Lambda表达式
常用类
时间日期相关类
Date, Calender类
Date中好多方法已经过时了
String到Date
public Date convertStrToDate(String date){
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
return sdf.parse(date);
}
catch(ParseException e){
e.printStackTrack();
}
return null;
}
获取当前日期的某个值必须用get方法
控制台输入
Scanner
//控制台输入输出
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(str);
}
nextline()方法可以读取一行数据并返回
基本数据类型的封装类
基本数据类型 | 封装类 |
---|---|
int | Integer |
char | Character |
基本数据和字符串到封装类用构造器
字符串到基本数据类型用parseType (Type是要转换的类型)
基本数据类型到字符串用字符串的vauleOf方法
Integer num = 10;
int a = num;
Math类
都是静态方法,可以直接用类名访问
//随机数3-7
int i = (int)(Math.random()*5+3);
异常
常见的两种错误:
语法错误(编译能检查出来)
运行时的错误(异常,导致整个程序无法继续运行)
Java中异常处理的机制:抛抓模式
Error:内部错误及资源耗尽等情况,灾难性错误,一般不在程序中捕获
RuntimeException:非检查性异常,大部分是程序员可以避免的,不强制捕获
非RuntimeException:可预知的外界原因造成(eg:文件不存在,断网),需捕获处理
Java中常见的异常类:(不用做捕获处理)
异常 | 说明 |
---|---|
Exception | 异常层次结构的根类(父类) |
RuntimeException | 许多java.long异常的基类 |
ArithmeticException | 算数异常,如:除数为0 |
IllegalArgumentException | 方法接收到非法参数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 访问空引用 |
ClassNotFoundException | 不能加载所需的类 |
NumberFormatException | 字符串转换数字失败 |
IOException | I/O异常的根类 |
FileNotFoundException | 找不到文件 |
EOFException | 文件结束 |
抛出(throw)异常
捕获(catch)异常 (通过try使程序可以继续运行,对于不可提前规避的错误)
try catch结构
...
try{
... //监视可能发生异常的代码段
}
catch(异常种类){ //捕获发生的异常
... //对异常进行处理
}
finally子句
无论try中语句是否抛出异常,程序都执行它
当try或catch中有return语句时,会执行完finally子句再返回
Finally子句中一般是关闭某个文件,数据库连接等
throws和throw
throws用于声明方法抛出的异常,此时异常不用try/catch语句处理,而是向上一层传达,让其调用者处理
throw语句用于手工抛出异常
throw new抛出的一般是自定义异常
线程和进程
进程:独立运行的程序,独立的数据空间和资源
线程:依附于进程存在的独立的指令序列,共享数据和资源
线程的生命周期:
线程的创建:
- 继承Thread类:是一个线程有生命周期,继承它的类本身也是一个线程
- Runnable接口:(更加常见)只定义了线程的行为,由实现其run方法来实现,本身不是一个线程
调用start()方法才具有线程的行为
接口解决单继承问题
synchronized(this.obj) //同步锁
对于临界资源