方法中的局部变量一定要手动初始化,不然编译会报错
下面代码的运行结果为:()
public class foo{ public static void main (String[] args){ String s; System.out.println("s=" + s); } }
学生答案: B
正确答案: C
以下选项哪个会有问题
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("亚亚"); } }
学生答案: B
正确答案: C
已知如下定义: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'; } }
学生答案: D
正确答案: B
对于语句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关键字的说法错误的是( )
学生答案: A D
正确答案: B,D
main方法中不能使用this,静态方法中都不能使用,
this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
以下选项中关于如下代码的说法正确的是( )
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 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 C D
正确答案: A,C
以下选项中关于匿名内部类的说法正确的是( )
学生答案: A B C
正确答案: B,C
java虚拟机不与包括Java语言在内的任何程序语言绑定, 它只与“Class文件”这种特定的二进制文件格式所关联, Class文件中包含了Java虚拟机指令集、 符号表以及若干其他辅助信息
Java的字节码文件的扩展名是class,是一种平台独立的非二进制文件
A正确
B错误
学生答案: B
正确答案: B
线程可以用yield使低优先级的线程运行
学生答案: 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中
运行时异常,编译时异常有什么区别
abstract class和interface有什么区别?
实现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,创建打印类对象,创建两个线程类对象,启动线程