📄 java面试题.txt
字号:
long[] l = new int[3];
i = (long[])l;//不可以转换
26.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。
Server.java:源代码
import java.net.*;
import java.io.*;
class Server
{
public Server()
{
BufferedReader br = null;
PrintWriter pw = null;
try
{
ServerSocket server = new ServerSocket(8888);//建立服务器端
Socket socket = server.accept();//监听客户端
//得到该连接的输入流
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//得到该连接的输出流
pw = new PrintWriter(socket.getOutputStream(),true);
//先读后写
String data = br.readLine();
System.out.println(data);//输出到控制台
pw.println(data);//转发给客户端
}catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
//关闭读写流
br.close();
pw.close();
}catch(Exception e)
{}
}
}
public static void main(String[] args)
{
Server server = new Server();
}
}
Client.java:源代码
import java.net.*;
import java.io.*;
class Client
{
public Client()
{
BufferedReader br = null;
PrintWriter pw = null;
try
{
Socket socket = new Socket("localhost",8888);//与服务器建立连接,服务器要先启
//得到Socket的输入与输出流
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream(),true);
//先写后读
pw.println("Client:你好!");
String data = null;
while(true)
{
data = br.readLine();
if(data!=null) break;
}
System.out.println(data);
}catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
br.close();
pw.close();
}catch(Exception e)
{}
}
}
public static void main(String[] args)
{
Client c = new Client();
}
}
27.谈谈final, finally, finalize的区别。
答案:final 用于声明属性,方法和类,分别表示属性不可变,注意:如果是基本类型说明变
量本身不能改变,如果是引用类型,说明它不能指向其他的对象了。但对象还是可以改变
的。方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示无论是否出现异常总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
28.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
答案:可以继承其他类或完成其他接口,在swing编程中常用此方式。
29.Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
答案:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例
被实例化。而通常的内部类需要在外部类实例化后才能实例化。
30.&和&&的区别。
答案:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
31.HashMap和Hashtable的区别。
答案:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都实现了Map接口,
主要区别在于HashMap允许空(null)键值(key)与空值(value),由于非线程安全,效率上可能高于Hashtable,Hashtable不允许有空(null)键值(key)与空值(value)。
32.什么时候用assert?
答案:1.4新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。使用方法 assert <boolean表达式>,表示如果表达式为真(true),则下面的语句执行,否则抛出Assertionerror。
33.GC是什么? 为什么要有GC?
答案:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
34.String s = new String("xyz");创建了几个String Object?
答案:两个,一个是对象,一个是对象的引用。
35.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
答案:Math.round(11.5)==12
Math.round(-11.5)==-11,总是返回接近0的数。
36.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答案:short s1 = 1; s1 = s1 + 1; 有错(s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(没有错,s1==2)
37.sleep() 和 wait() 有什么区别?
答案:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间(休息),把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复,时间到了会继续运行。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
38.Java有没有goto语句?
答案:没有
39.数组有没有length()这个方法? String有没有length()这个方法?
答案:数组没有length()这个方法,有length的属性。
String有length()这个方法。
40.数组是不是基本类型?
答案:不是。
41.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
答案:方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重载Overload是一个类中多态性的一种表现,方法名必需相同,参数列表必需不同.(长度不同或类型不同),与返回值类型没有关系. 构造器也可以重载.方法名和参数列表都相同,只有返回类型不相同则是方法重复定义.编译出错. Overloaded的方法是可以改变返回值的类型。
重写Override是父类与子类之间多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
42.Set里的元素能重复吗?那么用什么方法区分是否重复?
答案:Set里的元素是不能重复的,如果重复就重复的就不加到里面。用iterator()方法来区分
重复与否。应该覆盖equals()判断两个Set是否相等。
43.”==”与equal有何区别?
答案:“==”比较的是内存地址,equal比较的是内容本身。
44.给我一个你最常见到的runtime exception。
答案:IndexOutOfBoundsException 数组越界
NullPointerException 空指针异常
SystemException 系统异常
45.error和exception有什么区别?
答案:Error表示系统级的错误和程序不必处理的异常,我们无法处理它。
Exception表示是可以捕捉或者需要程序进行处理的异常。
46.List, Set, Map是否继承自Collection接口?
答案:List,Set是。Map不是
47.abstract class和interface有什么区别?
答案:一个只能继承一个抽象类,但却可以实现多个接口。抽象类中可以有也可以没有抽
象方法。并且可以定义和常规类一样的变量和方法。而接口中所有的方法都是抽象的,所
有的变量都是静态不可修改的。
48.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答案:都不能。
49.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类答(concrete class)?
答案:接口可以继承接口。接口间继承(extends),不能实现(implements)。
抽象类可以实现(implements)接口,但接口不能实现抽象类。抽象类间也用继承(extends)。
抽象类是否可继承实体类,但前提是实体类必须有无参的构造函数。
50.启动一个线程是用run()还是start()?有什么区别?
答案:启动一个线程是调用start()方法,这并不意味着线程就会立即运行,只是进入了可运行状态。直接调用run()方法不会产生线程,而是把它当作普通的方法调用,马上执行。
51.Constructor是否可被override?
答案:不可以,但可以重载。
52. Class.forName的作用?
答:调用该访问返回一个类名为指定字符串的类的对象。
53.文件读写的基本类有哪些?
答案:FileInputStream,FileOutputStread,File,IOException等。
54.写一个冒泡排序的程序。
public class Sort
{
public static void main(String[] args)
{
int[] array = {2,3,4,1,43,432,1,344,234,2,3,43,32,434,3432,43,2432,432,4,43};
int num = 0;
/*
冒泡排续
*/
for(int i = 0;i < array.length;i++)
{
/*
每下底一个元素,则调换的次数减一。
注意:j<array.length-i-1,不减一则数组下标越界。
*/
for(int j = 0;j<array.length-i-1;j++)
{
int temp = 0;
/*
两两比较若前面的大于后面的则进行调换。
*/
if(array[j] > array[j+1])
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
/*
输出排序后的数组
*/
System.out.println("****************已排序的数组********");
for(int i = 0;i < array.length;i++)
{
System.out.print(array+"");
num++;
if(num == 5)//每行输出5个。
{
System.out.println();
num = 0;
}
}
}
}
55.串行化的注意事项以及如何实现串行化?(Serializable)
答案:*******************************
56.线程的基本概念、线程的基本状态以及状态之间的关系
答案:*******************************
57.线程的同步、如何实现线程的同步?
答案:*******************************
58.几种常用的数据结构及内部实现原理。
答案:*******************************
59.Socket通信(TCP、UDP区别及Java实现方式)
答案:*******************************
60.Java的事件委托机制和垃圾回收机制
答案:*******************************
61.作用域public,private,protected,以及不写时的区别。
答案:private-类可见,不写-包可见
protected-包可见,并子类可见 public-都可见
62.Java的国际化
答案:*******************************
63.怎样让程序到后台去运行?
答案:*******************************
64.怎么把一个文件中的东西做全文替换。
答案:*******************************
65.ArrayList和Vector的区别?
答案:就ArrayList与Vector主要从二方面来说.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -