概述
目录
1.关于Integer的一个问题
2.关于泛型的一道题
3.关于Integer类型超过128时的一道题
4.以下哪一个不是赋值符号?
5.关于try/catch/finally
6.关于for循环的执行顺序问题
7.下面代码的输出结果是什么?
8.多线程的run()和start()方法的区别
9.~的使用
10 关于Java内存分布的一道题
11不能用来修饰interface的有( )(仅限外部接口)
12.小的知识点,关于封装类和String的一个小细节
1.关于Integer的一个问题
设有下面两个赋值语句:
a = Integer.parseInt("1024");
b = Integer.valueOf("1024").intValue();
下述说法正确的是()
a是整数类型变量,b是整数类对象。
a是整数类对象,b是整数类型变量。
a和b都是整数类对象并且它们的值相等。
a和b都是整数类型变量并且它们的值相等。
parseInt是把一个String类型的变量转化为int的基础数据类型的,valueOf是把一个String类型的值转换成一个Integer类型的值,intValue将返回一个int的基础数据类型的值。
2.关于泛型的一道题
以下说法错误的是()
虚拟机中没有泛型,只有普通类和普通方法
所有泛型类的类型参数在编译时都会被擦除
创建泛型对象时请指明类型,让编译器尽早的做参数检查
泛型的类型擦除机制意味着不能在运行时动态获取List<T>中T的实际类型
错误原因 可以通过反射机制
3.关于Integer类型超过128时的一道题
以下代码执行的结果显示是多少( )?
true,false,true
false,true,false
true,true,false
false,false,true
如果Integer类型的值在-128到127之间,那么就会创建相应的缓存,而超出这个范围则新建一个对象。
如果Integer类型的值大于128,那么就会创建一个新的对象。
4.以下哪一个不是赋值符号?
+=
<<=
<<<=
>>>=
第四个是右移一位然后赋值
5.关于try/catch/finally
在try的括号里面有return一个值,那在哪里执行finally里的代码?
不执行finally代码
return前执行
return后执行
6.关于for循环的执行顺序问题
public class Test
{
static boolean foo(char c)
{
System.out.print(c);
return true;
}
public static void main( String[] argv )
{
int i = 0;
for ( foo('A'); foo('B') && (i < 2); foo('C'))
{
i++ ;
foo('D');
}
}
}
What is the result?
ABDCBDCB
ABCDABCD
Compilation fails.
An exception is thrown at runtime.
for(条件一;条件二;条件三){
执行语句
}
在这个for循环中的执行顺序将是 条件一 →条件二(检查是否满足条件二来判断是否继续执行下去)→ 执行语句 →条件三
7.下面代码的输出结果是什么?
public class ZeroTest {
public static void main(String[] args) {
try{
int i = 100 / 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
throw new RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
3
123
1
12
关于这道题,我之前也确实看了关于异常的一些知识点,可还是在这道题上出错了。
100/0时会抛出异常这个时候在try中的代码块就不在执行了。开始执行catch的代码块,但是在catch中又抛出了一个异常,那么程序就会在这个地方停止执行(除了执行finally中的代码以外)
8.多线程的run()和start()方法的区别
以下JAVA程序的输出是什么()
public class HelloSogou{
public static synchronized void main(String[] a){
Thread t=new Thread(){
public void run(){Sogou();}
};
t.run();
System.out.print("Hello");
}
static synchronized void Sogou(){
System.out.print("Sogou");
}
}
HelloSogou
SogouHello
Hello
结果不确定
就这道题而言,仅调用run()方法而没有调用start()方法时,run()方法只是一个普通的方法调用,并没有开启一个线程。
如果将run()方法改成start()的话,问题就会变复杂许多了。
方法Sougou()和main()持有的都是HelloSougou.class锁,所以方法是同步执行的。当在main()方法里面开启一个子线程进入就绪状态准备调用时,需要获取到HelloSougou.class锁,但是这个时候这个锁还有main()方法进行控制,只有等main()方法执行完毕后我们才可以让Sougou()方法获取到HelloSougou.class锁进行执行,这个时候输出的顺序就是HelloSougou。
9.~的使用
What results from the following code fragment?
1 2 3 |
|
~n = -n-1
具体原理就是
在计算机中,存储的都是数字的补码。对n求补码,然后将n的补码按位取反再减一求出来反码。然后再把反码按位取反求出来的就是~n的原码。
10 关于Java内存分布的一道题
下列Java代码中的变量a、b、c分别在内存的____存储区存放。
1 2 3 4 5 6 7 |
|
堆区、栈区、栈区
这道题后面两个都很好说b,c作为引用放在了栈区,但是"bb","cc"和"aa"都是在静态区的。
11不能用来修饰interface的有( )(仅限外部接口)
private
public
protected
static
接口是一种特殊的抽象类,接口中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象类中的抽象方法不能用的访问修饰符这里也不能用。而且protected访问修饰符也不能使用,因为接口可以让所有的类去实现(非继承),不只是其子类,但是要用public去修饰。接口可以去继承一个已有的接口。
12.小的知识点,关于封装类和String的一个小细节
Integer a = 9;
Integer b = 9;
System.out.println(a==b);
Integer a = new Integer(9);
Integer b = new Integer(9);
System.out.println(a==b);
输出的结果一个是true,一个是false。原因是当我们使用new的时候,我们会在堆区创建一个新的对象。==比较的是两个对象的地址是否相同。所以会是false。但是上方的代码考虑到Integer的缓存机制,a和b指向的都是同一块内存区域,所以是true。
最后
以上就是明理大象为你收集整理的牛客网错题集系列(三)的全部内容,希望文章能够帮你解决牛客网错题集系列(三)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复