内部类
如果A类需要直接访问B类中的成员, 而B又需要A类的对象, 这时候为了方便设计和访问, 直接将A类定义在B类中, 就可以了, A类就称为内部类, 内部类可以直接访问外部类的成员, 而外部类想要访问内部类就得建立内部类的对象
- 外部类名.内部类名 变量名 = 外部类对象.内部类对象
- Outer.Inner in = new Outer.new Inner()//因为内部类通常由外部类调用, 所以这种方法很少用
为什么内部类可以直接访问外部类中的成员?
因为内部类中持有外部类的一个引用:外部类.this
内部类编译后的文件名: 外部类名字$内部类名.java
匿名内部类: 没有名字的内部类, 就是内部类的简化形式,一般只用一次就可以用这中形式。
使用场景:
当函数的参数是接口类型的引用, 如果接口中的方法不超过2个, 可以通过匿名内部类来完成参数的传递。
//1
new Object(){
void show(){
System.out.println("show run");
}
}.show();
//2
Object obj = new Object(){
void show(){
System.out.println("show run");
}
};
obj.show();
一二内部类哪个可以编译成功和失败为什么?
因为第二种类型用Object的obj引用指向show方法的时候,被提升为Object类型, 编译器检查的时候是没有发现这个show方法, 所以报错
class InnerClassDemo6 {
+(static)class Inner{
void show(){}
}
public void method(){
this.new Inner().show();//可以
}
public static void main(String[] args) {//static不允许this
This.new Inner().show();//错误,Inner类需要定义成static
}
}
interface Inter{
void show();
}
class Outer{//通过匿名内部类补足Outer类中的代码。
public static Inter method(){
return new Inter(){
public void show(){}
};
}
}
class InnerClassDemo7 {
public static void main(String[] args) {
Outer.method().show();
/*
Outer.method():意思是:Outer中有一个名称为method的方法,而且这个方法是静态的。
Outer.method().show():当Outer类调用静态的method方法运算结束后的结果又调用了show方法,意味着:method()方法运算完一个是对象,而且这个对象是Inter类型的。
*/
异常:
指:程序在运行的时候出现的不正常的情况, 然后根据面向对象的思想将其封装成异常类,这样方便操作问题以及处理问题。
比如数据下标越界, 空指针问题。
它的异常体系可以为:
--------java.lang.Throwable:
Throwable:可抛出的。
|--Error:错误,一般情况下,较为严重
|--Exception:异常,可以有针对性的处理方式
- 异常体系有个特点: 可抛性
- 在定义功能的时候发现一些问题, 应该 将问题定义的时候标示出来。通过throws标示出来。调用这个功能的人必须进行处理, 要么继续抛出要么进行捕获,
对于捕捉:java有针对性的语句块进行处理。
try {
需要被检测的代码;
}
catch(异常类 变量名){
异常处理代码;
}
fianlly{
一定会执行的代码;
}
catch (Exception e) { //e用于接收try检测到的异常对象。
System.out.println("message:"+e.getMessage());//获取的是异常的信息。
System.out.println("toString:"+e.toString());//获取的是异常的名字+异常的信息。
e.printStackTrace();//打印异常在堆栈中信息;异常名称+异常信息+异常的位置。
}
- 异常处理的原则: 功能抛出几个异常, 功能调用如果进行tey处理需要与之对应的catch代码块, 这样的处理有针对性。
- throw和throws关键字的区别:
throw用于抛出异常, 后面常跟的是异常对象,throws用于抛出异常类, 后面跟着的是异常类名。 - 什么时候定义try, 内部可以处理的时候就用try, 如处理不了就必须声明出来,让调用者处理。
自定义异常:如果开发的时候出现没有定义过的问题, 且自认为有必要, 则创建自定义异常。
自定义异常的步骤:
1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性。
2:通过throw 或者throws进行操作
常见异常:
脚标越界异常(IndexOutOfBoundsException)包括数组、字符串;
空指针异常(NullPointerException)
2、类型转换异常:ClassCastException
包:
定义包用的package关键字
- 给类文件进行分类管理
- 给类文件提供多层名称空间
全类名:包名.类名
包与包之间的访问权限:
public protected
总共权限有: public private default protected
导入
import 导入
常见软件包:
Java.lang language java 核心包, Object System
Java.awt 图形化界面的对象
javax.swing 提供所有的windows桌面应用程序包括的控件, 比如:Frame, Dialog, Table, List等等
java.net 用于Java网络编程方面
java.io : io流的对象包
java.util : 工具包, 时间对象, 集合框架都在里面
java.applet: applet + server 就变成servlet