Java教程

javase测试题修正

本文主要是介绍javase测试题修正,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

变量初始化

方法中的局部变量一定要手动初始化,不然编译会报错

下面代码的运行结果为:()

 public class foo{
     public static void main (String[] args){
 		String s; 
 		System.out.println("s=" + s); 
} }
  • A代码得到编译,并输出“s=”
  • B代码得到编译,并输出“s=null”
  • C由于String s没有初始化,代码不能编译通过
  • D代码得到编译,但捕获到 NullPointException异常

学生答案: B

正确答案: C

final关键字

以下选项哪个会有问题

public class Person {
	public String name;
	public Person(String name) {
		this.name = name;
	}
}
public class Test {
    public static void main(String[] args) {
        final Person person = new Person("欧欧");
        person.name = "美美";
        person = new Person("亚亚");
    }
} 
  • Afinal Person person = new Person("欧欧");
  • Bperson.name = "美美";
  • Cperson = new Person("亚亚");
  • D没有错误

学生答案: B

正确答案: C

str.length()

已知如下定义:String s=”story”;下面( )表达式是合法的

A
s+=”books”
B
char c=s[1];
C
int len=s.length;
D
String t=100;

学生答案: C
正确答案: A
得分: 0分

值传递--引用数据类型

指出下列程序运行的结果( )

public class Example {
	String str = new String("good");   // str = "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';
	}
}
  • Agoodandabc
  • Bgoodandgbc
  • Ctest okandabc
  • Dtest okandgbc

学生答案: D

正确答案: B

下标从0开始

对于语句String s="my name is kitty",以下选项中可以从其中截取”kitty”的是( )


- As.substring(11,16)
- Bs.substring(11)
- Cs.substring(12,17)
- Ds.substring(12,16)

学生答案: B C

正确答案: A,B

this和super关键字

以下关于this和super关键字的说法错误的是( )

  • A this关键字指向当前对象自身,super关键字指向当前对象的直接父类
  • B 在main方法中可以存在this或super关键字,但不能同时存在。
  • C this和super关键字都可以访问成员属性,成员方法和构造方法
  • D 在一个类的构造方法中可以同时使用this和super来调用其他构造方法

学生答案: A D

正确答案: B,D

main方法中不能使用this,静态方法中都不能使用,

this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

FileReader和FileWriter是节点流

以下选项中关于如下代码的说法正确的是( )

public class TestBuffered {
	public static void main(String[] args) throws IOException {
		BufferedReader br = 
			new BufferedReader(new FileReader("d:/1.txt"));
		BufferedWriter bw = 
			new BufferedWriter(new FileWriter("d:/2.txt"));
		String str = br.readLine();
		while(str !=null){ 
			bw.write(str); 
			bw.newLine();
			str = br.readLine();
		} 
		br.close();
		bw.close();	
	}
}
  • A 该类使用字符流实现了文件复制,将d:/1.txt复制为d:/2.txt
  • B FileReader和FileWriter是处理流(包装),直接从文件读写数据
  • C BufferedReader和BufferedWriter是节点(底层)流,提供缓冲区功能,提高读写效率
  • D readLine()可以读取一行数据,返回值是字符串类型,简化了操作

学生答案: A B D

正确答案: A,D

方法重载

下面( )方法是public void example(){…}的重载方法

private String example(){…}
public int example(String str){…}
public void example2(){…}
public int example(int m,float f){…}

学生答案: A B D

正确答案: B,D

抽象类和抽象方法

下列选项中,关于Java的抽象类和抽象方法说法正确的是( )

  • A 抽象类中可以含有0个或多个抽象方法
  • B 抽象类中不可以有构造方法
  • C 一个类中若有抽象方法,则这个类必为抽象类
  • D 子类必须重写父类所有的抽象方法

学生答案: A C D

正确答案: A,C

匿名内部类

以下选项中关于匿名内部类的说法正确的是( )

  • A匿名内部类可以实现多个接口,或者继承一个父类
  • B匿名内部类不能是抽象类,必须实现它的抽象父类或者接口里包含的所有抽象方法
  • C匿名内部类没有类名,所以匿名内部类不等定义构造方法
  • D匿名内部类可以直接访问外部类的所有局部变量

学生答案: A B C

正确答案: B,C

Class文件

java虚拟机不与包括Java语言在内的任何程序语言绑定, 它只与“Class文件”这种特定的二进制文件格式所关联, Class文件中包含了Java虚拟机指令集、 符号表以及若干其他辅助信息

Java的字节码文件的扩展名是class,是一种平台独立的非二进制文件

A正确

B错误

学生答案: B

正确答案: B

线程可以用yield使低优先级的线程运行

  • A正确
  • B错误

学生答案: A

正确答案: B

实际运行中发现,Thread.yield()方法并不是仅仅选择让步于同等或者更高优先级的线程。高优先级的线程也会让步与低优先级的线程。因此高优先级仅仅是线程获得的CPU时间片更多一些,相对执行到的机会更大,并不是一定先执行。

Thread.yield ()只是让当前正在运行的线程让出它的时间片,具体下一个让谁来运行是线程调度器的事儿,Thread.yield ()方法的用处也可能仅限于优化忙等待的性能和调试

假设文件”a.txt”的长度为100字节,那么当正常运行语句

OutputStream f=new FileOutputStream(new File(“a.txt”));

之后,文件”a.txt”的长度变为0字节

(1分)
A
正确
B
错误
学生答案: B
正确答案: A

执行语句
String str="abcedf"; 
int length=str.length; 
后,能够得到字符串的长度是6

(1分)
A
正确
B
错误
学生答案: A
正确答案: B

包装类Integer的静态方法可以将字符串类型的数字”123”转换成基本整型变量n,其实现语句是:_________________.

int n = Integer.parseInt("123")
    

如何理解静态上下文无法访问非静态的成员变量和成员方法?

所谓静态上下文不能访问非静态的成员变量或成员方法其实是指,在静态上下文中,无法访问,当前对象this的成员变量,或在当前对象this上调用其非静态的成员方法。因为对于静态上下文而言,静态的东西都是不依赖于对象而存在,所以当静态上下文被访问的时候,当前对象可能并不存在,所以自然无法访问。

"=="和equals方法有何异同?

== 对于基本数据类型的数据而言,比较的是内容,对于引用数据类型的数据而言,比较的引用变量,所指向的内存地址。 equals方法是Object类的方法,其默认实现是比较两个对象的内存地址是否相同,若想:要比较量对象的内容是否相同,则需要在子类中覆盖Object的equals方法

字符流和字节流最主要的区别是什么?如何理解字符流=字节流+编码表?

字节流和字符流最主要的区别是,流中数据的逻辑单位不同,字节流中数据的逻辑单位是二进制的字节数据,而字符流中,数据的逻辑单位是单个字符。

a)字符数据在内存中还是以二进制(字符的在编码表中对应的编码值)的形式保存和传输

b)而对于二进制的字节数据的写和读,字节流就已经能够很好的完成了

c) 但为了保证字符流中的数据是一个一个的完整字符,所以字符流在字节流的基础上,添加了编解码器,即在使用底层字节流写数据前,先利用编码器,对字符数据进行编码得到字符数据对应的二进制编码序列,然后利用底层字节流传输它们,同时,在读取数据的时候,先用解码器,将由底层字节流传输的字节数据,解码成一个一个的字符。

所以字符流的功能实现是字节流 + 编码表(基于编码表的编解码操作)

同步和异步有何异同,在什么情况下分别使用他们?

异步简单来说就是,线程之间,各自独立运行,互不影响,就好像线程之间“同时”,在各自做自己的事情,简单来说,就是我走你也走

同步和异步相对,同步是指线程之间不能在各自为政,自己运行自己的,而是在某些情况下等待其他线程。简单来说,就是我走你不走

线程天生就是异步执行的,而当多线程异步访问同一个共享数据的时候,为了保证共享数据访问的正确性,必须保证同时只有一个线程,能访问并修改共享变量的值,这意味着,如果一个线程正在,访问某共享变量,则其他所有要访问该共享变量的线程都需要等待,直到,该线程访问完毕。

Java语言多线程设计中,为什么wait, notify 和 notifyAll这些线程通信的方法不在thread类里面?

线程通信,其实是依靠锁对象,来完成的(对于wait方法而言,调用wait方法的对象,首相必须被当前线程,作为锁对象持有),而java语言中的锁对象,可以是任意对象,因此这些方法被定义在Object中

运行时异常,编译时异常有什么区别

  • 运行时异常 ,在编译过程中,不要求必须进行显示捕捉
  • 编译时异常,在编译过程中,必须进行处理,要么捕捉,要么通过throws 抛出去.

abstract class和interface有什么区别?

  • 使用方式:
    • 抽象类只能够通过继承被使用
    • 接口必须通过实现被使用
  • 实现方法:
    • 抽象类不仅可以提供抽象方法,也可以提供实现方法
    • 接口只能提供抽象方法,不能提供实现方法。 但是在JAVA8版本开始,接口可以提供实现方法了,前提是要在方法前加一个default修饰符

实现Java反射技术的主要类有哪些,其作用分别是什么?

在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中

Class类:代表一个类

Field 类:代表类的成员变量(属性)

Method类:代表类的成员方法

编程题

使用TCP网络编程完成用户登录功能:客户端输入用户名和密码,向服务器发出登录请求;服务器接收数据并进行判断,如果用户名和密码均是admin,则登录成功,否则登录失败,返回相应响应信息;客户端接收响应信息并输出登录结果。

1)用户User类已提供构造方法 public User(String username,String password)。

2)客户端采用ObjectOutputStream发送封装了用户名和密码的User对象。

3)服务器端和客户端的类名和方法声明如下所示。

public class LoginServer {
	public static void main(String[] args) throws Exception {}
}

public class LoginClient {
	public static void main(String[] args) throws Exception {}
}

编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A-Z。打印顺序为12A34B56C….5152Z。即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一个字母,交替循环打印,直到打印到整数52和字母Z结束。

要求:

(1)编写打印类Printer,声明私有属性index,初始值为1,用来表示是第几次打印。

(2)在打印类Printer中编写打印数字的方法print(int i),3的倍数就使用wait()方法等待,否则就输出i,使用notifyAll()进行唤醒其它线程。

(3)在打印类Printer中编写打印字母的方法print(char c),不是3的倍数就等待,否则就打印输出字母c,使用notifyAll()进行唤醒其它线程。

(4)编写打印数字的线程NumberPrinter继承Thread类,声明私有属性private Printer p;在构造方法中进行赋值,实现父类的run方法,调用Printer类中的输出数字的方法。

(5)编写打印字母的线程LetterPrinter继承Thread类,声明私有属性private Printer p;在构造方法中进行赋值,实现父类的run方法,调用Printer类中的输出字母的方法。

(6)编写测试类Test,创建打印类对象,创建两个线程类对象,启动线程

这篇关于javase测试题修正的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!