牛客网知识点总结(二

1.ResultSet中记录行的第一列索引为?

:

正确答案: C   你的答案: B (错误)

-1
0
1
以上都不是

 ResultSet跟普通的数组不同,索引从1开始而不是从0开始,ResultSet结果集读取数据的方法主要是getXXX() ,他的参数可以使整型表示第几列(是从1开始的),还可以是列名。

3.

Given:
1
2
3
4
5
6
7
8
9
    //point X
public class Foo {
    public static void main(String[] args) throws Exception {
 
        PrintWriter out = new PrintWriter(
            new java.io.OutputStreamWriter(System.out), true);
        out.printIn(“Hello”);
    }
}

Which statement at PointX on line I allows this code to compile and run?

正确答案: A   你的答案: A (正确)

import java.io.PrintWriter;
include java.io.PrintWriter;
import java.io.OutputStreamWriter;
include java.io.OutputStreamWriter;
no statement is needed.
其次:
    1.PrintWriter
    2.OutputStreamWriter
注意:
    在创建OutputStreamWriter的时候,使用的是类的全名称。所以不需要使用import
 
5.daemon线程:
将一个线程标记成daemon线程,意味着当主线程结束,并且没有其它正在运行的非daemon线程时,该daemon线程也会自动结束。
守护线程在非守护线程结束后,会自动结束;
3.daemon线程是守护线程,当主线程结束时,守护线程会自动结束

6.D.Spring提供了AOP方式的日志系统
Spring并没有为我们提供日志系统,我们需要使用AOP(面向方面编程)的方式,借助Spring与日志系统log4j实现我们自己的日志系统。

6.按值传递和按引用传递
given the following code,what will be the output?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Value{
    public int i=15;
}
public class Test{
    public static void main(String argv[]){
        Test t=new Test( );
        t.first( );
    }
 
public void first( ){
    int i=5;
    Value v=new Value( );
    v.i=25;
    second(v,i);
    System.out.println(v.i);
}
 
public void second(Value v,int i){
    i = 0;
    v.i = 20;
    Value val = new Value( );
    v = val;
    System.out.println(v.i+" "+i);
   }
}

正确答案: A   你的答案: B (错误)

15 0 20
15 0 15
20 0 20
0 15 20
可能有人会选择B,包括我刚开始也是。总以为v不是已经指向了val了吗??为什么还是20呢?不应该是15吗?
其实,原因很简单。现在我们把second()换一下
publicvoidsecond(Value tmp,inti){
    i = 0;
    tmp.i = 20;
    Value val = newValue( );
    tmp = val;
    System.out.println(tmp.i+" "+i);
   }
这个tmp其实相当于是一个指向原来first中的V这个对象的指针,也就是对v对象的引用而已。但是引用是会改变所指的地址的值的。
所以在second中当tmp.i= 20的时候,就把原来first中的v的i值改为20了。接下来,又把tmp指向了新建的一个对象,所以在second中的tmp
现在指的是新的对象val,i值为15.
当执行完毕second后,在first中在此输出v.i的时候,应为前面second中已经把该位置的i的值改为了20,所以输出的是20.
至于疑惑v指向了val,其实只是名字的问题,在second中的v实践也是另外的一个变量,名字相同了而已,这个估计也是纠结的重点。
简单的总结,不对希望可以提出来,谢谢!
 
8.
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test
{
     public static void changeStr(String str)
     {
         str = "welcome";
     }
     public static void main(String[] args)
     {
         String str = "1234";
         changeStr(str);
         System.out.println(str);
     }
}
Please write the output result 。
正确答案: A   你的答案: B (错误)

1234
welcome
空
不确定

引用类型作为形参传递会改变实参的值,但是String是特殊的引用类型,作为形参传递不会影响实参的值。

此处应该考察Java方法参数传递特性。Java方法调用中,只存在值传递调用。
此处,实参str是引用变量,由于java方法调用是值传递,所以形参str得到的是实参str的一个拷贝。此时形参str和实参str均指向字符串"1234"。
然后,在changeStr方法中,形参str指向了一个新的字符串"welcom",而后方法结束,形参str被销毁。而实参str仍然指向字符串"1234"。
 
9.
floor: 求小于参数的最大整数。返回double类型-----n. 地板,地面
         例如:Math.floor(-4.2) = -5.0
-----------------------------------------------------------
ceil:   求大于参数的最小整数。返回double类型-----vt. 装天花板;
         例如:Math.ceil(5.6) = 6.0
-----------------------------------------------------------
round: 对小数进行四舍五入后的结果。返回int类型
         例如:Math.round(-4.6) = -5
 
10.LinkedList的内存结构是用双向链表存储的,链式存储结构插入和删除效率高,不需要移动。但是随机访问效率低,需要从头开始向后依次访问
 
11.change方法里面是将传入的参数修改成10,但是并没有对SendValue的属性str就行修改,要修改必须指明this.str="10",所有答案还是6
以下代码输出的是:
1
2
3
4
5
6
7
8
9
10
11
public class SendValue{
    public String str="6";
    public static void main(String[] args) {
        SendValue sv=new SendValue();
        sv.change(sv.str);
        System.out.println(sv.str);
    }
    public void change(String str) {
        str="10";
    }
}

正确答案: A   你的答案: B (错误)

6
10
都不对
16

10.CallableStatement继承自PreparedSatement,PreparedStatement继承自Statement,这个题出的不严谨,觉得BC都算正确。

11.

检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package algorithms.com.guan.javajicu; 
public class Example { 
  String str = new String("good"); 
  char[] ch = {'a','b','c'}; 
  public static void main(String[] args) { 
     Example ex = new Example(); 
     ex.change(ex.str, ex.ch); 
     System.out.print(ex.str +"and"); 
     System.out.print(ex.ch);  
  
    
  public void change(String str, char ch[]){ 
     str= "test ok"
     ch[0]= 'g'
  

正确答案: D   你的答案: B (错误)

test okandabc
test okandgbc
goodandabc
goodandgbc

本题知识点

参考解析添加解析

  • java 中String是 immutable的,也就是不可变,一旦初始化,其引用指向的内容是不可变的。
     
    也就是说,String str = “aa”;str=“bb”;第二句不是改变“aa”所存储地址的内容,而是另外开辟了一个空间用来存储“bb”;同时由str指向
     
    原来的“aa”,现在已经不可达,GC时会自动回收。
     
    因此String作为参数传进来时候,str= "test ok"; 实际给副本引用str指向了新分配的地址,该地址存储“test ok”。
     
    因此,原先的str仍然指向“good”
    编辑于 2016-01-17 20:49:58回复(5)
  • 更多回答(30条)
  • 副本与原数据是不相关的,不会相互影响的。不过一般方法传递时候,只有基本数据类型和String才会传递副本,其他的类型是按引用的传递的。
    发表于 2016-01-17 19:45:21回复(0)
  • d 如果传入的参数是引用类型,那么传递过来的就是这个引用参数的副本,该副本存放参数地址。如果函数中没有改变这个副本的地址,而是改变了地址中的值。那么该改变会影响到传入的参数。如果改变了副本的地址,则该副本指向了一个新的地址,此时传入的参数还是指向原来的地址
     
    12.
    D
    suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume() 被调用,才能使得线程重新进入可执行状态
    能不能出一些新一点的题目,Thread类的suspend()和resume()方法都已经被声明已废弃了,考这种题目有意思?
     
    13.
    java关于异常处理机制的叙述哪些正确

    正确答案: B C   你的答案: B C (正确)

    catch部分捕捉到异常情况时,才会执行finally部分
    当try区段的程序发生异常时,才会执行catch区段的程序
    在try区段不论程序是否发生错误及捕获到异常错误,都会执行finally部分
    以上都是

    15.
    abstract class和interface有什么区别。

    正确答案: A B D   你的答案: A B D (正确)

    抽象类可以有构造方法,接口中不能有构造方法
    抽象类中可以有普通成员变量,接口中没有普通成员变量
    抽象类中不可以包含静态方法,接口中可以包含静态方法
    一个类可以实现多个接口,但只能继承一个抽象类。
原文地址:https://www.cnblogs.com/panxuejun/p/5940341.html