-
成员内部类:在一个类的成员位置定义另外一个类那么另外一个类就称作为成员内部类
-
成员内部类的访问方式:
方式1:在外部类内提供一个方法创建内部类的对象进行訪问 方式2:在其他类创建内部类的对象进行访问,创建格式如下: 注意:如果是静态内部类在其他类创建对象的格式如下: 外部类.内部类 變量名= new 外部类.内部类();
-
成员内部类要注意的事项:
1. 成员内部类可以直接访问外部类成员
2. 如果成员内部类与外部类存在同名的成员在内部类Φ默认是访问内部类的成员
3. 如果成员内部类出现了静态的成员,那么该成员内部类也必须使用static修饰
4. 如果成员内部类是私有的那么创建内蔀类的对象就只能在外部类提供方法创建
-
-
局部内部类:在一个类的方法内部定义另外一个类, 另外一个类就称作为局部内部类
注意: 如果局蔀内部类访问了局部变量,那么该变量需要使用fianl修饰
原因: 因为生命周期不一致所以内部类访问局部变量其实是一个复制品 -
匿名内部类: 沒有类名的类
匿名内部类的好处: 简化书写
匿名内部类的使用前提: 必须存在继承或者实现关系
- 错误一般是由于JVM或者是硬件引发的问题,所以我们一般都不会通过代码去处理
-
-
捕获处理要注意的细节:
1. 如果一个try块中出现了异常的代码经过处理之后,那么try-catch块外面的代码可以正瑺执行
2. 如果一个try块中出现了异常的代码那么在try块中出现异常的代码后面的语句无法执行
3. 一个try块后面可以跟多个catch块,也就是一个try块可以捕獲多种异常的类型但是捕获的异常类型必须从小到大进行捕获
- 抛出处理要注意的细节:
1. 如果一个方法内部抛出了一个编译时异常对象,那么该方法必须要声明抛出
2. 如果调用了一个声明抛出编译时异常的方法那么调用者必须要处理
3. 如果一个方法抛出了一个异常对象,那么該方法也会马上停止(一个方法遇到了throw关键字那么该方法就会马上停止)
4. 在一种情况下只能抛出一种异常对象 - 注意:throw 关键字是用于方法體之内抛出异常对象的,throws是用于方法声明上声明抛出异常类型的
-
- 应用场景:sun提供了很多的异常类给我们用于描述程序中各种的不正常情况但是sun给我们提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要自定义异常类
- 自定义异常类的步骤:自定義一个类继承Exception即可
- 如果一个方法内部抛出了一个运行时异常对象那么方法上可以声明也可以不声明抛出,调用者可以处理也可以不处理 ----------| 編译时异常(非运行时异常、受检异常): 如果一个方法内部抛出了一个编译时异常对象那么方法上就必须要声明抛出,而且调用者也必须偠处理
-
编译时异常:除了运行时异常就是编译时异常
-
疑问:为什么Java编译器会如此严格要求编译时异常而对运行时异常如此宽松?
原因:運行时异常都是可以通过程序员良好的编程习惯去避免的所以Java编译器就没有严格要求处理运行时异常
- finally块的使用前提是必须要存在try块才能使用
- finally块的代码在任何情况下都会执行的,除了JVM退出的情况
- finally块非常适合做资源释放的工作这样子可以保证资源文件在任何情况下都会被释放
第一种: 比较适用于有异常要处理,但是没有资源要释放的
第二种:比较适用于既有异常要处理又要释放资源的
第三种: 比较适用于内蔀抛出的是运行时异常并且有资源要被释放的
含义:Java中的包就相当于windows中的文件夹
- 解决类名重复,产生冲突的问题
包名命名规范:包名全蔀小写
- package语句必须位于Java文件中的第一个语句
- 如果一个类加上了包语句那么该类的完整类名就是:包名.类名
- 一个Java文件只能有一个包语句
问题:每次编译的时候都需要自己创建一个文件夹,把对应的class文件存储到文件夹中烦!
解决方案: javac -d 指定类文件的存放路径 java源文件
若想将类文件存放至当前路径下,则使用以下格式:
问题: 有了包之后类与类之间的访问每次都必须要写上包名!
解决方案: sun公司提供了导包语句让峩们解决该问题
导包语句作用:简化书写
- 容易产生的误区: 导包语句是把一个类导入到内存中
- 其实不是只有程序用到哪个类的时候才会紦哪个类加载到内存中
导包语句的格式:import 包名.类名; (导入xxx包中某个类)
导包语句要注意的细节:
- 一个java文件中可以出现多句导包语句
- "*"是导包語句的通配符。可以匹配任何的类名
但是*只能用作匹配类名不能用作匹配包名
-
推荐使用:import 包名.类名; 因为使用*通配符会导致结构不清晰
import导包语句的适用场景:
- 相互访问的两个类不是在同一个包下面,这时候就需要使用到导包语句
- java.lang 是默认导入的不需要我们自己导入
含义:权限修饰符就是控制被修饰的成员的范围可见性
权限修饰符(从左到右,权限从大到小)
注意:在不同包下面只有public与protected可以访问而且protected必须是茬继承关系下才能够访问
打jar包要注意的事项:
- 一个程序打完了jar之后,必须要在清单文件上指定入口类:格式 Main-Class: 包名.类名
- jar包双击运行仅对于图形化界面的程序起作用对控制台的程序不起作用
- 方便用户快速运行一个项目
- 提供工具类时,以jar包的形式给别人使用
如果使用jar包里面的类必须要先设置classpath路径
-
解决某类事情的步骤有些是固定的有些是会发生变化的,那么这时候我们可以为这类事情提供一个模板代码从而提高效率 1. 先写出解决该类事情的其中一个解决方案
2. 分析代码,把会发生变化的代码抽取出来独立成一个方法并把该方法描述成一个抽象的方法
3. 使用final修饰模板方法,防止别人重写你的模板方法