1.类的继承
1.继承的概念:继承是面向对象编程中的一种重要机制,它允许新的类从已有的类中继承属性和方法。在Java中,一个类可以通过关键字“extends”来继承另一个类的属性和方法。被继承的类称为父类或超类,继承的类称为子类或派生类。子类可以使用父类的公共方法和属性,同时还可以添加自己的方法和属性。继承是实现代码重用和提高代码可读性的重要手段。
2.方法的重写:重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。
重写的好处在于子类可以根据需要,定义特定属于自己的行为。也就是说子类能够,根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如:父类的一个方法声明了一个检查异常IOException,但是在重写这个方法的时候不能抛出Exception异常,因为Exception是IOException的父类,只能抛出IOException的子类异常。
3.super关键字:super关键字是Java中用于指代父类对象的一个特殊引用。在子类中,可以使用super关键字来访问父类的成员变量、方法和构造函数。简单来说,super关键字可以理解为“父类对象”的代称。
2.final关键字
final的英文意思是“最终”。在Java中,可以使用final关键字声明类、属性、方法,在声明时需要注意以下几点: (1)使用final修饰的类不能有子类。 (2)使用final修饰的方法不能被子类重写。 (3)使用final修饰的变量(成员变量和局部变量)是常量,常量不可修改。
1.final关键字修饰类
Java中的类被final关键字修饰后,该类将不可以被继承,即不能够派生子类。
2.Final关键字修饰方法
当一个类的方法被final关键字修饰后,这个类的子类将不能重写该方法。
3.Final关键字修饰变量
Java中被final修饰的变量是为常量,常量只能在声明时被赋值一次,在后面的程序中,其值不能被改变。如果再次对该常量赋值,则程序会在编译时报错。
3.抽象类和接口
1.抽象类:当定义一个类时,常常需要定义一些成员方法描述类的行为特征,但有时这些方法的实现方式是无法确定的。例如,前面在定义Animal类时,shout()方法用于描述动物的叫声,但是针对不同的动物,叫声也是不同的,因此在shout()方法中无法准确描述动物的叫声。
针对上面描述的情况,Java提供了抽象方法来满足这种需求。抽象方法是使用abstract关键字修饰的成员方法,抽象方法在定义时不需要实现方法体。抽象方法的定义格式如下:
abstract void 方法名称(参数);
当一个类包含了抽象方法,该类必须是抽象类。抽象类和抽象方法一样,必须使用abstract关键字进行修饰。
抽象类的定义格式如下:
abstract class 抽象类名称{
访问权限 返回值类型 方法名称(参数){
return [返回值];
}
访问权限 abstract 返回值类型 抽象方法名称(参数);
}
抽象类的定义规则如下: (1)包含一个以上抽象方法的类必须是抽象类。 (2)抽象类和抽象方法都要使用abstract关键字声明。 (3)抽象方法只需声明而不需要实现。 (4)如果一个类继承了抽象类,那么该子类必须实现抽象类中的全部抽象方法。
2.接口:如果一个抽象类的所有方法都是抽象的,则可以将这个类定义接口。接口是Java中最重要的概念之一,接口是一种特殊的类,由全局常量和公共的抽象方法组成,不能包含普通方法。 在JDK8之前,接口是由全局常量和抽象方法组成的,且接口中的抽象方法不允许有方法体。JDK 8对接口进行了重新定义,接口中除了抽象方法外,还可以有默认方法和静态方法(也叫类方法),默认方法使用default修饰,静态方法使用static修饰,且这两种方法都允许有方法体。
4.多态
1.多态概念:多态性是面向对象思想中的一个非常重要的概念,在Java中,多态是指不同对象在调用同一个方法时表现出的多种不同行为。例如,要实现一个动物叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数,当传入猫类对象时就发出猫类的叫声,传入犬类对象时就发出犬类的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果不同的现象就是多态。
Java中多态主要有以下两种形式: (1)方法的重载。 (2)对象的多态性(方法重写)。
2.对象类型的转换:对象类型转换主要分为以下两种情况: (1)向上转型:子类对象→父类对象。 (2)向下转型:父类对象→子类对象。 对于向上转型,程序会自动完成,而向下转型时,必须指明要转型的子类类型。
对象类型的转换格式如下所示。 对象向上转型:父类类型 父类对象 = 子类实例; 对象向下转型: 父类类型 父类对象 = 子类实例; 子类类型 子类对象 = (子类)父类对象;
3.instanceof关键字:Java中可以使用instanceof关键字判断一个对象是否是某个类(或接口)的实例,语法格式如下所示。 对象 instanceof类(或接口) 在上述格式中,如果对象是指定的类的实例对象,则返回true,否则返回false。
5.Object类
Java提供了一个Object类,它是所有类的父类,每个类都直接或间接继承Object类,因此Object类通常被称之为超类。当定义一个类时,如果没有使用extends关键字为这个类显式地指定父类,那么该类会默认继承Object类。

6.内部类
在Java中,允许在一个类的内部定义类,这样的类称作内部类,内部类所在的类称作外部类。在实际开发中,根据内部类的位置、修饰符和定义方式的不同,内部类可分为4种,分别是成员内部类、局部内部类、静态内部类、匿名内部类。
1.成员内部类:在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。成员内部类可以访问外部类的所有成员。
如果想通过外部类访问内部类,则需要通过外部类创建内部类对象,创建内部类对象的具体语法格式如下:外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
2.局部内部类:局部内部类,也叫作方法内部类,是指定义在某个局部范围中的类,它和局部变量一样,都是在方法中定义的,有效范围只限于方法内部。 在局部内部类中,局部内部类可以访问外部类的所有成员变量和方法,而局部内部类中变量和方法却只能在所属方法中访问。
3.静态内部类:所谓静态内部类,就是使用static关键字修饰的成员内部类。与成员内部类相比,在形式上,静态内部类只是在内部类前增加了static关键字,但在功能上,静态内部类只能访问外部类的静态成员,通过外部类访问静态内部类成员时,可以跳过外部类直接访问静态内部类。
创建静态内部类对象的基本语法格式如下:
外部类名.静态内部类名 变量名 = new 外部类名().静态内部类名();
4.匿名内部类:匿名内部类是没有名称的内部类。在Java中调用某个方法时,如果该方法的参数是接口类型,除了可以传入一个接口实现类,还可以使用实现接口的匿名内部类作为参数,在匿名内部类中直接完成方法的实现。
7.异常
Java语言中,将程序执行中发生的不正常情况称为”异常”
NullPointerException 空指针异常
当应用程序试图在需要对象的地方使用null时,会抛出此异常
2. ArithmeticException 数学运算异常
当出现异常的运算条件时,会抛出此异常
3. ArrayIndexOutOfBoundsException 数组下标越界异常
用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法家引。
4. ClassCastException 类型转换异常
当试图将对象强制转换为不是实例的子类时,会抛出此异常。
5. NumberFormatException 数字格式不正确昇常
try-catch异常处理。
①如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块。
②如果异常没有发生,则顺序执行try的代码块,不会进入到catch。
③如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)则使用代码-finally{}thorws异常处理。
如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
2.在万法生命中用throws语句可以声明抛出异常的列表,thros后面的异常类型可以是方法中产生的异常类型,也可以是它的父类自定义异常。
当程序中出现了某些“销误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。
434

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



