内部类
1、学会成员内部类、静态内部类、局部内部类、匿名内部类的定义及使用;
2、学会使用Lambda表达式简化代码;
3、理解异常的概念、异常的分类以及Java中的异常处理机制;
4、学会使用try-catch-finally语句捕获处理异常;
5、学会使用throw、throws抛出异常;
6、学会使用自定义异常;
7、了解断言机制及使用
重点
成员内部类、匿名内部类的定义与使用、Lanmbda表达式的基本用法;异常的概念、分类及处理机制,使用try-catch捕获异常,使用throws声明抛出异常,使用throw抛出异常,自定义的异常。
难点:
匿名内部类的定义与使用,使用try-catch捕获异常。
成员内部类
定义在另一个类范围内的类 除了成员变量和成员方法之外的另一个成员 包含内部类的那个类称为外部类
内部类 被 另一个类 使用 我们把前者定义为内部类
public class Test {
public class A{
}
}
//A为 Test 的一个内部类
内部类的使用
public class Test {
public static void main(String[] args) {
Test test = new Test();
Test.A a = test.new A();
a.show();
}
int a = 0 ;
int b = 0;
void m()
{
b = 12;
}
public class A{
int a = 0;
void show(){
a = 100;
Test.this.a = 10;
m();
b = 11;
System.out.println("内部类成员" + a);
System.out.println("外部类成员" + Test.this.a);
System.out.println("外部类成员 在内部类操作" + b);
}
}
}
/*
输出:
内部类成员100
外部类成员10
外部类成员 在内部类操作11
*/
以上程序 可以看出 若是内部类的成员 与 外部类成员变量名相同 则 要调用外部类的成员使用特殊语法 Outcalss.this.内部类成员 且 : 要操作成员变量时 应在内部类的方法里面进行操作。 原因 :内部类不仅在形式上和外部类有关系(写在外部类的里面), 在逻辑上也和外部类有联系:
如内部类对象的创建依赖于外部类对象;
内部类对象持有指向外部类对象的引用,因此内部类可以通过外部类对象的引用访问外部类的成员。
编译器自动为内部类添加一个成员变量, 其类型和外部类的类型相同, 这个成员变量就是指向外部类对象的引用;
编译器自动为内部类的构造方法添加一个参数, 参数的类型是外部类的类型, 在构造方法内部使用这个参数为所添加的成员变量赋值;
在调用内部类的构造函数初始化内部类对象时, 会默认传入外部类的引用。
内部类的修饰问题⭕
⭕内部类 可以使用 static 进型修饰 但是 外部类 是不可以的
⭕静态内部类创建对象的语法 : 外部类.内部类 内部类对象引用 = ⭕new 外部类.内部类(参数) 因为 内部类是可以直接用类名进行访问 的 所以 static 创建对象相对于 不用static 来说要 好一点
⭕静态内部类 在逻辑上 和外部类并没有直接的关系 这点和不用static修饰的内部类 是有很大的不同。
局部内部类
将一个内部类定义在外部类的成员方法中,这样的内部类 成为局部内部类
特征:
局部类 :仍然是个类 作用域在代码块或代码块中
定义在方法或代码块中。
⭕ 不能 被 public 和 private 修饰、
⭕可以用final 来进行修饰。
⭕它对外界是完全隐藏的
局部类访问外部类的特点 :
⭕既可以直接访问外部类的成员变量 还可以访问自己所在代码块的局部变量
⭕被局部类访问的局部变量 必须 要用 final 关键词修饰 要保证他们被=赋值一次 jdk1.8 以后 不用final也行了 弹药保证被赋值一次。
⭕外部类 使用 内部类 在外部类中创建内部类的对象 然后调用方法即可。
测试代码
package exp8;
public class Test2 {
private int a;
void show(){
int a = 30;//局部变量
final int b = 40;
final class InnerClass{
int a = 50; // 内部类成员变量
public void show(int c){
System.out.println();
System.out.println("内部类员变量"+a);
System.out.println("外部类成员变量"+Test2.this.a);
System.out.println("内部类成员变量" + b);
System.out.println("参数" + c);
}
}
InnerClass innerClass = new InnerClass();
innerClass.show(1);
}
public static void main(String[] args) {
Test2 test2 = new Test2();
test2.show();
}
}
/*输出:
50
内部类成员变量50
外部类成员变量0
内部类成员变量40
参数1*/
很重要!!!匿名内部类
本质 : ①一个类 ②内部类 ③没有名字 系统给你命名
**是一个类 又是一个对象。 **
基本语法
//Anonymous 匿名的
//在接口中的使用。
package exp8;
interface a{
void speak();
}
public class AnonymousClass {
a a = new a(){
@Override
public void speak() {
System.out.println("我爱你");
}
};
public static void main(String[] args) {
AnonymousClass as = new AnonymousClass();
as.a.speak();
}
}
//抽象类使用也是如此
//不能重写构造方法
本文讲解了Java内部类的四种类型(成员、静态、局部和匿名)、Lambda表达式的基础用法,以及异常处理的关键概念、分类、try-catch机制和自定义异常。通过实例演示了如何使用这些特性来提升代码效率和错误处理能力。
37万+

被折叠的 条评论
为什么被折叠?



