JBS
1.列舉出 10個(gè)JAVA語(yǔ)言的優(yōu)勢(shì)
a:免費(fèi),開(kāi)源,跨平臺(tái)(平臺(tái)獨(dú)立性),簡(jiǎn)單易用,功能完善,面向?qū)ο?,健壯性,多線程,結(jié)構(gòu)中立,企業(yè)應(yīng)用的成熟平臺(tái), 無(wú)線應(yīng)用
2.列舉出JAVA中10個(gè)面向?qū)ο缶幊痰男g(shù)語(yǔ)
a:包,類,接口,對(duì)象,屬性,方法,構(gòu)造器,繼承,封裝,多態(tài),抽象,范型
3.列舉出JAVA中6個(gè)比較常用的包
Java.lang;java.util;java.io;java.sql;java.awt;java.net;java.applet;javax.swing
4.JAVA中的標(biāo)識(shí)符有什么作用和特點(diǎn)
作用:標(biāo)識(shí)符用作給變量、類和方法命名
特點(diǎn):可以以字母、下劃線“_”和”$”符開(kāi)頭
首字符外,可以跟上字母、下劃線“_”和”$”符或數(shù)字
Java是大小寫敏感的,標(biāo)識(shí)符也不例外
5.JAVA中的關(guān)鍵字有什么特點(diǎn),列舉出至少20個(gè)關(guān)鍵字
Java中一些賦以特定的含義、并用做專門用途的單詞稱為關(guān)鍵字(keyword)
所有Java關(guān)鍵字都是小寫的,TURE、FALSE、NULL等都不是Java關(guān)鍵字 ;
goto和const 雖然從未被使用,但也作為Java關(guān)鍵字保留;
• 中一共有51個(gè)關(guān)鍵字Java
abstract assert boolean break byte continue
case catch char class const double
default do extends else final float
for goto long if implements import
native new null instanceof int interface
package private protected public return short
static strictfp super switch synchronized this
while void throw throws transient try
volatile
6.JAVA中數(shù)據(jù)類型如何分類?
可分為簡(jiǎn)單數(shù)據(jù)類型和引用數(shù)據(jù)類型:
簡(jiǎn)單數(shù)據(jù)類型:數(shù)值型(byte,short,int,long,float double),字符型(char),布爾型(boolean);
引用數(shù)據(jù)類型:類,接口,數(shù)組.
7.JAVA中運(yùn)算符的分類及舉例
• 分割符:,,;,[],()
• 算術(shù)運(yùn)算符: +,―,*,/,%,++,――
• 關(guān)系運(yùn)算符: >, <,>=, <=,==,!=
• 布爾邏輯運(yùn)算符: !,& , | , ^ , &&,||
• 位運(yùn)算符: &,|,^,~ , >>, < <,>>>
• 賦值運(yùn)算符: = 擴(kuò)展賦值運(yùn)算符:+=,―=,*=,/=
• 字符串連接運(yùn)算符: +
• 造型操作符:()
8.super,this關(guān)鍵字的作用及用法
• 在Java類中使用super來(lái)引用父類的成分
– 可用于訪問(wèn)父類中定義的屬性super
– 可用于調(diào)用父類中定義的成員方法super
– 可用于在子類構(gòu)造器中調(diào)用父類的構(gòu)造器super
– 的追溯不僅于直接父類super
• 中為解決變量的命名沖突和不確定性問(wèn)題,引入關(guān)鍵字“this”代表其所在方法的當(dāng)前對(duì)象。Java
– 構(gòu)造器中指該構(gòu)造器所創(chuàng)建的新對(duì)象
– 方法中指調(diào)用該方法的對(duì)象
• 關(guān)鍵字的用法this
– 在類本身的方法或構(gòu)造器中引用該類的實(shí)例變量和方法
– 將當(dāng)前對(duì)象作為參數(shù)傳遞給其它方法或構(gòu)造器
– 用來(lái)調(diào)用其他的重載的構(gòu)造器
9.什么是JAVA中的表達(dá)式?有什么作用?
• 表達(dá)式是運(yùn)算符和操作數(shù)的結(jié)合,它是任何一門編程語(yǔ)言的關(guān)鍵組成部分
• 表達(dá)式允許程序員進(jìn)行數(shù)學(xué)計(jì)算、值的比較、邏輯操作以及在Java中進(jìn)行對(duì)象的操作。
• 一些表達(dá)式的例子:
– X
– X+10
– Y=x+10
– Arr[10]
– student.geName()
10.做表列出JAVA中所有修飾符和他們的適用范圍(能不能修飾構(gòu)造器,屬性,自由塊等)
class 屬性 方法 構(gòu)建器 自由塊 內(nèi)部類
public Y Y Y Y Y
protected Y Y Y Y
(Default) Y Y Y Y Y Y
private Y Y Y Y
final Y Y Y Y
abstract Y Y Y
static Y Y Y
11.寫一個(gè)方法,用一個(gè)for循環(huán)打印九九乘法表
/**
*一個(gè)for循環(huán)打印九九乘法表
*/
publicvoid nineNineMultiTable()
{
for (int i = 1,j = 1; j <= 9; i++) {
System.out.print(i+"*"+j+"="+i*j+" ");
if(i==j)
{
i=0;
j++;
System.out.println();
}
}
}
12.給定一個(gè)java.util.Date對(duì)象,如何轉(zhuǎn)化為”2007-3-22 20:23:22”格式的字符串
/**
*將某個(gè)日期以固定格式轉(zhuǎn)化成字符串
*@paramdate
*@returnstr
*/
public String dateToStr(java.util.Date date)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);
return str;
}
13.寫一個(gè)方法,能夠判斷任意一個(gè)整數(shù)是否素?cái)?shù)
/**
*判斷任意一個(gè)整數(shù)是否素?cái)?shù)
*@paramn
*@returnboolean
*/
publicboolean isPrimes(int n)
{
for (int i = 2; i <= Math.sqrt(n); i++) {
if(n%i==0)
{
returnfalse;
}
}
returntrue;
}
14.寫一個(gè)方法,輸入任意一個(gè)整數(shù),返回它的階乘
/**
*獲得任意一個(gè)整數(shù)的階乘
*@paramn
*@returnn!
*/
publicint factorial(int n)
{
//遞歸
if(n==1)
{
return 1;
}
return n*factorial(n-1);
//非遞歸
// int multi = 1;
// for (int i = 2; i <= n; i++) {
// multi*=i;
// }
// return multi;
}
15.寫一個(gè)方法,用二分查找法判斷任意整數(shù)在任意整數(shù)數(shù)組里面是否存在,若存在就返回它在數(shù)組中的索引位置,不存在返回-1
/**
*二分查找特定整數(shù)在整型數(shù)組中的位置(遞歸)
*@paramdataset
*@paramdata
*@parambeginIndex
*@paramendIndex
*@returnindex
*/
publicint binarySearch(int[] dataset,int data,int beginIndex,int endIndex)
{
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex)return -1;
if(data <dataset[midIndex])
{
return binarySearch(dataset,data,beginIndex,midIndex-1);
}elseif(data>dataset[midIndex])
{
return binarySearch(dataset,data,midIndex+1,endIndex);
}else
{
return midIndex;
}
}
/**
*二分查找特定整數(shù)在整型數(shù)組中的位置(非遞歸)
*@paramdataset
*@paramdata
*@returnindex
*/
publicint binarySearch(int[] dataset ,int data)
{
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex)return -1;
while(beginIndex <= endIndex) {
midIndex = (beginIndex+endIndex)/2;
if(data <dataset[midIndex]) {
endIndex = midIndex-1;
} elseif(data>dataset[midIndex]) {
beginIndex = midIndex+1;
}else
{
return midIndex;
}
}
return -1;
}
16.做一個(gè)飼養(yǎng)員給動(dòng)物喂食物的例子體現(xiàn)JAVA中的面向?qū)ο笏枷?接口(抽象類)的用處
package com.softeem.demo;
/**
*@authorleno
*動(dòng)物的接口
*/
interface Animal
{
publicvoid eat(Food food);
}
/**
*@authorleno
*一種動(dòng)物類:貓
*/
class Cat implements Animal
{
publicvoid eat(Food food)
{
System.out.println("小貓吃"+food.getName());
}
}
/**
*@authorleno
*一種動(dòng)物類:狗
*/
class Dog implements Animal
{
publicvoid eat(Food food)
{
System.out.println("小狗啃"+food.getName());
}
}
/**
*@authorleno
*食物抽象類
*/
abstractclass Food
{
protected String name;
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
}
/**
*@authorleno
*一種食物類:魚
*/
class Fish extends Food
{
public Fish(String name) {
this.name = name;
}
}
/**
*@authorleno
*一種食物類:骨頭
*/
class Bone extends Food
{
public Bone(String name) {
this.name = name;
}
}
/**
*@authorleno
*飼養(yǎng)員類
*
*/
class Feeder
{
/**
*飼養(yǎng)員給某種動(dòng)物喂某種食物
*@paramanimal
*@paramfood
*/
publicvoid feed(Animal animal,Food food)
{
animal.eat(food);
}
}
/**
*@authorleno
*測(cè)試飼養(yǎng)員給動(dòng)物喂食物
*/
publicclass TestFeeder {
publicstaticvoid main(String[] args) {
Feeder feeder=new Feeder();
Animal animal=new Dog();
Food food=new Bone("肉骨頭");
feeder.feed(animal,food); //給狗喂肉骨頭
animal=new Cat();
food=new Fish("魚");
feeder.feed(animal,food); //給貓喂魚
}
}
17.描述JAVA中異常處理的機(jī)制
• 程序的執(zhí)行過(guò)程中如出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)異常類對(duì)象,該異常對(duì)象將被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過(guò)程稱為拋出(throw)異常。Java
• 當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)尋找能處理這一異常的代碼并把當(dāng)前異常對(duì)象交給其處理,這一過(guò)程稱為捕獲(catch)異常。
• 如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。
• 程序員通常只能處理違例(Exception),而對(duì)錯(cuò)誤(Error)無(wú)能為力。
18.做一個(gè)單子模式的類,只加載一次屬性文件
package com.softeem.demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
*@authorleno
*單子模式,保證在整個(gè)應(yīng)用期間只加載一次配置屬性文件
*/
publicclass Singleton {
privatestatic Singleton instance;
privatestaticfinal String CONFIG_FILE_PATH = "E:\\config.properties";
private Properties config;
private Singleton()
{
config = new Properties();
InputStream is;
try {
is = new FileInputStream(CONFIG_FILE_PATH);
config.load(is);
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
publicstatic Singleton getInstance()
{
if(instance==null)
{
instance = new Singleton();
}
returninstance;
}
public Properties getConfig() {
returnconfig;
}
publicvoid setConfig(Properties config) {
this.config = config;
}
}
l J2SE
19.拷貝一個(gè)目錄(文件)到指定路徑
/**
*拷貝一個(gè)目錄或者文件到指定路徑下
*@paramsource
*@paramtarget
*/
publicvoid copy(File source,File target)
{
File tarpath = new File(target,source.getName());
if(source.isDirectory())
{
tarpath.mkdir();
File[] dir = source.listFiles();
for (int i = 0; i < dir.length; i++) {
copy(dir[i],tarpath);
}
}else
{
try {
InputStream is = new FileInputStream(source);
OutputStream os = new FileOutputStream(tarpath);
byte[] buf = newbyte[1024];
int len = 0;
while((len = is.read(buf))!=-1)
{
os.write(buf,0,len);
}
is.close();
os.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
20.用JAVA中的多線程示例銀行取款問(wèn)題
packagecom.softeem.demo;
/**
*@authorleno
*賬戶類
*默認(rèn)有余額,可以取款
*/
class Account {
privatefloatbalance = 1000;
publicfloat getBalance() {
returnbalance;
}
publicvoid setBalance(float balance) {
this.balance = balance;
}
/**
*取款的方法需要同步
*@parammoney
*/
publicsynchronizedvoid withdrawals(float money)
{
if(balance>=money)
{
System.out.println("被取走"+money+"元!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
balance-=money;
}
else
{
System.out.println("對(duì)不起,余額不足!");
}
}
}
/**
*@authorleno
*銀行卡
*/
class TestAccount1 extends Thread {
private Account account;
public TestAccount1(Account account) {
this.account = account;
}
@Override
publicvoid run() {
account.withdrawals(800);
System.out.println("余額為:"+account.getBalance()+"元!");
}
}
/**
*@authorleno
*存折
*/
class TestAccount2 extends Thread {
private Account account;
public TestAccount2(Account account) {
this.account = account;
}
@Override
publicvoid run() {
account.withdrawals(700);
System.out.println("余額為:"+account.getBalance()+"元!");
}
}
publicclass Test
{
publicstaticvoid main(String[] args) {
Account account = new Account();
TestAccount1 testAccount1 = new TestAccount1(account);
testAccount1.start();
TestAccount2 testAccount2 = new TestAccount2(account);
testAccount2.start();
}
}
21.用JAVA中的多線程示例火車站售票問(wèn)題
package com.softeem.demo;
/**
*@authorleno
*售票類
*/
class SaleTicket implements Runnable {
inttickets = 100;
publicvoid run() {
while (tickets > 0) {
sale();
//或者下面這樣實(shí)現(xiàn)
// synchronized (this) {
// if (tickets > 0) {
// System.out.println(Thread.currentThread().getName() + "賣第"
// + (100 - tickets + 1) + "張票");
// tickets--;
// }
// }
}
}
publicsynchronizedvoid sale() {
if (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "賣第"
+ (100 - tickets + 1) + "張票");
tickets--;
}
}
}
publicclass TestSaleTicket {
publicstaticvoid main(String[] args) {
SaleTicket st = new SaleTicket();
new Thread(st, "一號(hào)窗口").start();
new Thread(st, "二號(hào)窗口").start();
new Thread(st, "三號(hào)窗口").start();
new Thread(st, "四號(hào)窗口").start();
}
}
22.用JAVA中的多線程示例生產(chǎn)者和消費(fèi)者問(wèn)題
package com.softeem.demo;
class Producer implements Runnable
{
private SyncStack stack;
public Producer(SyncStack stack) {
this.stack = stack;
}
publicvoid run() {
for (int i = 0; i < stack.getProducts().length; i++) {
String product = "產(chǎn)品"+i;
stack.push(product);
System.out.println("生產(chǎn)了: "+product);
try
{
Thread.sleep(200);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable
{
private SyncStack stack;
public Consumer(SyncStack stack) {
this.stack = stack;
}
publicvoid run() {
for(int i=0;i <stack.getProducts().length;i++)
{
String product =stack.pop();
System.out.println("消費(fèi)了: "+product);
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class SyncStack
{
private String[] products = new String[10];
privateintindex;
publicsynchronizedvoid push(String product)
{
if(index==product.length())
{
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
notify();
products[index]=product;
index++;
}
publicsynchronized String pop()
{
if(index==0)
{
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
notify();
index--;
String product = products[index];
return product;
}
public String[] getProducts() {
returnproducts;
}
}
publicclass TestProducerConsumer {
publicstaticvoid main(String[] args) {
SyncStack stack=new SyncStack();
Producer p=new Producer(stack);
Consumer c=new Consumer(stack);
new Thread(p).start();
new Thread(c).start();
}
}
23.編程實(shí)現(xiàn)序列化的Student(sno,sname)對(duì)象在網(wǎng)絡(luò)上的傳輸
package com.softeem.demo;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
class Student implements Serializable {
private int sno;
private String sname;
public Student(int sno, String sname) {
this.sno = sno;
this.sname = sname;
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Override
public String toString() {
return "學(xué)號(hào):" + sno + ";姓名:" + sname;
}
}
class MyClient extends Thread {
@Override
public void run() {
try {
Socket s = new Socket("localhost", 9999);
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
Student stu = (Student) ois.readObject();
System.out.println("客戶端程序收到服務(wù)器端程序傳輸過(guò)來(lái)的學(xué)生對(duì)象>> " + stu);
ois.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class MyServer extends Thread {
@Override
public void run() {
try {
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept();
ObjectOutputStream ops = new ObjectOutputStream(s.getOutputStream());
Student stu = new Student(1, "趙本山");
ops.writeObject(stu);
ops.close();
s.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class TestTransfer {
public static void main(String[] args) {
new MyServer().start();
new MyClient().start();
}
}
l JDBC
24.用dom4j組件解析如下XML格式的文件:
<?xml version="1.0" encoding="UTF-8"?>
<generator>
<table name="login" operation="1">
<column name="username" handle="0">aaa </column>
<column name="password" handle="0">123 </column>
</table>
<table name="login" operation="2">
<column name="id" handle="1">1 </column>
<column name="username" handle="0">bbb </column>
<column name="password" handle="0">444 </column>
</table>
<table name="login" operation="3">
<column name="id" handle="1">4 </column>
</table>
</generator>
規(guī)則: <table>operation 1表insert,2表update,3表delete.
<column>handle 1表作為where條件,0表作為操作字段。
要求:按照規(guī)則生成三條SQL語(yǔ)句!(即做一個(gè)方法解析xml文件生成一個(gè)含有三條SQL語(yǔ)句的字符串)
/**
*解析XML文件生成一個(gè)含有可執(zhí)行SQL語(yǔ)句的字符串
*@paramxmlFileName
*@returnSQL
*/
public String parseXmltoSQL(String xmlFileName) {
StringBuffer sbsql = new StringBuffer();
SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File(xmlFileName));
Element element = document.getRootElement();
Iterator it = element.elementIterator("table");
while (it.hasNext()) {
element = (Element) it.next();
//獲得對(duì)表的操作
String oper = element.attributeValue("operation");
//獲得表名
String tableName = element.attributeValue("name");
if ("1".equals(oper)) {
sbsql.append("insert into ").append(tableName);
Iterator it2 = element.elementIterator("column");
String columnName1 = null;
String columnValue1 = null;
String columnName2 = null;
String columnValue2 = null;
if (it2.hasNext()) {
element = (Element) it2.next();
columnName1 = element.attributeValue("name");
columnValue1 = element.getText();
}
if (it2.hasNext()) {
element = (Element) it2.next();
columnName2 = element.attributeValue("name");
columnValue2 = element.getText();
}
sbsql.append("("+columnName1+","+columnName2+")"+" values('"+columnValue1+"','"+columnValue2+"')\n");
} elseif ("2".equals(oper)) {
sbsql.append("update ").append(tableName);
Iterator it2 = element.elementIterator("column");
String columnName1 = null;
String columnValue1 = null;
String columnName2 = null;
String columnValue2 = null;
String columnName3 = null;
String columnValue3 = null;
if (it2.hasNext()) {
element = (Element) it2.next();
columnName1 = element.attributeValue("name");
columnValue1 = element.getText();
}
if (it2.hasNext()) {
element = (Element) it2.next();
columnName2 = element.attributeValue("name");
columnValue2 = element.getText();
}
if (it2.hasNext()) {
element = (Element) it2.next();
columnName3 = element.attributeValue("name");
columnValue3 = element.getText();
}
sbsql.append(" set "+columnName2+"='"+columnValue2+"',"+columnName3+"='"+columnValue3+"' where "+columnName1+"="+columnValue1+"\n");
}elseif ("3".equals(oper)) {
sbsql.append("delete from ").append(tableName);
Iterator it2 = element.elementIterator("column");
String columnName1 = null;
String columnValue1 = null;
if (it2.hasNext()) {
element = (Element) it2.next();
columnName1 = element.attributeValue("name");
columnValue1 = element.getText();
}
sbsql.append(" where "+columnName1+"="+columnValue1);
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sbsql.toString();
}
l JSP/SERVLET
25.寫出JSP的內(nèi)置對(duì)象并說(shuō)明他們的作用
request:request表示HttpServletRequest對(duì)象。它包含了有關(guān)瀏覽器請(qǐng)求的信息,并且提供了幾個(gè)用于獲取cookie, header數(shù)據(jù)的有用的方法。 response:response表示HttpServletResponse對(duì)象,并提供了幾個(gè)用于設(shè)置送回 瀏覽器的響應(yīng)的方法(如cookies,頭信息等) out:out對(duì)象是javax.jsp.JspWriter的一個(gè)實(shí)例,并提供了幾個(gè)方法使你能用于向?yàn)g覽器回送輸出結(jié)果。 pageContext:pageContext表示一個(gè)javax.servlet.jsp.PageContext對(duì)象。它是用于方便存取各種范圍的名字空間、servlet相關(guān)的對(duì)象的API,并且包裝了通用的servlet相關(guān)功能的方法。 session:session表示一個(gè)請(qǐng)求的javax.servlet.http.HttpSession對(duì)象。Session可以存貯用戶的狀態(tài)信息 application:applicaton 表示一個(gè)javax.servle.ServletContext對(duì)象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息 config:config表示一個(gè)javax.servlet.ServletConfig對(duì)象。該對(duì)象用于存取servlet實(shí)例的初始化參數(shù)。 page:page表示從該頁(yè)面產(chǎn)生的一個(gè)servlet實(shí)例。
exception: exception對(duì)象是一個(gè)例外對(duì)象,當(dāng)一個(gè)頁(yè)面在運(yùn)行過(guò)程中發(fā)生了例外,就產(chǎn)生這個(gè)對(duì)象。如果一個(gè)JSP頁(yè)面要應(yīng)用此對(duì)象,就必須把isErrorPage設(shè)為true,否則無(wú)法編譯。他實(shí)際上是java.lang.Throwable的對(duì)象