Java经典题.docx
《Java经典题.docx》由会员分享,可在线阅读,更多相关《Java经典题.docx(23页珍藏版)》请在冰豆网上搜索。
Java经典题
Java经典题
1.列举出10个JAVA语言的优势
a:
免费,开源,跨平台(平台独立性),简单易用,功能完善,面向对象,健壮性,多线程,结构中立,企业应用的成熟平台,无线应用
2.列举出JAVA中10个面向对象编程的术语
a:
包,类,接口,对象,属性,方法,构造器,继承,封装,多态,抽象,范型
3.列举出JAVA中6个比较常用的包
Java.lang;java.util;java.io;java.sql;java.awt;;java.applet;javax.swing
4.JAVA中的标识符有什么作用和特点
作用:
标识符用作给变量、类和方法命名
特点:
可以以字母、下划线“_”和”$”符开头
首字符外,可以跟上字母、下划线“_”和”$”符或数字
Java是大小写敏感的,标识符也不例外
5.JAVA中的关键字有什么特点,列举出至少20个关键字
Java中一些赋以特定的含义、并用做专门用途的单词称为关键字(keyword)
所有Java关键字都是小写的,TURE、FALSE、NULL等都不是Java关键字;
goto和const虽然从未被使用,但也作为Java关键字保留;
•中一共有51个关键字Java
abstractassertbooleanbreakbytecontinue
casecatchcharclassconstdouble
defaultdoextendselsefinalfloat
forgotolongifimplementsimport
nativenewnullinstanceofintinterface
packageprivateprotectedpublicreturnshort
staticstrictfpsuperswitchsynchronizedthis
whilevoidthrowthrowstransienttry
volatile
6.JAVA中数据类型如何分类?
可分为简单数据类型和引用数据类型:
简单数据类型:
数值型(byte,short,int,long,floatdouble),字符型(char),布尔型(boolean);
引用数据类型:
类,接口,数组.
7.JAVA中运算符的分类及举例
•分割符:
,;,[],()
•算术运算符:
+,―,*,/,%,++,――
•关系运算符:
>,<,>=,<=,==,!
=
•布尔逻辑运算符:
!
,&,|,^,&&,||
•位运算符:
&,|,^,~,>>,<<,>>>
•赋值运算符:
=扩展赋值运算符:
+=,―=,*=,/=
•字符串连接运算符:
+
•造型操作符:
()
8.super,this关键字的作用及用法
•在Java类中使用super来引用父类的成分
–可用于访问父类中定义的属性super
–可用于调用父类中定义的成员方法super
–可用于在子类构造器中调用父类的构造器super
–的追溯不仅于直接父类super
•中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。
Java
–构造器中指该构造器所创建的新对象
–方法中指调用该方法的对象
•关键字的用法this
–在类本身的方法或构造器中引用该类的实例变量和方法
–将当前对象作为参数传递给其它方法或构造器
–用来调用其他的重载的构造器
9.什么是JAVA中的表达式?
有什么作用?
•表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分
•表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作。
•一些表达式的例子:
–X
–X+10
–Y=x+10
–Arr[10]
–student.geName()
10.做表列出JAVA中所有修饰符和他们的适用范围(能不能修饰构造器,属性,自由块等)
class属性方法构建器自由块内部类
publicYYYYY
protectedYYYY
(Default)YYYYYY
privateYYYY
finalYYYY
abstractYYY
staticYYY
11.写一个方法,用一个for循环打印九九乘法表
/**
*一个for循环打印九九乘法表
*/
publicvoidnineNineMultiTable()
{
for(inti=1,j=1;j<=9;i++){
System.out.print(i+"*"+j+"="+i*j+"");
if(i==j)
{
i=0;
j++;
System.out.println();
}
}
}
12.给定一个java.util.Date对象,如何转化为”2007-3-2220:
23:
22”格式的字符串
/**
*将某个日期以固定格式转化成字符串
*@paramdate
*@returnstr
*/
publicStringdateToStr(java.util.Datedate)
{
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
Stringstr=sdf.format(date);
returnstr;
}
13.写一个方法,能够判断任意一个整数是否素数
/**
*判断任意一个整数是否素数
*@paramn
*@returnboolean
*/
publicbooleanisPrimes(intn)
{
for(inti=2;i<=Math.sqrt(n);i++){
if(n%i==0)
{
returnfalse;
}
}
returntrue;
}
14.写一个方法,输入任意一个整数,返回它的阶乘
/**
*获得任意一个整数的阶乘
*@paramn
*@returnn!
*/
publicintfactorial(intn)
{
//递归
if(n==1)
{
return1;
}
returnn*factorial(n-1);
//非递归
//intmulti=1;
//for(inti=2;i<=n;i++){
//multi*=i;
//}
//returnmulti;
}
15.写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
/**
*二分查找特定整数在整型数组中的位置(递归)
*@paramdataset
*@paramdata
*@parambeginIndex
*@paramendIndex
*@returnindex
*/
publicintbinarySearch(int[]dataset,intdata,intbeginIndex,intendIndex)
{
intmidIndex=(beginIndex+endIndex)/2;
if(datadataset[endIndex]||beginIndex>endIndex)return-1;
if(data{
returnbinarySearch(dataset,data,beginIndex,midIndex-1);
}elseif(data>dataset[midIndex])
{
returnbinarySearch(dataset,data,midIndex+1,endIndex);
}else
{
returnmidIndex;
}
}
/**
*二分查找特定整数在整型数组中的位置(非递归)
*@paramdataset
*@paramdata
*@returnindex
*/
publicintbinarySearch(int[]dataset,intdata)
{
intbeginIndex=0;
intendIndex=dataset.length-1;
intmidIndex=-1;
if(datadataset[endIndex]||beginIndex>endIndex)return-1;
while(beginIndex<=endIndex){
midIndex=(beginIndex+endIndex)/2;
if(dataendIndex=midIndex-1;
}elseif(data>dataset[midIndex]){
beginIndex=midIndex+1;
}else
{
returnmidIndex;
}
}
return-1;
}
16.做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
packagecom.softeem.demo;
/**
*@authorleno
*动物的接口
*/
interfaceAnimal
{
publicvoideat(Foodfood);
}
/**
*@authorleno
*一种动物类:
猫
*/
classCatimplementsAnimal
{
publicvoideat(Foodfood)
{
System.out.println("小猫吃"+food.getName());
}
}
/**
*@authorleno
*一种动物类:
狗
*/
classDogimplementsAnimal
{
publicvoideat(Foodfood)
{
System.out.println("小狗啃"+food.getName());
}
}
/**
*@authorleno
*食物抽象类
*/
abstractclassFood
{
protectedStringname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
}
/**
*@authorleno
*一种食物类:
鱼
*/
classFishextendsFood
{
publicFish(Stringname){
this.name=name;
}
}
/**
*@authorleno
*一种食物类:
骨头
*/
classBoneextendsFood
{
publicBone(Stringname){
this.name=name;
}
}
/**
*@authorleno
*饲养员类
*
*/
classFeeder
{
/**
*饲养员给某种动物喂某种食物
*@paramanimal
*@paramfood
*/
publicvoidfeed(Animalanimal,Foodfood)
{
animal.eat(food);
}
}
/**
*@authorleno
*测试饲养员给动物喂食物
*/
publicclassTestFeeder{
publicstaticvoidmain(String[]args){
Feederfeeder=newFeeder();
Animalanimal=newDog();
Foodfood=newBone("肉骨头");
feeder.feed(animal,food);//给狗喂肉骨头
animal=newCat();
food=newFish("鱼");
feeder.feed(animal,food);//给猫喂鱼
}
}
17.描述JAVA中异常处理的机制
•程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
Java
•当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
•如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
•程序员通常只能处理违例(Exception),而对错误(Error)无能为力。
2.18.做一个单子模式的类,只加载一次属性文件
packagecom.softeem.demo;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Properties;
/**
*@authorleno
*单子模式,保证在整个应用期间只加载一次配置属性文件
*/
publicclassSingleton{
privatestaticSingletoninstance;
privatestaticfinalStringCONFIG_FILE_PATH="E:
\\config.properties";
privatePropertiesconfig;
privateSingleton()
{
config=newProperties();
InputStreamis;
try{
is=newFileInputStream(CONFIG_FILE_PATH);
config.load(is);
is.close();
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
publicstaticSingletongetInstance()
{
if(instance==null)
{
instance=newSingleton();
}
returninstance;
}
publicPropertiesgetConfig(){
returnconfig;
}
publicvoidsetConfig(Propertiesconfig){
this.config=config;
}
}
lJ2SE
19.拷贝一个目录(文件)到指定路径
/**
*拷贝一个目录或者文件到指定路径下
*@paramsource
*@paramtarget
*/
publicvoidcopy(Filesource,Filetarget)
{
Filetarpath=newFile(target,source.getName());
if(source.isDirectory())
{
tarpath.mkdir();
File[]dir=source.listFiles();
for(inti=0;i
copy(dir[i],tarpath);
}
}else
{
try{
InputStreamis=newFileInputStream(source);
OutputStreamos=newFileOutputStream(tarpath);
byte[]buf=newbyte[1024];
intlen=0;
while((len=is.read(buf))!
=-1)
{
os.write(buf,0,len);
}
is.close();
os.close();
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
20.用JAVA中的多线程示例银行取款问题
packagecom.softeem.demo;
/**
*@authorleno
*账户类
*默认有余额,可以取款
*/
classAccount{
privatefloatbalance=1000;
publicfloatgetBalance(){
returnbalance;
}
publicvoidsetBalance(floatbalance){
this.balance=balance;
}
/**
*取款的方法需要同步
*@parammoney
*/
publicsynchronizedvoidwithdrawals(floatmoney)
{
if(balance>=money)
{
System.out.println("被取走"+money+"元!
");
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
balance-=money;
}
else
{
System.out.println("对不起,余额不足!
");
}
}
}
/**
*@authorleno
*银行卡
*/
classTestAccount1extendsThread{
privateAccountaccount;
publicTestAccount1(Accountaccount){
this.account=account;
}
@Override
publicvoidrun(){
account.withdrawals(800);
System.out.println("余额为:
"+account.getBalance()+"元!
");
}
}
/**
*@authorleno
*存折
*/
classTestAccount2extendsThread{
privateAccountaccount;
publicTestAccount2(Accountaccount){
this.account=account;
}
@Override
publicvoidrun(){
account.withdrawals(700);
System.out.println("余额为:
"+account.getBalance()+"元!
");
}
}
publicclassTest
{
publicstaticvoidmain(String[]args){
Accountaccount=newAccount();
TestAccount1testAccount1=newTestAccount1(account);
testAccount1.start();
TestAccount2testAccount2=newTestAccount2(account);
testAccount2.start();
}
}
21.用JAVA中的多线程示例火车站售票问题
packagecom.softeem.demo;
/**
*@authorleno
*售票类
*/
classSaleTicketimplementsRunnable{
inttickets=100;
publicvoidrun(){
while(tickets>0){
sale();
//或者下面这样实现
//synchronized(this){
//if(tickets>0){
//System.out.println(Thread.currentThread().getName()+"卖第"
//+(100-tickets+1)+"张票");
//tickets--;
//}
//}
}
}
publicsynchronizedvoidsale(){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+"卖第"
+(100-tickets+1)+"张票");
tickets--;
}
}
}
publicclassTestSaleTicket{
publicstaticvoidmain(String[]args){
SaleTicketst=newSaleTicket();
newThread(st,"一号窗口").start();
newThread(st,"二号窗口").start();
newThread(st,"三号窗口").start();
newThread(st,"四号窗口").start();
}
}
22.用JAVA中的多线程示例生产者和消费者问题
packagecom.softeem.demo;
classProducerimplementsRunnable
{
privateSyncStackstack;
publicProducer(SyncStackstack){
this.stack=stack;
}
publicvoidrun(){
for(inti=0;iStringproduct="产品"+i;
stack.push(product);
System.out.println("生产了:
"+product);
t