Ni 属性会被默认初始化 局部变量不会被初始化
静态使用的注意事项:
1.静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)
2.
2.静态方法中不可以使用this或者super关键字。
3.主函数是静态的
静态什么时候用
静态变量
1,当分析对象中所具备的成员变量的值都是相同的,这时这个成员就可以用static修饰。
2,只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
3,如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象终不改,定义成静态的
静态方法
函数是否用静态修饰,就参考一点,函数内是否调用对象的特有数据;
简单点说:从源代码看,该功能是否需要访问非静态的成员变量,如果需要,该功能就是非静态的,如果不需要,就可以将该功能定义成静态的。要看是否调用非静态的成员变量
静态代码块
随着类的加载而执行,且执行一次
作用:给类进行初始化
如 static{
Num =10;
}
继承的特点
1.提高了代码的复用性
2.类与类之间产生了关系,给第三个特征多态提供了前提
3.Java中只支持单继承不支持多继承,不支持多继承是应为多个父类中有相同的成员,调用会有不确定性
继承中的成员函数
当子父类中出现一模一样的函数,会运行子类的函数,这种现象成为覆盖操作。
函数的两个特性:
1,覆盖
2,重载 在一个类中
覆盖注意事项:
1,子类的方法覆盖父类的方法时,子类的方法权限大于等于父类的方法权限。
2,静态只能覆盖静态,或被静态覆盖(这种情况很少见)
什么时候使用覆盖操作
当对一个类进行子类的扩展时,子类需要保留父类的功能声明,但是要定义子类中该功能的
特有内容时,就使用覆盖操作完成。
Final关键字
1,final 是一个修饰符,可以修饰类,方法,变量
2,final 修改的类不可以被继承
3,final 修饰的方法不可以被覆盖
4,final修饰的变量是一个常量,只能赋值一次
抽象类的特点
1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须定义在抽象类中,该类必须也被abstract修饰。
2,抽象类不可以被实例化,为什么? 应为调用抽象方法没意义。
3,抽象类必须有其子类覆盖了所有的抽象方法,该子类才可以实例化。否则,这个子类还是抽象类
1,抽象类中有构造函数吗?
有,用于给子类对象进行初始化
2,抽象类可以不定义抽象方法吗?
可以的,但是很少见,目的就是不让该类创建对象,AWT的适配器对象就是这种类
3,抽象关键字不可以和那些关键字共存?
Private static final
4,抽象类和一般类的异同点。
相同点:
抽象类和一般类都是用来描述事物的,都在内部定义了成员。
不同:
1,一般类有足够的信息描述事物。
抽象类描述事物的信息有可能不足
2,一般类中不能定义抽象方法,只能定非抽象方法。
抽象类中可以定义抽象方法,同时也可以定义非抽象方法
3,一般类可以被实例化,抽象类不可以被实例化。
5,抽象类一定是个父类
接口interface
对于接口当中常见的成员,这些成员都有固定的修饰符
1,全局常量。Public static final
2, 抽象方法,public abstract
接口的权限都是公共权限
接口与接口之间是继承的关系,可以支持多继承
抽象类和接口的异同点:
相同点: 都是不断向上抽取而来的
不同点:
1,抽象类需要不被继承,而且只能单继承。
接口需要被实现,而且可以多实现。
2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
接口只能定义抽象方法,必须由子类去实现
3,抽象类的继承,是 is a 关系,在定于该体系的基本共性内容
接口的实现是 like a 关系,在定义体系额外功能
多态
1,成员变量
编译时:参考引用类型变量所属的类中是否有调用的成员变量,有,编译通过,没
有编译失败
运行时: 参考引用类型变量所属的类中是否有调用的成员变量,并运行该所属类
中的成员变量
简单说:编译和运行都参考左边
2, 成员函数(函数依赖于对象)
编译时:参考引用类型变量所属的类中是否有调用的函数,有,编译通过,没
有编译失败
运行事: 参考的是对象所属的类中是否有调用的函数。
简单说: 编译看左边,运行看右边
3,静态函数
编译时:参考引用类型变量所属的类中是否有调用的静态方法
编译时:参考引用类型变量所属的类中是否有调用的静态方法
简单说:编译和运行都参考左边
其实对于静态的方法,是不需要对象的。直接用雷明调用即可
内部类
1,内部类可以直接访问外部类中的成员。
2,外部类要访问内部类,必须建立内部类的对象。
异常
异常:是在运行时期发生的不正常情况。
在java中用类的形式对不正常情况进行了描述和封装对象、
描述不正常的情况的类,就被成异常类
异常分为两大类
Throwable : 无论是error,还是异常,问题,问题发生就应该可以抛出,让调用者知道并处理
该体系的特点就在于throwable及其所有的子类都具有可抛性
可抛性
Throws,throw,凡是可以被这两个关键字所操作的类和对象都具有可抛性
1. 一般不可处理的 error
2. 可以处理的 exception
Exception 的分类:
1,编译时被检测异常:只要是exception 和其子类都是,除了特殊子类runtimeexception 体系
这种问题一旦出现,希望在编译时就进行检测,这种问题有对应的处理方式。
这样的问题都可以针对性的处理。
2,编译时不检测异常(运行时异常) 就是exception中的runtimewxception和子类体系
这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用者的
原因导致的或者引发的内部状态的改变导致的,那么这种问题一般不处理
直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行修正
自定义异常时,要么继承exception ,要么继承runtimeexception
Throws 和 throw 的区别。
1,throws 使用在函数上,
Throw使用在函数内
2,throws抛出的异常类,可以抛出多个,用逗号隔开。
Throw抛出的是异常对象
异常处理的捕捉形式:
这是可以对异常进行针对性处理的方式。
具体格式是:
Try{
//需要被检测异常的代码
}
Catch(异常类 变量) 该变量用于接收发生的异常对象
{
//处理异常的代码
}
Finally
{
//一定会被执行的代码
}