051错误整理改正

1.下列叙述中,错误的是(B)

a.File类能够存储文件属性

b.File类能够读写文件

c.File类能够建立文件

d.File类能够获取文件目录信息

注释:能够读写文件的是数据流(OutputStream和InputStream)

File类的一些常用的方法和说明:

1.访问文件的相关方法:

2.文件检测相关方法:

3.获取常规文件信息:

4.文件操作相关的方法:

5.目录操作相关方法:

#####2.以下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");

}

}

3.关于以下程序代码的说明正确的是(X=102)

public class HasStatic {

private static int x = 100;

public static void main(String[] args) {

HasStatic hs1 = new HasStatic();

hs1.x++;

HasStatic hs2 = new HasStatic();

hs2.x++;

hs1=new HasStatic();

hs1.x++;

HasStatic.x--;

System.out.println("x="+x);

}

}

注释:这道题的重点是在于x是一个静态变量,静态变量的特点就是能实现数据共享,拥有两种访问方式,一种是通过类名.变量名来访问,另一种就是创建该类的对象来访问

4.有以下代码片段:

String str1 = "hello";

String str2 = "he"+new String("llo");

System.out.println(str1==str2);

输出结果是(false)

注释:String str1="hello"这样创建的字符串是存在于常量池中的;new String("llo")对象是存在于堆中;==是验证两个对象是否一个地址。

5.在java中,对于不在使用的内存资源,如调用完成的方法,“垃圾回收器”会自动将其释放(B)

a.正确      b.错误

注释:因为在方法调用的时候,会创建栈帧在栈中,而垃圾回收器(gc)主要针对堆区。

引用:JVM内存可简单分为三个区:

    a.堆区(heap):用于存放所有对象,是线程共享的,数组也属于对象

    b.方法区(method):用于存放类信息,常量,静态变量,编译后的字节码等,是线程共享的

    c.栈区(stack):用于存放基本数据类型的数据和对象的引用,是线程私有的

java的垃圾回收器只针对堆区。

6.经过强制类型转换后,变量a,b的值分别是多少?

short a = 128;

byte b = (byte) a;

short是16位的所以他转换成二进制就是0000  0000  1000 0000,强制类型转换后只截取后八位即就是10000000,正数用源码表示,负数用补码表示,第一位是符号;因此a截取后8位的二进制是10000000,第一位是1,表示是一个负数,所以结果是-128。a=128,b=-128。

7.java哈希值

        (1)关于HashMap的一些说法:

a.HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HshMap的底层结构是一个数组,数组中的每一项是一条链表。

b.HashMap的实例有两个参数影响其性能:“初始容量”和“装填因子”。

c.HashMap实现不同步,线程不安全。而HashTable线程安全。

d.HashMap中的Key-value都是存储在Entry中的。

e.HashMap可以存null键和null值,不保证元素的顺序恒久不变,他的底层使用的是数组和链表,通过HashCode()方法和equals()方法来保证键的唯一性。

f.解决冲突主要有三种方法:“定址法”,“拉链法”,“再散列法”。HashMap是采用拉链法来解决哈希冲突的。

        (2)HashMap和HashTable的区别

a.继承不同

HashTable:

public  class  HashTable  extends  Dictionary implements  Map

HashMap:

public  class HashMap  extends  AbstractMap  implements  Map

b.HsahTable中的方法是同步的。在多线程并发的环境下,可以直接使用HashTable,但是要使用HsahMap的话就要自己增加同步处理。

c.HsahTable中Key和value都不允许出现null值。但在HashMap中,null可以作为键,这样的键只有一个;但可以有一个或多个键对应的值是null。所以当get()方法返回null时,既可以表示HashMap中么有该键,也可以表示该键所对应的值为null,因此在HashMap中不能有get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。

d.两个遍历方式的内部实现上不同。

e.哈希值的使用不同

HsahTable直接使用对象的hashcode,而HashMap重新计算Hash值。

f.HsahTable和HsahMap他们两个内部实现方法的数组的初始化大小和扩容方式。HsahTable中Hash数组默认大小是11,增加的方式是old*2+1;HashMap中Hash数组的默认大小是16,而且一定是2的指数。

8.假设A类有如下定义,设a类是A类的一个实例,下列语句调用哪个是错误的?(c)

public  class  A

{

    piblic int i ;

    static String s ;

    void method1 ( ) { }

    static void method2 ( ) { }

}

A.System.out.println(a.i);              B.a.method1( );

C.A.method 1 ( ) ;                          D.A.method2( );

解释:静态成员和静态方法,可以直接通过类名进行调用;其他的成员和方法,只能通过进行实例化对象后,通过对象来调用,method1方法不是静态方法所以不能直接用类名来调用。而static修饰的成员变量和方法,既可以通过类名来调用,还可以通过实例对象调用。

9.有关线程的叙述正确的是(c)

A.可以获得对任何对象的互斥锁定

B.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定

C.线程通过使用synchronized关键字可获得对象的互斥锁定、

D.线程的创建只能通过继承Thread类来实现

10.程序继承时顺序是:静态块》构造快》构造方法》main()。

11.int i  = 5;

int s  =  (i++)+(++i)+(i--)+(--i);

s=( )

首先i++时i依然是5,在运算++i时,i变为了6,所以第二个括号值变为7,第三个括号时值依然是7,但在运算第四个括号时变为6进行运算即变成了5,所以上式就可以写成(5+7+7+5)=24。

12.instanceof可用来判断某个实例变量是否属于某种类的类型,还可以判断某个类是否属于某个类的子类的类型。

13.下面那些接口直接继承自collection接口(AC)。

A.list          B.Map        C.Set        D.Interator

collection接口包括:1.List接口:内容允许重复,2.Set接口:内容不允许重复,3.Queue接口:队列接口,4.sortedset接口:单值排序接口。

Map接口包括:1.HashMap接口:无序存放,key不重复。2.HashTable接口:无序存放。key不重复。3.TreeMap接口:按key排序,key不重复。4.IdentityHashMap接口:key可重复。5.weakHashMap接口:弱引用Map集合。

14.下列说法错误的有(ACD)。

A.在类方法中可以用this来调用本类的类方法。

B.在类方法调用本类的类方法时可以直接调用。

C.在类方法中,只能调用本类的类方法。

D.在类方法中绝对不能调用实例方法。

解释:首先我们要知道类方法是什么?类方法就是使用static修饰的方法。所以对于A选项来说,static修饰的方法中是没有this指针的,所以错误。对于B来说,静态成员函数可以直接引用该类的静态成员变量和函数,但不能直接引用非静态成员变量(若要引用,则需通过传递参数的方式得到对象名)故B对。选项C,可以通过继承来调用父类的类方法。选项D,在类方法中不能直接调用实例方法,但可以在类方法中new一个对象然后通过this来调用实例方法。

15.针对以下代码,那些选项执行后是true的(BC)

class  CompareReference{

    public static void main(String  [] args){

        float f = 42.0f;

        float f1[ ] = new float[ 2 ] ;

        float f2 [ ] = new float[ 2 ] ;

        float [ ] f3 = f1;

        long x= 42;

        f1 [ 0 ] = 42.0f;

    }

}

A.f1==f2        B.x=f1[0]        C.f1==f3        D.f2==f1[1]

B:long和float比较,相当于两个float比较,x将会转为float所以相等。

C:f1==f3,f3没有new创建,而是由f1直接赋值,所以f3地址值是指向f1的,f1值改变,相当于f3值,所以相等。

byte---short---int---long---float---double

你可能感兴趣的:(051错误整理改正)