十八、this、super、static、final、instanceOf关键字
This:是当前类的实例,经常出现在方法和构造方法中,具体使用有以下三种情况:
1、 返回调用当前方法的对象的引用;
2、 在构造方法中调用当前类中的其他构造方法;
3、 在方法参数名和成员变量名相同时,用于区分参数名和成员变量名。
Super:this用于调用当前类的方法、属性和构造方法 ,而super调用父类的实例,super用于调用父类的方法、属性和构造方法,具体使用方法有以下两种:
1、 调用父类的构造方法;
2、 调用父类的实行和方法
Static:static关键字可以修饰方法、属性、自由块和静态块,使用static修饰这些成员时,可以理解为成员与类相关,通过 类名.成员 的形式调用;没有使用static修饰可以理解为成员与对象相关,通过 对象名.成员 的形式调用
注意:
1、 static不能用于修饰构造方法;
2、 在static修饰的方法中,不能调用没有static修饰的方法和属性,也不能使用super和this关键字;
3、 被static 修饰的属性被多个类对象共享,一个对象修改静态属性值后,会影响其他对象;
4、 静态块无论对象创建几次,静态块只执行一次;
Final:用于修饰类、成员变量、成员方法
1、 final修饰的类:
该类不能被继承;
2、 final修饰的成员变量:
不能改变变量的值,即final修饰的类为常量;
3、 final修饰的成员方法:
该方法不能被子类重写
InstanceOf:属于Java的二元操作符,作用是判断某个对象是否某个类或接口类型。
十九、数据结构
char采用Unicode编码,因此可以直接和基本数据类型加减乘除
二十、double和float精度不准的问题:
通过java.math.BigDecimal可以解决
float s=2.12;语法错误
二十一、成员变量和局部变量有什么区别
局部变量是定义在方法体内部的变量,其作用域在方法块内部有效。局部变量在使用时,必须先初始化才能使用,否则不能顺理通过编译;
成员变量是定义的变了里那个,即属性,其作用域整个类中有效;成员变量可以不指定初始值,系统有默认值:除了八种基本数据类型,其他的引用类型都是null;
Byte、Short、int的初始值为0;long的初始值为0L;boolean为false;float的为0.0F;double的为0.0d;char为‘/u0000’;
被final修饰且没有被static修饰的成员变量必须显式赋初始值;
成员变量和局部变量的区别:
1、 public、protect、private、static可以修饰成员变量,但不能修饰局部变量;两者都可以用final修饰;
2、 成员变量存储在堆内存中,局部变量存储在栈内存中
3、 作用域不同,局部变量作用域在方法块内部,成员变量作用域整个类
4、 成员变量可以不设置默认值,局部变量必须设置默认值。
二十二、==和equals的区别
==用于判断两个变量的值是否相等,或者两个变量的引用地址是否相等
equals用于判断变量的引用地址 指向的存储内容是否相等
二十三、类、对象、属性和方法
类是对一类相同事物的抽象描述;
对象是类的一个具体体现;
属性是对一类相同特征的抽象;
方法是对一类相同行为的抽象。
二十四、抽象类、接口
抽象类:
有abstract修饰,允许包含未实现方法的类叫抽象类;
抽象类的特征:
1、 抽象类中可以包含抽象方法也可以不包含抽象方法;
2、 抽象类不能实例化,既不能创建对象,只能作为父类被子类继承;
3、 子类继承一个抽象类后,必须实现父类中所有的抽象方法,不然子类也要定义成抽象类;
4、 如果类中包含抽象类,那么此类必须定义成抽象类;
5、 类只能单继承。
接口:
接口是方法声明和常量定义的集合;
接口的特征:
1、 接口只包含方法的声明和常量的定义;即使定义普通属性,该属性也会编译成常量来实现;
2、 当其他方法实现该接口时,必须实现该接口定义的所有方法,否则应该将该类定义为抽象类;
3、 一个类可以实现多个接口;(implement);
4、 定义接口时允许使用继承,接口允许多继承。
类和借口的区别:
相同点:
1、 都可以有抽象方法;
2、 都不能被实例化;
3、 都可以包含static方法( 从 JDK 1.8 开始,允许在接口中声明 static 方法 )
不同点:
1、 抽象类有构造方法,接口没有;
2、 抽象类可以有代码块、普通字段(不是常量的字段),而接口中不允许有代码块 和 普通字段 ( 接口中所有的字段都是 public static final 修饰 )
3、 抽象类只能继承一个直接父类 (单继承 x ) ,接口可以继承多个父接口 ( 多继承 x )
4、 抽象类的子类通过 extends 关键字继承抽象类后可以实现抽象类中的抽象方法,接口的实现类通过 implements 关键字实现接口并实现其中的抽象方法
5、 JDK 1.8 开始允许在接口中声明 default 修饰的方法,而 抽象类中的方法 不能用 default 修饰。
二十五、多态、继承、封装
多态:
1、Java中主要指对象变量的多态;
2、在Java语言中有两种形式的多态: 编译时多态、运行时多态;
3、编译时多态通过方法重载(overload)来实现,即同一个类中存在多个方法名称相同但参数列表(参数个数、类型、顺序)不相同的方法;
4、运行时多态通过方法重写(override)来实现,当子类继承父类后重写父类中的可见(visible)方法,在运行阶段由父类类型的引用指向了子类类型的对象,此时 父类引用指向哪个子类类型的对象,就调用哪个子类重写后的方法(就是表现谁的形态)
继承:
1、 是指一个对象直接使用另一对象的属性和方法;
2、 Java语言中通过 extends 实现类与类、接口与接口之间的继承,从而实现代码复用,也是实现多态的基础。
封装:
1、通常将字段私有化(被隐藏起来)、某些不需要在类外部调用的方法也可以隐藏起来,尽可能隐藏类的实现细节,
3、 将外部可能调用的方法公开。
二十六、内部类
定义在一个类内部的类叫做内部类;
内部类的优点:
1、内部类的对象能访问所处类的私有属性和方法;
2、内部类可以隐藏起起来,不被同一个包的其他类访问;
3、内部类可以声明为抽象类,被其他内部类继承,也可以声明为final;
4、内部类可以声明为private、protect;
5、内部类可以用static修饰;
二十七、overload和override的区别:
Overload(重载):
1、是同一个类中含有多个方法名称相同但参数列表(参数个数、类型、顺序)不相同的方法,
2、这些方法可能是当前类直接声明的,也可能是从父类中继承过来的可见方法。
Override(重写)
1、重写必须是子类继承父类后,子类重新声明了从父类中继承的可见(visible)方法,
2、此时,如果子类中重新声明的方法与父类中的方法 名称相同、参数列表完全相同、返回类型也一致,就说子类重写了父类中的同名方法。
相同点:都要求方法名称相同;
不同点:
1、 重载要求本类中有同名不同那个参的方法;重写必须发生在子类和父类之间;
2、 重载 要求同名方法的参数列表一定不相同;重写要求子类和父类的同名方法的参数列表完全相同;
3、 重载对返回类型么有要求;而 重写 ( override ) 要求 被重写后的方法的返回类型 必须跟 父类中相应方法保持一致 ( 如果是返回基本类型,则要求完全相同 )
4、 重载( overload ) 对方法的 权限修饰符 没有要求,而 重写 ( override ) 要求 被重写后的方法的 权限修饰符 的范围不能缩小
注意:
子类不能重写父类的 静态方法,如果子类重新声明了父类中同名的静态方法,则说 子类 隐藏 了 父类中的同名静态方法。
来源:https://www.cnblogs.com/fengfenggege/p/9878961.html