3.Java值传递与引用传递( 九 )


这里同时实现了两个接口,这也可以说实现了(伪)多继承,就像伪分布式集群,自己搭着玩玩,锻炼锻炼;抽象类使用,只能单继承,具有很大的局限性,使用不多,但是接口使用很常见,很多框架,都是写了很多接口然后去实现业务功能 。
题外话:很多人都会Java,但很少人能够做到架构师,因为不具备抽象的思维,这个非常难 。
接口和抽象类有什么区别?
实现:抽象类的子类使用来继承;接口必须使用来实现接口 。
构造函数:抽象类可以有构造函数;接口不能有 。
main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法 。
实现数量:类可以实现很多个接口;但是只能继承一个抽象类 。
访问修饰符:接口中的方法默认使用修饰;抽象类中的方法可以是任意访问修饰符 。
14.Java内部类
内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外类了 。
一个Java类里只允许有一个 class,但允许有多个class类,有内部类的类除外,因为内部类可以用 class
成员内部类以及静态内部类
class Outer {
int id=10;
void out(){
.out.("这是外部类的方法");
Inner{
void in(){
.out.("这是内部类的方法");
//获得外部类的私有属性
void getId(){
.out.(id);
/*这是一个很强大的功能,可以访问到外部类的私有属性
另外如果该getId方法使用修饰,这叫静态内部类,则这里无法获取到id,因为静态方法先加载,而id
还没有加载,所有无法访问到
*/
--------------------------------------------------------------------
class{
void main([] args) {
//通过这个外部类来实例化这个内部类
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.getId();
局部内部类,写在方法里
public class Application {//局部内部类public void method(){class Inner{public void In(){}}}}
内部类高级玩法,不建议这样写,只是扩展眼界
其中有匿名内部类,即没有实例化类就实现了具体的eat方法,匿名内部类可以用在类、抽象类、接口上
public class Application {public static void main(String[] args) {new Apple().eat(); //没有名字初始化类,不用将实例保存到变量中,这就是匿名内部类/*UserServices userServices =*/ new UserServices() { //匿名内部类用在接口上@Overridepublic void run() {}};//这里记得加分号}static class Apple {//由于上方在main方法里调用内部类所以需要用static修饰public void eat() {System.out.println("1");}}interface UserServices {void run();}}
15.Error和
区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常 。
异常处理五个关键字:try,catch,,throw,
异常捕获示例:捕获某一行代码idea快捷键为ctrl+alt+t
public class Application {public static void main(String[] args) {int a=1;int b=0;try { //try里面的代码相当于监控区域System.out.println(a/b);} catch (Error e){//可以捕获多个异常,类似if--else if--else if--elseSystem.out.println("error");} catch (Exception e){//这里多个catch需要注意必须把范围较大的异常放在最后,层层递进System.out.println("Exception");} catch (Throwable e){ //用来捕获定义的异常,这里属于Exception异常,catch里的异常为想要捕获的异常类型System.out.println("Throwable");} finally { //用来处理善后工作,不管有没有异常都会执行它的代码块,比如关闭资源,连接 。。。System.out.println("fianlly");}}}/*Exceptionfianlly*/