java复习笔记

第一节:万物皆可为对象

特点:抽象,多态,继承, 封装

一.抽象就像一个没有具体明确的做什么的东西,在java中用abstract关键字修饰,通常可以修饰类或是方法;

1.修饰类

  • 类不可实例化,也就说不能new(抽象的new出来也没什么用)
  • 抽象类要有构造器,便于子类实例化

2.修饰方法

  • 类中没有方法体,只有方法的声明
  • 抽象方法一定在抽象类中,但抽象方法不一定有抽象类
  • 子类继承抽象父类,子类若重写父类所有抽象方法,则可实例化,反之不可

二.封装就像是对类的一种保护,通过关键字的访问权限来控制别的类和别的包进行调用方法或访问类部成员

关键字:

可修饰方法,属性,内部类,构造器

修饰类:只可以用public 和 缺省的

三.继承

关键字extends

子类继承父类就拥有了父类的所有财富,当然私有的财富还是无法继承的,就像private修饰的方法和属性还是无法访问的(有其他途径——)。java中的一个父亲可以有多个儿子,但是儿子只能有一个父亲,这里我就想到了接口,一个类可以有实现多个接口,继承一个类。但是儿子还是可以有爷爷的。

在继承中有个非常重要的东西那就是重写,这就不得不讲讲重写和重载有什么不同。

重写发生在子类继承父类中,子类中重写父类方法,@override

重载(@overload)是一个类中相同方法名不同形参的方法,对于编译器这些都是不同方法, 他们调用时所在的位置早就绑定了,而重写直到方法调用的那一刻才知道具体方法这就称为“动态绑定”;

super关键字

  • 用来调用父类的方法,属性,构造器,---就是子类要是有和父类相同名的方法或属性,就用super.方法或属性

四.多态

多态就比较有意思了,比如说声明一个父亲但我new一个儿子

Animal an = new dog();

向上转型:多态,只适用于方法,不适用于属性(编译和运行都看左边)

向下转型:

有象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。如何才能调用子类特的属性和方法?使用向下转型。

使用强转型符()

在向下转型时可能出现错误,此时要注意

  • 出现ClassCastException的异常
  • 在向下转型之前,先进新instanceof,返回ture可以转型,反之不可

instanceof 判断对象a是否是对象A的实例

下面是图示:

第二节:类中的结构

  • 属性

    属性vs局部变量

    属性---》直接定义在类中{},默认初始化

    局部变量---->声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

  • 方法

    public static void main(){

    }

  • 构造器

    实例化对象用的,初始化对象信息

    没有显示创建构造器,系统默认创建一个空参构造器

    属性赋值的顺序:

    ① 默认初始化

    ② 显式初始化

    ③ 构造器中初始化

    ④ 通过"对象.方法" 或 "对象.属性"的方式,赋值

  • 代码块

    静态代码块&非静态代码块

  • 内部类

    成员内部类(静态、非静态 ) vs 局部内部类(方法内、代码块内、构造器内)

常见关键字的解释

static

final

第三节:异常

异常体系

编译时异常:

运行时异常:

java处理异常的形式:

  • “抛”出的异常,throw抛出一个异常对象,系统自己生成或手动创建(后面代码不在执行)
  • “抓”的方式1.try-catch-finally2.throws
try{
 		//可能出现异常的代码

  }catch(异常类型1 变量名1){
  		//处理异常的方式1
  }catch(异常类型2 变量名2){
  		//处理异常的方式2
  }catch(异常类型3 变量名3){
  		//处理异常的方式3
}
 finally{
  		//一定会执行的代码
  }

逻辑结构中switch - case

//匹配 就是全等。
/*
语法:
   switch(表达式){
     case 值1:
       表达式的值和 值1匹配上了,需要执行的代码;
       break;
     case 值2:
       表达式的值和 值2匹配上了,需要执行的代码;
     break;
     case 值3:
       表达式的值和 值3匹配上了,需要执行的代码;
     break;
     default:
       如果表达式的值和以上的case后面的值都没有匹配上,那么就执行这里的代码。
       break;
   }
* */
* //不写break会穿透到下一个break
原文地址:https://www.cnblogs.com/mankaixin/p/13601084.html