本章为java面试宝典中的题目,我在线下已刷一遍,为了加强理解及记忆
进行线上记录及记忆,并且对相关问题答案简化为自己的归纳总结
可以,但是只能包含一个public修饰的类,并且这个类的类名必须和文件名相同
1.java中的goto是保留字,还没有在java中使用
2.goto有在C语言中使用,通常与循环、条件语句等一起使用,用于跳转。但是不建议使用它,因为它可以在同一个作用域中任意跳转,可能会导致程序的流程错乱。
1.二者都可以用作逻辑与使用,当前后两表达式都为真时,结果都为true。当前后两表达式其中有一个为假时,则结果为false。
2.但是&&有短路的功能,前一个表达式为假时会短路,不会再执行后一个表达式,直接返回false。
例如:
if(str !=null && !str.equals(" ")){} 当str等于null时,判断第一个表达式为假,短路,直接返回false
if(str !=null & !str.equals(" ")){} 当str等于null时,判断第一个表达式为假后,仍旧执行第二个表达式,会抛出NullPointException
在外层循环中定义一个标志,在内层循环里面直接break 标志即可
可以作用在byte上,不可以作用在long和String上
1.swith(expr) :其中表达式expr只能使用枚举或者整数类型
2.其中byte,char,short会隐式转换为整数类型int 所以byte可以
long和String都不符合条件
1.前者编译错误 s1为short类型,s1+1在运算中转换为了int类型,高等级的数据类型int不可以直接转换为低等级的short,否则编译错误,必须实行强转。如 s1 = (short)s1+1;
2.后者可正常编译,s1+=1;其实执行的是s1 = (short) (s1 + 1); 其中会有一个强制转换的过程。
引用不可变,引用的对象可变
尤其是使用append()方法时
例如:
final String a = new String("makasa");
a = new String("levi"); #编译报错,因为修改了引用
a.append("levi"); #正常编译 引用内容可变
1.==比较的是地址值和值,equals比较的是值
2.当一个类没有重写equals方法,而是直接使用的Object类下的equals方法,则和 ==作用一样,因为Object下的equals方法底层原理就是用 ==来比较的。
3.String类中重写了equals方法,所以equals比较的是值
1.静态变量有关键字static修饰
2.静态变量随类加载而加载,当类一加载就为其分配存储空间
而实例变量依赖于实例对象,必须先创建实例对象,通过实例对象调用才为其分配存储空间
不可以
static方法只能调用方法外部的静态成员变量和方法,因为静态方法随类加载而加载,当一类加载就为其分配了存储空间
如果去调用一个非静态方法,当这个非静态方法还未被实例对象调用并分配存储空间,则会返回NullPointException
1.所属范畴不同:int是java八大基本数据类型之一、Integer是int的包装类型
2.初始值不同:int的初始值为0,Integer初始值为null
public:可以访问所有包下的类及其子孙类
protected:可访问同一个包下的类及其子孙类
friendly(即无修饰符):可访问同一包下的类
private:只可访问当前类
1.含义不同
Override:重写 ,即子类重写父类方法,覆盖父类原来方法
OverLoad:重载,即同一个类中包含两个及两个以上的方法名相同,参数列表不同的方法
2.如果参数列表相同的话,返回值类型是可以改变的
如果参数列表不同,即使改变了返回值类型,也不是重载
不可以
构造器不可以被重写,但是可以重载,只需要参数列表不同即可
都可以
抽象类和普通类的区别仅仅在于:含有abstract修饰的方法就为abstract类,抽象类中不可以创建实例对象
1.抽象类中可以有普通成员变量,接口中不可以
2.抽象类中可以有构造方法,接口中不可以
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的
4.抽象类中可以包含静态方法,接口中不可以
5.抽象类中可以包含静态成员变量,且静态成员变量的访问类型可是任意
接口中定义的变量只能是public static final类型的
6.抽象类的抽象方法的访问类型可以是public和protected,接口中的方法都默认为public abstract
7.一个类可以实现多个接口,但是只能继承一个抽象类
1.不可以同时static,因为抽象方法需要被子类重写,而static修饰的方法不可以重写
2.不可以同时是native,因为本地方法是由本地代码实现的方法,抽象方法是没有实现的
3.不可以同时被synchronize修饰,因为synchronize和方法实现的细节有关,而抽象方法不涉及方法实现
1.内部类即在一个类内部定义的类,内部类中不能定义静态成员
2.静态内部类:只可以调用外部的静态成员,不可以访问外部的非静态资源
可以
但是如果是静态内部类的话,只能调用外部的静态成员
1.String类被final修饰,是不可变的
2.StringBuffer和StringBuilder是可变的
1.final可修饰类,方法,变量
2.finally:属于try,catch异常处理语句中的一部分,finally中的代码必须执行
3.finalize:是Object中的一个方法,用于垃圾回收
NullPointException
ClassCastException
ConnectionExpetion
ArrayIndexOutOfBoundException
1.sleep是Thread中的方法,wait是Object类中的方法
2.本质区别:sleep不释放锁,只是让当前线程进入休眠阶段,等待休眠时间完后,自动醒来进入可运行状态,不会马上进入运行状态。
wait方法释放锁,然后进入等待此对象的等待锁定池,只有调用notyfy()方法唤醒该线程后才进入可运行状态。
3.sleep可在任何地方使用,wait只能在同步方法或者同步代码块中使用
4.sleep需要捕获or抛出异常,而wait/notify不需要