一.内部类:(成员内部类、静态内部类、局部内部类、匿名内部类)
1. 成员内部类:
实现方法:
①
MemberInner.Inner
inner1 =
mi.new Inner();
inner1.innerFun();
②
MemberInner.Inner
inner2 = new
MemberInner().new
Inner();
inner2.innerFun();
若内部类有属性和外部类同名,如何访问到外部属性?
答案:若属性是实例属性,外部类名.this.属性名;
若属性是静态属性,外部类名.属性名;
public class MemberInner {
private int a = 10;
private static int b = 20;
public class Inner{
private int a = 30;
private int b = 40;
public void innerFun() {
System.out.println("MemberInnerDemo---Inner [a="
+
MemberInner.this.a
+ ", b=" +
MemberInner.b
+ "]");
System.out.println("MemberInnerDemo---Inner [a="
+ a
+ ", b=" + b + "]");
}
}
}
public static void main(String[] args) {
MemberInner.Inner
inner2 =
new MemberInner().new
Inner();
inner2.innerFun();
}
执行结果为:
MemberInnerDemo [a=10, b=20]
MemberInnerDemo---Inner [a=30, b=40]
2. 静态内部类:
只能访问外部类中的静态属性
如何实例化静态内部类?StaticInner.Inner inner1 = new StaticInner.Inner();
3. 局部内部类:
内部类定义在方法中
局部内部类只能访问方法中的final局部变量
4. 匿名内部类:
经常是实现接口的时候用匿名内部类(没有类名)
局部内部类只能在方法内部使用
局部内部类中要想访问方法中的变量,这个变量必须是常量。
匿名异步类:
执行流程:
选择增加throws的声明。
String变量,改变内容的时候回重新开辟内存,效率低,因此提出了StringBuffer
范型:
集合:
二、异常:
1. 错误
虚拟机错误
网络错误
程序逻辑
常见异常:(运行时异常)RunTimeException的子类,不用try-catch-finally
①算数运算异常 除0
②空指针异常
int [] array = null;
System.out.println(array.length);
③数组下标越界异常
int [] array = new int[10];
System.out.println(array[20]);
④类型转换异常
⑤输入不匹配异常
输入的时候输入字母
执行流程:
throw是直接杀死进程,程序员没有机会去处理
在程序中抛出异常:
写throw new (IO等等的异常),然后在出现错误的地方按照提示
选择增加throws的声明。
可选项依次是包含关系,下边的包含上边的。
声明的时候,选的是要全部包含的项
总结:程序出错时,会生成一个(或多个)异常类对象),用throw 抛生成的异常类对象
throws指出了方法可能抛出的多个异常类对象
三、String 和StringBuffer:
String存的是字符串常量,修改值,有内存申请
StringBuffer:申请内存,默认16,值可以修改
具体方法看手册
一个try块可以和多个catch块配合以处理多个异常(可以是分支或嵌套)
函数重载
equals是比较的值
String的方法:
String变量,改变内容的时候回重新开辟内存,效率低,因此提出了StringBuffer
注意
:Java中的字符串没有\0结尾
四、集合类 :
ArrayList<E> 泛型(模板类):add remove contains
LinkList<E>
Map<Key, Value>:哈希表
范型:
集合:
哈希表:
放入的顺序和插入的顺序无关
不能有重复的值
key值关键
作业:
1. Map例子
2. 生成四位随机码