java基础知识问答Word文档下载推荐.docx
《java基础知识问答Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java基础知识问答Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
创建了两个,一个字符对象,一个引用对象
7.shorts1=1;
s1=s1+1;
有什么错?
shorts1=1;
s1+=1;
两个错误都是一样的,后者只是加法的写法不一样,两个错误都是因为s1是short型而1是整型相加后数据类型就变为整型了,与s1定义为short型有矛盾,必须进行强制类型转换才正确。
8.数组有没有length()这个方法?
String有没有length()这个方法?
数组没有,String有。
9.Overload和Override的区别
方法的覆盖(Overriding)和重载(Overloading)是Java多态性的不同表现。
覆盖(Overriding)是父类与子类之间多态性的一种表现,重载(Overloading)是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被覆盖(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法可以改变返回值的类型。
10.abstractclass和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。
不能创建abstract类的实例。
然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。
不能有抽象构造函数或抽象静态方法。
Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。
取而代之,在子类中实现该方法。
知道其行为的其它类可以在类中实现这些方法
接口(interface)是抽象类的变体。
在接口中,所有方法都是抽象的。
多继承性可通过实现这样的接口而获得。
接口中的所有方法都是抽象的,没有一个有程序体。
接口只可以定义staticfinal成员变量。
接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。
当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。
然后,它可以在实现了该接口的类的任何对象上调用接口的方法。
由于有抽象类,它允许使用接口名作为引用变量的类型。
通常的动态联编将生效。
引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口
11.构造器Constructor是否可被override?
可以。
12.是否可以继承String类?
String类是final类所以不可以继承。
13.题目如下:
父类:
publicclassFatherClass
{
publicFatherClass()
System.out.println("
FatherClassCreate"
}
子类:
publicclassChildClassextendsFatherClass
publicChildClass()
ChildClassCreate"
publicstaticvoidmain(String[]args)
FatherClassfc=newFatherClass();
ChildClasscc=newChildClass();
请问输出结果为:
FatherClassCreate+
FatherClassCreate
ChildClassCreate
14.publicclassOuterClass{
privatedoubled1=1.0;
//insertcodehere~~line3
从下列选项中选择两个正确的答案放在line3中(CE)
A.classInnerOne{
publicstaticdoublemethoda(){returnd1;
B.publicclassInnerOne{
staticdoublemethoda(){returnd1;
C.privateclassInnerOne{
doublemethoda(){returnd1;
D.staticclassInnerOne{
protecteddoublemethoda(){returnd1;
E.abstractclassInnerOne{
publicabstractdoublemethoda();
15.STRING与STRINGBUFFER的区别
STRING的长度是不可变的,一旦一个String对象被创建,包含在这个实例中的内容(“字符串”)不可以被更改,直至这个对象被销毁,因此,指向一个String对象的变量实质上是一个常量,String对象也被称为常量对象;
STRINGBUFFER的长度是可变的,可以通过StringBuffer的append()、insert()、reverse()、setCharAt()、setLength()等方法,可以对这个字符串中的内容修改。
如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
16.JAVA类实现序例化的方法是?
JAVA类要实现序列化,对应的类必须先实现Serializable和Externalizable这两种接口,然后就可以调用ObjectOutputStream的witeObject()方法来保存对象以及通过ObjeatInputStream的readObjeact()方法来读取保存的对象。
17.Collection框架中实现比较要实现什么接口?
要实现Comparable接口,并实现这个接口的唯一方法cpmparaTo(),接受一个Object对象,在这个方法中可以定义对象的排序规则。
18.介绍JAVA中的Collection框架结构,并画出来
<
>
Collection
Set
List
HashSet
Treeset
ArrayList
Vector
19.编程题:
列出某文件夹下的所有文件(文件夹从命令行输入)
解:
importjava.io.*;
publicclasslistFile
publicstaticvoidmain(String[]args)
Strings="
"
;
InputStreamReaderir=newInputStreamReader(System.in);
BufferedReaderin=newBufferedReader(ir);
try{
s=in.readLine();
Filef=newFile(s);
File[]files=f.listFiles();
for(inti=0;
i
if(files[i].isFile())
文件:
+files[i]);
else
目录:
in.close();
catch(IOExceptione)
e.printStackTrace();
20.编程题:
:
写一个满足Singleton模式的类出来
publicclassSingletonTest
{,
privatestaticSingletonTestsp;
privateSingletonTest(){}
publicstaticSingletonTestgetInstance()
if(sp==null)
{sp=newSingletonTest();
}
returnsp;
21.编程:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”
classinterceptString
StringinterceptStr;
intinterceptByte;
publicinterceptString(Stringstr,intbytes)
interceptStr=str;
interceptByte=bytes;
字符串为:
'
+interceptStr+"
字节数为:
+interceptByte);
publicvoidinterceptIt()
intinterceptCount;
interceptCount=(interceptStr.length()%interceptByte==0)?
(interceptStr.length()/interceptByte):
(interceptStr.length()/interceptByte+1);
截取后断数为:
+interceptCount);
for(inti=1;
i<
=interceptCount;
i++)
{if(i==interceptCount)
System.out.println(interceptStr.substring((i-1)*interceptByte,interceptStr.length()));
}else
System.out.println(interceptStr.substring((i-1)*interceptByte,(i*interceptByte)));
interceptStringss=newinterceptString(s,4);
ss.interceptIt();
}catch(IOExceptione)
{e.printStackTrace();
22.多线程有几种实现方法,都是什么?
同步有几种实现方法,都是什么?
多线程有三种实现方法,分别为:
①实现Runnable接口,覆盖Run()方法。
②继承Thread,覆盖Run()方法。
③继承TimerTask,覆盖Run()方法。
同步的实现是在方法前加synchronized,在调用wait()和notify()。
23.请说出你所知道的线程同步的方法
1.synchronized方法:
通过在方法声明中加入synchronized关键字来声明synchronized方法。
2.synchronized块:
通过synchronized关键字来声明synchronized块。
24.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不可以。
synchronized方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程才能获得该锁,重新进入可执行状态。
25.用JAVASOCKET编程,实现简单的Echo功能
如:
客户端从键盘输入hi(当用户输出exit退出程序),服务端响应为hi(服务器要求为多线程)
服务器程序:
import.*;
publicclassMyServerextendsThread{
privateSocketcq;
publicMyServer(Socketcq)
this.cq=cq;
publicvoidrun()
try
BufferedReaderin=newBufferedReader(newInputStreamReader(cq.getInputStream()));
PrintWriterout=newPrintWriter(cq.getOutputStream());
while(true)
Stringstr=in.readLine();
System.out.println(str);
out.println("
message:
"
+str);
out.flush();
if(str.equals("
exit"
))
break;
catch(IOExceptione)
System.out.println(e.message());
publicstaticvoidmain(String[]args)throwsIOException{
ServerSocketserver=newServerSocket(8009);
Sockets=server.accept();
newMyServer(s).start();
客户端程序:
publicclassMyClient{
publicstaticvoidmain(String[]args)throwsException
Socketserver=newSocket("
localhost"
8009);
BufferedReaderin=newBufferedReader(newInputStreamReader(server.getInputStream()));
PrintWriterout=newPrintWriter(server.getOutputStream());
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
Stringstr=br.readLine();
out.println(str);
)){
System.out.println(in.readLine());
server.close();
}