有意思的Java题目
程序员文章站
2022-03-12 16:05:12
...
instanceof关键字的作用
instanceof
严格来说是
Java
中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:
boolean result = obj instanceof Class
其中
obj
为一个对象,
Class
表示一个类或者一个接口,当
obj
为
Class
的对象,或者是其直接或 间接子类,或者是其接口的实现类,结果result
都返回
true
,否则返回
false
。 注意:编译器会检查 obj
是否能转换成右边的
class
类型,如果不能转换则直接报错,如果不能确定 类型,则通过编译,具体看运行时定。
inti=0;
System.out.println(i instanceof Integer);//编译不通过i必须是引用类型,不能是基本类型 System.out.println(i instanceof Object);//编译不通过
Integer integer=newInteger(1);
System.out.println(integer instanceof Integer);//true
System.out.println(null instanceof Object); //false,在JavaSE规范中对instanceof运算符的规定就是:如果obj为null,那么将返回false。
Java创建对象有几种方式?
java
中提供了以下四种创建对象的方式
:
- 1. new创建新对象
- 2. 通过反射机制
- 3. 采用clone机制
- 4. 通过序列化机制
a=a+b与a+=b有什么区别吗?
+=
操作符会进行隐式自动类型转换
,
此处
a+=b
隐式的将加操作的结果类型强制转换为持有结果的类型
,
而
a=a+b
则不会自动进行类型转换。
如:
byte a = 127;
byte b = 127;
b = a + b; // 报编译错误:cannot convert from int to byte b += a;
以下代码是否有错
,
有的话怎么改?
short s1= 1;
s1 = s1 + 1;
有错误
.short
类型在进行运算时会自动提升为
int
类型
,
也就是说
s1+1
的运算结果是
int
类型
,
而
s1
是
short 类型,此时编译器会报错。正确写法:
short s1= 1;
s1 += 1;
//相当于 s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
+=
操作符会对右边的表达式结果强转匹配左边的数据类型
,
所以没错。
fifinal、fifinalize()、fifinally
- fifinal为用于标识常量的关键字,fifinal标识的关键字存储在常量池中(在这里fifinal常量的具体用法将在下面进行介绍);
- fifinalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用 户自定义时,用于释放对象占用的资源(比如进行I/0操作);
- fifinally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;
Java
有没有
goto :Java中的保留字,现在没有在
java
中使用
用最有效率的方法算出
2
乘以
8等於几:2 << 3
排序都有哪几种方法?
- 插入排序(直接插入排序、希尔排序),
- 交换排序(冒泡排序、快速排序),
- 选择排序(直接选择排序、堆排序),
- 归并排 序,分配排序(箱排序、基数排序)
构造器(constructor)是否可被重写(override)?构造器不能被继承,因此不能被重写,但可以被重载。
char 型变量中能不能存贮一个中文汉字,为什么? char 类型可以存储一个中文汉字,因为 Java 中使用的编码是 Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统 一的唯一方法),一个 char 类型占 2 个字节(16 比特),所以放一个中文是没问题的。
Java 中会存在内存泄漏吗?请简单描述。
例如
Hibernate
的
Session
(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无
用的垃圾对象 ,如果不及时关闭(
close
)或清空(
flflush
)一级缓存就可能导致内存泄露 。
抽象的(
abstract
)方法是否可同时是静态的(
static
)
,
是否可同时是本地方法
(
native
),是否可同时被
synchronized修饰?
都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由本地代码(如
C
代码)实现的方法,而 抽象方法是没有实现的,也是矛盾的。synchronized
和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。
19页