面向对象:
Java是一种面向对象的语言,优点:1,系统结构稳定。2.子系统相对独立。3.软件可重用性,可维护性和可拓展性强。
面向对象的三大特征:封装,继承,多态。
对象:描述客观事物的实体。
类:具有相同属性对象的集合。类中定义了对象将会有的属性(特征)和方法(行为)。
参数:
形参:创建方法时定义的参数,叫形式参数。
实参:调用方法时传入的参数,叫实际参数。
方法重载:
在一个类中定义多个重名的方法,但每个方法具有不同的参数类型或参数个数。构造方法也可以重载(同类.同名.不同参)
优点:根据参数的不同,采用不同的实现方法,简化了类调用方法的代码。
作用域:
全局变量(成员变量):在类中定义,全局调用,系统默认赋初始值。
局部变量:在方法中定义,方法外不可调用,无初始值,赋值后使用。
构造方法:
每个类有一个默认无参构造方法,手工添加有参构造方法后,默认无参构造方法被覆盖,如果想使用无参构造,必须将无参构造写到类中。
封装:
将类的信息隐藏在类内部,不允许外部程序直接访问,可以通过该类提供的方法实现对隐藏信息的访问和操作。
封装两大原则:1.把尽可能多的东西藏起来,对外提供便捷的接口。2.把所有的属性藏起来。
实现封装:1.修改属性的可见性:private 数据类型 变量名。
2.创建公有的get/set方法:用于属性的读写。
3.在get/set方法中加入属性流控制语句:对属性值的合理性进行判断。
封装的优点:1.使用者正确使用系统,防止错误修改属性。
2.有助于系统间的松耦合,提高系统独立性。
3.提高软件可重用性。
4.降低了构建大型系统的风险。
包:
package,Java源文件中第一条非注释语句,一个源文件只能有一个包声明语句。
命名规范:小写字母组成,不能以圆点开头或结尾
类的访问修饰符:
修饰符\作用域 同一包中 非同一包中
public 可用 可用
默认修饰符 可用 不可用
类成员的访问修饰符:
修饰符\作用域 同一类中 同一包中 子类中 其他
private 可用 不可用 不可用 不可用
默认修饰符 可用 可用 不可用 不可用
protected 可用 可用 可用 不可用
public 可用 可用 可用 可用
static:
常用场景:定义使用final关键字修饰的常量,例:static final int PERSON_LIVE=1;
用static修饰的属性称为静态变量或者类变量,未使用static修饰的属性成为实例变量。
用static修饰的方法称为静态方法或者类方法,未使用static修饰的方法成为实例方法,方法中不能使用this和super。
static修饰的属性和方法使用类型打点可直接调用“类名.”。
继承:
将子类共有的属性提取到父类中。
使用 extends 建立继承关系。单根继承:一个类只能有一个直接父类,但可以有多个间接父类。
子类通过super调用父类属性,方法,构造方法。
实例化子类对象:
子类在实例化时,会先执行父类的构造方法,然后执行子类的构造方法。
父类引用可指向子类对象。例:Pet pet=new Dog();Dog为Pet子类。
Object类是所有类的父类。
方法重写:
重写方法和被重写方法必须具有相同的方法名。
重写方法和被重写方法必须具有相同的参数列表。
重写方法的返回值类型必须和被重写方法的返回值类型相同,或是其子类。
重写方法不能缩小被重写方法的访问权限。
构造方法不能被重写。
(同名,同参,不同类,同返回值或是其子类,访问权限不能严于父类)
多态:
方法重写是实现多态的基础。
向上转型:子类转父类直接转换。
向下转型:父类转子类需要进行强制类型转换。
instanceof:进行类型的判断。判断一个对象是否属于一个类。
多态的优势:可替换性,可扩充性,接口性,灵活性,简化性。
多态的应用:使用父类作为方法的形参,作为方法的返回值。
抽象类:abstract
抽象类不能被实例化。
子类如果不是抽象类,就必须重写父抽象类中的所有抽象方法。
abstract不能和final一起使用。
private不能修饰抽象方法。
没有抽象构造方法,也没有抽象静态方法。
抽象类可以没有抽象方法,但抽象方法必须定义在抽象类中。
抽象类中可以有非抽象的构造方法,供子类调用。
定义抽象类:public abstract class 类名{ }
定义抽象方法:访问修饰符 abstract 返回值类型 方法名(参数列表);
接口:interface
接口可以说是一种能力,所以一般讲功能放到接口中。
public interface 接口名,实现接口:implements
接口中全是公共的抽象方法(public abstract),变量为全局静态常量(public static final)。
接口不可被实例化。一个接口不能实现另一个接口,但可以继承多个接口。
实现类必须实现接口的所有方法。
实现类可实现多个接口。
面向接口编程:关心实现类有何能力,不关心实现细节。关心面向接口的约定而不考虑接口的具体实现。
抽象类和接口:
相同点:1.代表系统的抽象层。
2.都不能被实例化。
3.都能包含抽象方法。
不同点:1.抽象类中可以有非抽象方法,接口中只能有抽象方法。
2.一个类只能有一个直接父类,但可以实现多个接口,中间用逗号隔开。
3.已存在的继承树,可以方便的抽取接口,但是抽取抽象类不容易。
使用原则:1.接口做系统与外界交互的窗口。
2.接口一旦制定,就不允许随便更改。
3.抽象类可完成部分功能的实现和部分功能的拓展。
异常:
关键字:try,catch,finally,throw,throws。
Java异常体系结构:所有异常类型都是Throwable类,派生两个子类:Error类(仅靠程序本身无法恢复的严重错误)和Exception类(由Java应用程序抛出和处理的非严重错误)。
常见的异常类:
Exception:异常层次的根类。
ArithmeticException:算数错误异常。
ArrayIndexOutOfBoundsException:数组下标越界。
NullPointerException:空指针异常,尝试访问未创建对象。
ClassNotFoundException:不能加载所需要的类。
InputMismatchException:想得到的数据类型和实际输入的数据类型不匹配。
IllegalArgumentException:方法接收到非法参数。
ClassCastException:对象强制类型转换出错。
NumberFormatException:数字格式转换异常,如把“abc”转换成数字。
try-catch-finally结构中try必须存在,其他两者必须存在一个。
System.exit(1);强制退出Java虚拟机。
多重catch处理异常时catch语句块的排序必须是从子类到父类。
throws:用于声明该方法内抛出了异常,可继续声明,最后由Java虚拟机处理。位于方法参数列表后。可声明多个异常。
throw:用于程序员自行产生并抛出异常。位于方法内部。抛出一个异常对象且只能是一个。
自定义异常:
public class 自定义异常名 extends Exception{ }