JAVA - 基础 - 面试题
-
Java三种注释类型
单行注释 //
多行注释 /* … /
文档注释 /* … **/ -
8种基本数据类型及其字节数
-
i++和++i的异同之处
共同点:
1、i++和++i都是变量自增1,都等价于i=i+1
2、如果i++,++i是一条单独的语句,两者没有任何区别
3、i++和++i的使用仅仅针对变量。 5++和++5会报错,因为5不是变量。
不同点:
如果i++,++i不是一条单独的语句,他们就有区别i++ :先运算后增1。如:int x=5; int y=x++; System.out.println("x="+x+", y="+y); //以上代码运行后输出结果为:x=6, y=5
int x=5; int y=++x; System.out.println("x="+x+", y="+y); //以上代码运行后输出结果为:x=6, y=6
-
final , finally和finalize的区别
final关键字 , 指类被final修饰之后 , 不能被继承 ,不能派生子类 ,常量被声明final其值不能再改变
finally是在异常处理时,无论任何情况下,都会被执行的代码块 , 一般用来释放资源
finalize是对象被垃圾回收之前调用的方法 -
重写和重载
重写规则(方法覆盖): -->前提:要有继承
1. 参数列表相同
2. 返回类型相同
3. 访问修饰符要大于等于被重写方法的修饰符(public>protected>default(包权限)>private)
4. 新方法不能抛出大于重写方法声明更广泛的异常类型
例: 被重写方法申明了IOException ,重写方法不能申明Exception -->但是可以抛出非检查型异常重载规则(过载): —>前提:在同一个类中
1.方法名相同
2. 参数列表不同 (个数,类型,顺序)
3.返回值可以不同
4.访问修饰符可以不同重写和重载的区别:
多态性的不同表现
重写是父类与子类之间多态性的一种表现
重载是一类中多态性的一种表现 -
“static” 关键字是什么 ?
“static” 关键字表明这个变量或方法属于类,能通过类名.直接调用
-
static方法能被覆盖吗?
不能,
因为方法的覆盖是基于运行时的动态绑定 ,而static方法是编译时静态绑定的 -
private方法能被覆盖吗?
不能 ,
因为私有的成员外界是看不到的 ,所以不存在覆盖问题 -
return,break,continue三者区别?
return 结束一个方法
break 结束一层循环
continue 跳过一次循环 -
两个对象值相同(x.equals(y) == true) ,但却可有不同的hash code ?
不对 ,会有相同的 hash code
(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;
(2)如果两个对象的hashCode相同,它们并不一定相同。 -
String s = new String(“abc”); 创建了几个String Object ?
两个 , 一个字符串对象 , 一个字符串对象引用对象
-
&和&&的区别?
& :是位运算符 无论前面前面条件是否成立 ,后面判断都会执行
&&: 是逻辑运算符 短路运算 : 前面条件成立 , 后面的判断才执行 -
单例模式
1.饿汉式—>线程安全,效率高,但是不能延迟加载
2.懒汉式—>线程安全,效率低,可以延迟加载
3.静态内部类–>线程安全,效率高,可以延迟加载
4.枚举–>线程安全,效率高,不能延迟加载–>但是可以避免反射创建和反序列化
5.双重检测锁