Java大量面试题目.docx
- 文档编号:4841137
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:39
- 大小:35.44KB
Java大量面试题目.docx
《Java大量面试题目.docx》由会员分享,可在线阅读,更多相关《Java大量面试题目.docx(39页珍藏版)》请在冰豆网上搜索。
Java大量面试题目
Java基础方面:
1、作用域public,private,protected,以及不写时的区别
答:
区别如下:
作用域当前类同一package子孙类其他package
public√√√√
protected√√√×
friendly√√××
private√×××
不写时默认为friendly
2、ArrayList和Vector的区别,HashMap和Hashtable的区别
答:
就ArrayList与Vector主要从二方面来说.
一.同步性:
Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:
当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
就HashMap与HashTable主要从三方面来说。
一.历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现
二.同步性:
Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:
只有HashMap可以让你将空值作为一个表的条目的key或value。
2.1两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?
不对,有相同的hashcode。
2.2当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。
Java编程语言只由值传递参数。
当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。
对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
2.3swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。
因此传递给switch和case语句的参数应该是int、short、char或者byte。
long,string都不能作用于swtich。
(它能使用长度是在int范围之内的)
2.4下面都是正确的main方法签名。
publicstaticvoidmain(String[]args)
publicstaticfinalvoidmain(String[]args)
staticpublicvoidmain(String[]args)
staticpublicsynchronizedvoidmain(String[]args)
2.5说出一些常用的类,包,接口,请各举5个?
答案:
常用类-System,ArrayList,FileInputStream,Thread,Socket.
常用的包-java.io,java.util,java.sql,java.javax.naming,
常用接口-Collection,Connection,Cloneable,Comparable,Serializable
2.6进程和线程的区别:
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了
程序的运行效率。
线程在执行过程中与进程还是有区别的。
每个独立的线程有一个程序运行的入口、顺序执行了序列和程序的出口。
但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。
但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。
这就是进程和线程的重要区别。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
3、char型变量中能不能存贮一个中文汉字?
为什么?
(方正简答题)
答:
是能够定义成为一个中文的,因为java中以unicode编码,一个char占16位,所以放一个中文是没问题的。
3.1Overload和Override的区别。
Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型。
3.2Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
是用==还是equals()?
它们有何区别?
Set里的元素是不能重复的,用iterator()方法来区分重复与否。
equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
3.3error和exception有什么区别?
error表示恢复不是不可能但很困难的情况下的一种严重问题。
比如说内存溢出。
不可能指望程序能处理这样的情况。
exception表示一种设计或实现问题。
也就是说,它表示如果程序运行正常,从不会发生的情况。
3.4abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
3.5接口是否可继承接口?
抽象类是否可实现(implements)接口?
抽象类是否可继承实体类(concreteclass)?
接口可以继承接口。
抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
3.6启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。
这并不意味着线程就会立即运行。
run()方法可以产生必须退出的标志来停止一个线程。
3.7构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
3.8是否可以继承String类?
String类是final类故不可以继承。
3.9当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
4、多线程有几种实现方法,都是什么?
同步有几种实现方法,都是什么?
答:
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify
4.1谈谈final,finally,finalize的区别。
final?
修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。
因此一个类不能既被声明为abstract的,又被声明为final的。
将变量或方法声明为final,可以保证它们在使用中不被改变。
被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
被声明为final的方法也同样只能使用,不能重载
finally?
再异常处理时提供finally块来执行任何清除操作。
如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。
finalize?
方法名。
Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在Object类中定义的,因此所有的类都继承了它。
子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。
finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
4.2&和&&的区别。
&是位运算符。
&&是布尔逻辑运算符。
4.3HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap类没有分类或者排序。
它允许一个null键和多个null值。
Hashtable类似于HashMap,但是不允许null键和null值。
它也比HashMap慢,因为它是同步的。
4.4Collection和Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
4.5Strings=newString("xyz");创建了几个StringObject?
(方正选择题)
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
4.6Math.round(11.5)等於多少?
Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
4.7shorts1=1;s1=s1+1;有什么错?
shorts1=1;s1+=1;有什么错?
(方正选择题)
shorts1=1;s1=s1+1;有错,s1是short型,s1+1是int型,不能显式转化为short型。
可修改为s1=(short)(s1+1)。
shorts1=1;s1+=1正确。
4.8sleep()和wait()有什么区别?
搞线程的最爱
sleep()方法是使线程停止一段时间的方法。
在sleep时间间隔期满后,线程不一定立即恢复执行。
这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
4.9数组有没有length()这个方法?
String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有length()这个方法。
5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
答:
父类:
packagetest;
publicclassFatherClass
{
publicFatherClass()
{
System.out.println("FatherClassCreate");
}
}
子类:
packagetest;
importtest.FatherClass;
publicclassChildClassextendsFatherClass
{
publicChildClass()
{
System.out.println("ChildClassCreate");
}
publicstaticvoidmain(String[]args)
{
FatherClassfc=newFatherClass();
ChildClasscc=newChildClass();
}
}
输出结果:
C:
>javatest.ChildClass
FatherClassCreate
FatherClassCreate
ChildClassCreate
6、内部类的实现方式?
答:
示例代码如下:
packagetest;
publicclassOuterClass
{
privateclassInterClass
{
publicInterClass()
{
System.out.println("InterClassCreate");
}
}
publicOuterClass()
{
InterClassic=newInterClass();
System.out.println("OuterClassCreate");
}
publicstaticvoidmain(String[]args)
{
OuterClassoc=newOuterClass();
}
}
输出结果:
C:
>javatest/OuterClass
InterClassCreate
OuterClassCreate
再一个例题:
publicclassOuterClass{
privatedoubled1=1.0;
//insertcodehere
}
Youneedtoinsertaninnerclassdeclarationatline3.Whichtwoinnerclassdeclarationsare
valid?
(Choosetwo.)
A.classInnerOne{
publicstaticdoublemethoda(){returnd1;}
}
B.publicclassInnerOne{
staticdoublemethoda(){returnd1;}
}
C.privateclassInnerOne{
doublemethoda(){returnd1;}
}
D.staticclassInnerOne{
protecteddoublemethoda(){returnd1;}
}
E.abstractclassInnerOne{
publicabstractdoublemethoda();
}
说明如下:
一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。
故A、B错
二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;returnd1出错。
故D错
三.非静态内部类的非静态成员可以访问外部类的非静态变量。
故C正确
四.答案为C、E
7、垃圾回收机制,如何优化程序?
希望大家补上,谢谢
8、float型floatf=3.4是否正确?
答:
不正确。
精度不准确,应该用强制类型转换,如下所示:
floatf=(float)3.4
9、介绍JAVA中的CollectionFrameWork(包括如何写自己的数据结构)?
答:
CollectionFrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
Map提供key到value的映射
10、Java中异常处理机制,事件机制?
11、JAVA中的多态与继承?
希望大家补上,谢谢
12、抽象类与接口?
答:
抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。
13、Java的通信编程,编程题(或问答),用JAVASOCKET编程,读服务器几个字符,再写入本地显示?
答:
Server端程序:
packagetest;
import.*;
importjava.io.*;
publicclassServer
{
privateServerSocketss;
privateSocketsocket;
privateBufferedReaderin;
privatePrintWriterout;
publicServer()
{
try
{
ss=newServerSocket(10000);
while(true)
{
socket=ss.accept();
StringRemoteIP=socket.getInetAddress().getHostAddress();
StringRemotePort=":
"+socket.getLocalPort();
System.out.println("Aclientcomein!
IP:
"+RemoteIP+RemotePort);
in=newBufferedReader(new
InputStreamReader(socket.getInputStream()));
Stringline=in.readLine();
System.out.println("Cleintsendis:
"+line);
out=newPrintWriter(socket.getOutputStream(),true);
out.println("YourMessageReceived!
");
out.close();
in.close();
socket.close();
}
}catch(IOExceptione)
{
out.println("wrong");
}
}
publicstaticvoidmain(String[]args)
{
newServer();
}
};
Client端程序:
packagetest;
importjava.io.*;
import.*;
publicclassClient
{
Socketsocket;
BufferedReaderin;
PrintWriterout;
publicClient()
{
try
{
System.out.println("TrytoConnectto127.0.0.1:
10000");
socket=newSocket("127.0.0.1",10000);
System.out.println("TheServerConnected!
");
System.out.println("PleaseentersomeCharacter:
");
BufferedReaderline=newBufferedReader(new
InputStreamReader(System.in));
out=newPrintWriter(socket.getOutputStream(),true);
out.println(line.readLine());
in=newBufferedReader(newInputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
out.close();
in.close();
socket.close();
}catch(IOExceptione)
{
out.println("Wrong");
}
}
publicstaticvoidmain(String[]args)
{
newClient();
}
};
14、用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?
如在COLLECTION框架中,实现比较要实现什么样的接口?
答:
用插入法进行排序代码如下
packagetest;
importjava.util.*;
classInsertSort
{
ArrayListal;
publicInsertSort(intnum,intmod)
{
al=newArrayList(num);
Randomrand=newRandom();
System.out.println("TheArrayListSortBefore:
");
for(inti=0;i { al.add(newInteger(Math.abs(rand.nextInt())%mod+1)); System.out.println("al["+i+"]="+al.get(i)); } } publicvoidSortIt() { IntegertempInt; intMaxSize=1; for(inti=1;i { tempInt=(Integer)al.remove(i); if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue()) { al.add(MaxSize,tempInt); MaxSize++; System.out.println(al.toString()); }else{ for(intj=0;j { if (((Integer)al.get(j)).intValue()>=tempInt.intValue()) { al.add(j,tempInt); MaxSize++; Syste
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 大量 面试 题目