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