JAVA第十二课 跟日记本一起学JAVA相信你可以的加油~本课闯关内容1.照猫画虎0/32.基础知识(0/3这里的基础知识的编号与照猫画虎的编号不是对应的而是上面的基础知识对应着下面的照猫画虎代码。有补充或者有错误我会在评论区里发或...建议你们在电脑上看。我之后再更新JAVA系列要2月之后了因为我们放暑假了下一个学期我们继续学习JAVA。———————————————————————————————————————————基础知识1内部类一、概念1.内部类定义在一个类内部的类。2.内部类编译之后生成独立的 .class 文件命名 外部类类名$内部类类名.class内部类可以直接3.使用外部类私有成员从而不破坏外部类的封装性。4.内部类的分类成员内部类、静态内部类、局部内部类、匿名内部类。二、内部类的分类1. 成员内部类类比于实例变量1位置定义在类以内方法以外。2成员内部类对象的创建必须依赖于外部类的对象而创建语法Outer o new Outer(); // 外部类的对象Outer.Inner i o.new Inner(); // 内部类的对象3(语法)外部类的当前对象外部类类名.this外部类类名.this.属性名 -访问外部类的属性外部类类名.this.成员方法名(参数) ; ----调用外部类的成员方法4成员内部类中不能定义静态成员(静态属性和静态方法)2. 静态内部类类比于静态变量1位置定义在类以内方法以外同时被 static 修饰2静态内部类中可以定义实例变量也可以定义静态变量3创建静态内部类的对象只需要依赖于外部类的类名即可语法Outer.Inner i new Outer.Inner();4(语法访问静态内部类的静态成员时可以直接通过 外部类类名.静态内部类类名 进行访问。外部类类名.静态内部类类名.静态属性名外部类类名.静态内部类类名.静态方法名(实参);5静态内部类只能访问外部类的静态成员静态属性和静态的方法3.局部内部类类比于局部变量1位置定义在方法内部2局部内部类对象的创建必须在定义它的方法内部创建并且在类的定义位置后面完成对象的创建3局部内部类的方法中可以访问定义它的方法内部的局部变量但是要求局部变量必须 被 final 修饰。注意JDK8.0及以上版本编译器编译时如果检测到局部变量被局部内部类中方法访问则默认为此局部变量前面 final 这种技术被称为语法糖。照猫画虎1package demo; public class Test1{ public static void main(String[]args){ } } //外部类 class ClassA{ //成员内部类定义在一个类的里面 class ClassB{ } } class ClassC{ //静态内部类定义在外部类的里面同时被static修饰 static class ClassD{ } } class ClassE{ int a5;//成员变量 public void test(){ int m6;//局部变量 //局部内部类 class ClassF{ } } } //这些类的创建因为没有写要输出的代码所以没有输出输出基础知识2匿名内部类是一个特殊的局部内部类1匿名内部类的定义必须继承一个类或是实现一个接口2基于一个匿名内部类只能创建该类的一个对象并且匿名内部类的定义和对象的创建一起完成。3语法引用名你随便起名你之后要引用的时候用此名引用接口名 引用名 new 接口名(){// 接口中需要实现的方法};(4) 匿名内部类的优缺点a.优点减小代码量让编程思路连贯。b.缺点可读性低。案例照猫画虎2package demo; public class Test2{ public static void main(String[]args){ //匿名内部类 IA ia new IA(){ public void ma(){ System.out.println(ma...); } public int mb(int a,int b){ return ab; } }; ia.ma();//ma.... System.out.println(ia.mb(4,7));//11 } } //接口 interface IA{ void ma(); int mb(int a,int b ); }输出ma...11基础知识3三、Lambda表达式Lambda表达式对匿名内部类的进一步简化大大的减少了代码的冗余Lambda表达式应用场景对函数式接口的实现(接口中有且只有一个抽象方法称为函数式接口)3.语法语法中的箭头没错是必写的大括号后有一个分号“”接口名 引用名 数据类型 参数名数据类型 参数名-{//方法的实现部分};1没有参数没有返回值语法接口名 引用名 -{//方法的实现部分};注意如果{}中仅有1条语句时{}可以省略2有参数没有返回值语法接口名 引用名 数据类型 参数名数据类型 参数名-{//方法的实现部分}注意中的数据类型可以省略(如果你下面有代码为接口或者为一个父类继承)在其中的形参那么在上面的Lambda表达式的要与下面一样的形参名没错它自己会找。eg: IB ib2 (x,y)-System.out.println(xy);ib2.mi(3.8,9.8);3有返回值有参数语法接口名 引用名 数据类型 参数名数据类型 参数名-{//方法的实现部分return 值}注意{}中只有一条return语句时{}和return可以一起省略eg:IC ic2 (m,n)-mn;interface IC{int m2(int a,int b);}4. Lambda表达的优缺点(1)优点简化代码降低代码的冗余性。(2)缺点可读性低idea的部分快捷键psvm -enter即可sout -enter System.out.println();照猫画虎3package demo; public class Test3{ public static void main(String[]args){ IB ib ()-{ System.out.println(ma...); }; ib.ma(); IC ic (int a,int b)-{ System.out.println(ab(ab)); }; ic.mc(1,2); ID id (a,b)-{ if(ab){ return true; }else return false; }; System.out.println(id.md(4,8));//false } } //函数式接口在接口中有且只有一个抽象方法 interface IB{ void ma(); } interface IC{ void mc(int a,int b); } interface ID{ boolean md(int a,int b); }函数式接口在接口中有且只有一个抽象方法。输出ma...123false跟我一步步学慢慢走。未完待续。。。。