外观
Java基础注意
选择题
第1题:面向对象的特征
封装、继承、多态
多态实现的两种方式:重载,重写
第2题:do....while循环、自减操作符的用法、整数的除法
do...while:先执行一边循环体再判断条件是否成立
自减操作符的用法:单独使用相当于自减一、与其他操作混合使用时在操作数之前先进行自减操作再取值,在操作数后面时先取值再进行自减操作
整数除整数后还是整数
第3题:static关键字
static修饰的方法为类方法,可以直接使用类名调用
第4题:基于继承下的对象的构建顺序
普通的对象的构建顺序:static变量-->static代码块-->实例变量-->普通代码块-->构造方法
继承下的对象构建顺序:父类static变量-->父类static代码块-->子类static变量-->子类static代码块-->
父类实例变量-->父类普通代码块-->父类构造方法-->子类实例变量-->子类普通代码块-->子类构造方法
第5题:Java的继承方式
单继承:一个子类只能有一个直接父类,一个父类可以有多个子类
第6题:局部变量的作用范围
局部变量:
1.声明在代码块内(大括号之间)。
2.作用范围:代码块内,从声明位置到代码块结束。
3.无默认值,需要初始化。
分类:
1.声明在方法中的局部变量。
2.形式参数。
3.块变量(声明在循环结构中)作用于循环中,其范围小于局部变量(方法中声明的)。
第7题:父类子类对象之间的类型转换
向上转型(里氏替换):父类对象出现的地方一定可以使用子类对象替代
向下转型(强制转换):可能会引起类型转换异常(一定要确定对象的真实数据类型再转换,避免类型转换异常)
第8题:继承中构造方法发调用
子类无论有无显式调用父类的构造方法在创建子类对象时系统都会自动调用父类的构造方法
如果没有显式调用父类的构造方法在子类的构造方法中会自动调用父类的无参构造方法,若父类无无参构造方法时子类必须显式调用父类的有参构造方法
第9题:泛化类(超类)与特殊类(子类)
继承是一种通过扩展已有对象的方式从而获取新的功能的方法
泛化类(超类)可以显式的捕获那个公共的属性和方法。特殊类(子类)则通过附加属性和方法来进行实现的扩展
破坏了封装下=性是因为这会将父类的实现细节暴露给子类
继承是一种白盒复用,对父类的修改会影响子类(自身修改会导致子类的修改)
第10题:static、this、类方法的调用
类方法是由是static修饰的方法,类方法中不能使用this关键字且不能直接访问实例变量可使用类的对象调用实例方法
第11题:Java方法的参数传递方式
Java中只有一种传递参数的方式就是值传递
成员变量有默认值
byte、short、int、long为0
char为'u\0000'
double、float为0.0
第12题:类变量与成员变量的区别
类变量使用static关键字修饰可以通过类名调用也可以通过对象调用,实例变量只能由实例方法或对象调用
第14题:final关键字
1.当用final修饰一个类时,表明这个类不能被继承。
2.“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。
注:类的private方法会隐式地被指定为final方法。
3.对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
总结:final修饰的类不能被继承、final修饰的方法不能被重载、final修饰的变量不能被再次赋值。
final不可修饰接口,原因是接口的实现是一种特殊的继承,final修饰的类不可被继承
第15题:private关键字
private关键字修饰的变量为私有属性,子类不可继承且不能通过对象之间访问private修饰的成员变量
编程题
1.递归
2.String str ="字符串,字符串,字符串,"
str.split(",");
字符串分割函数,分割后仍然为String类型
String转int:Integer.parseInt(str);
简答题
1.重写与重载的区别
相同点:
两者都有多态的作用,都可以让同名方法有不同的实现,并且可以让Java自动的根据不同情况调用
重载:参数
重写:对象实际数据类型
区别:
确定方法的方式不同:
重载:通过参数确定(参数个数、参数类型、参数顺序)
重写:通过对象的实际数据类型(调用)
范围不同:
重载:同一个类中
重写:多个继承链上的不同类之间
实现不同
重载:两同三不同
同类、同名方法,方法的参数不同(参数个数、参数类型,参数顺序)
重写:两同一不同,两小一大
同名同参数的方法(参数个数、类型、顺序相同),不同的类(继承链上的不同类)
返回的数据类型(引用类型)可以与超类的不同,子类重写的方法返回类型是超类的派生类,异常数减少
子类重写的方法的权限修饰符可以与超类的不同(子类重写的权限>=超类的方法权限)
实现原理:
重载:编译时实现(编译后同名不同参数的方法会变成不同名的方法) 静态多态
重写:运行时实现(运行时动态的判断对象的实际数据类型从而确定调用哪个方法) 动态多态
2.&与&&的区别
1.&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
2.&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x33 & ++y>0) y会增长,If(x33 && ++y>0)不会增长
3.&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
3.this与super的区别
1.this()代表本类的其他构造方法
只能在本类的构造方法中使用(相当于一个构造方法调用另一个构造方法)
必须在第一句,且只能调用一次
2.this代表当前类的当前对象
在本类中代表当前对象,可在本类的方法、构造方法中使用(类方法不可使用)
1.super()代表本类的父类的构造方法
只能在本类的构造方法中使用(相当于子类构造方法调用父类的构造方法)
必须在第一句,且只能调用一次
无论有无显式调用父类的构造方法在创建子类对象时系统都会自动调用父类的构造方法
如果没有显式调用父类的构造方法在子类的构造方法中会自动调用父类的无参构造方法,若父类无无参构造方法时子类必须显式调用父类的有参构造方法
2.super在本类中代表当前类的父类对象
可以在本类的实例方法、构造方法中调用