1.
列举出 10
个JAVA
语言的优势
a:免费,开源,跨平台(平台独立性),简单易用,功能完善,面向对象,健壮性,多线程,结构中立,企业应用的成熟平台, 无线应用
2.
列举出JAVA
中10
个面向对象编程的术语
a:包,类,接口,对象,属性,方法,构造器,继承,封装,多态,抽象,范型
3.
列举出JAVA
中6
个比较常用的包
Java.lang;java.util;java.io;java.sql;java.awt;java.net;java.applet;javax.swing
4.JAVA
中的标识符有什么作用和特点
作用:标识符用作给变量、类和方法命名
特点:可以以
字母、
下划线
“
_”和
”
$”符开头
首字符外,可以跟上
字母、
下划线
“
_”和
”
$”符或
数字
Java是大小写敏感的,标识符也不例外
5.JAVA
中的关键字有什么特点,
列举出至少20
个关键字
- Java中一些赋以特定的含义、并用做专门用途的单词称为关键字(keyword)
- 所有Java关键字都是小写的,TURE、FALSE、NULL等都不是Java关键字 ;
- goto和const 虽然从未被使用,但也作为Java关键字保留;
• 中一共有51个关键字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中数据类型如何分类?
可分为简单数据类型和引用数据类型:
简单数据类型:数值型(byte,short,int,long,float double),字符型(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
|
属性
|
方法
|
构建器
|
自由块
|
内部类
|
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.
写一个方法,用一个for
循环打印九九乘法表
/**
*
一个
for
循环打印九九乘法表
*/
public
void
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.
给定一个
java.util.Date
对象,如何转化为
”2007-3-22 20:23:22”
格式的字符串
/**
*
将某个日期以固定格式转化成字符串
*
@param
date
*
@return
str
*/
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.
写一个方法,能够判断任意一个整数是否素数
/**
*
判断任意一个整数是否素数
*
@param
n
*
@return
boolean
*/
public
boolean
isPrimes(
int
n)
{
for
(
int
i = 2; i <= Math.sqrt(n); i++) {
if
(n%i==0)
{
return
false
;
}
}
return
true
;
}
14.
写一个方法,输入任意一个整数,返回它的阶乘
/**
*
获得任意一个整数的阶乘
*
@param
n
*
@return
n!
*/
public
int
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.
写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
/**
*
二分查找特定整数在整型数组中的位置
(
递归
)
*
@param
dataset
*
@param
data
*
@param
beginIndex
*
@param
endIndex
*
@return
index
*/
public
int
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);
}
else
if
(data>dataset[midIndex])
{
return
binarySearch(dataset,data,midIndex+1,endIndex);
}
else
{
return
midIndex;
}
}
/**
*
二分查找特定整数在整型数组中的位置
(
非递归
)
*
@param
dataset
*
@param
data
*
@return
index
*/
public
int
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;
}
else
if
(data>dataset[midIndex]) {
beginIndex = midIndex+1;
}
else
{
return
midIndex;
}
}
return
-1;
}
16.
做一个饲养员给动物喂食物的例子体现JAVA
中的面向对象思想,
接口(抽象类)的用处
package
com.softeem.demo;
/**
*
@author
leno
*
动物的接口
*/
interface
Animal
{
public
void
eat(Food food);
}
/**
*
@author
leno
*
一种动物类
:
猫
*/
class
Cat
implements
Animal
{
public
void
eat(Food food)
{
System.out
.println(
"
小猫吃
"
+food.getName());
}
}
/**
*
@author
leno
*
一种动物类
:
狗
*/
class
Dog
implements
Animal
{
public
void
eat(Food food)
{
System.out
.println(
"
小狗啃
"
+food.getName());
}
}
/**
*
@author
leno
*
食物抽象类
*/
abstract
class
Food
{
protected
String
name
;
public
String getName() {
return
name
;
}
public
void
setName(String name) {
this
.
name
= name;
}
}
/**
*
@author
leno
*
一种食物类
:
鱼
*/
class
Fish
extends
Food
{
public
Fish(String name) {
this
.
name
= name;
}
}
/**
*
@author
leno
*
一种食物类
:
骨头
*/
class
Bone
extends
Food
{
public
Bone(String name) {
this
.
name
= name;
}
}
/**
*
@author
leno
*
饲养员类
*
*/
class
Feeder
{
/**
*
饲养员给某种动物喂某种食物
*
@param
animal
*
@param
food
*/
public
void
feed(Animal animal,Food food)
{
animal.eat(food);
}
}
/**
*
@author
leno
*
测试饲养员给动物喂食物
*/
public
class
TestFeeder {
public
static
void
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
中异常处理的机制
• 程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。Java
• 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
• 如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
• 程序员通常只能处理违例(Exception),而对错误(Error)无能为力。
18.
做一个单子模式的类,只加载一次属性文件
package
com.softeem.demo;
import
java.io.FileInputStream;
import
java.io.FileNotFoundException;
import
java.io.IOException;
import
java.io.InputStream;
import
java.util.Properties;
/**
*
@author
leno
*
单子模式,保证在整个应用期间只加载一次配置属性文件
*/
public
class
Singleton {
private
static Singleton instance
;
private
static
final 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();
}
}
public
static
Singleton getInstance()
{
if(instance
==
null
)
{
instance
=
new
Singleton();
}
returninstance;
}
public
Properties getConfig() {
return
config
;
}
public
void
setConfig(Properties config) {
this
.
config
= config;
}
}
l J2SE
19.
拷贝一个目录(
文件)
到指定路径
/**
*
拷贝一个目录或者文件到指定路径下
*
@param
source
*
@param
target
*/
public
void
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 =
new
byte
[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
中的多线程示例银行取款问题
package
com
.softeem.demo;
/**
*
@author
leno
*
账户类
*
默认有余额,可以取款
*/
class
Account {
private
float
balance
= 1000;
public
float
getBalance() {
return
balance
;
}
public
void
setBalance(
float
balance) {
this
.
balance
= balance;
}
/**
*
取款的方法需要同步
*
@param
money
*/
public
synchronized
void
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(
"
对不起
,
余额不足
!"
);
}
}
}
/**
*
@author
leno
*
银行卡
*/
class
TestAccount1
extends
Thread {
private
Account
account
;
public
TestAccount1(Account account) {
this
.
account
= account;
}
@Override
public
void
run() {
account
.withdrawals(800);
System.out
.println(
"
余额为
:"
+
account
.getBalance()+
"
元
!"
);
}
}
/**
*
@author
leno
*
存折
*/
class
TestAccount2
extends
Thread {
private
Account
account
;
public
TestAccount2(Account account) {
this
.
account
= account;
}
@Override
public
void
run() {
account
.withdrawals(700);
System.out
.println(
"
余额为
:"
+
account
.getBalance()+
"
元
!"
);
}
}
public
class
Test
{
public
static
void
main(String[] args) {
Account account =
new
Account();
TestAccount1 testAccount1 =
new
TestAccount1(account);
testAccount1.start();
TestAccount2 testAccount2 =
new
TestAccount2(account);
testAccount2.start();
}
}
21.
用JAVA
中的多线程示例火车站售票问题
package
com.softeem.demo;
/**
*
@author
leno
*
售票类
*/
class
SaleTicket
implements
Runnable {
int
tickets
= 100;
public
void
run() {
while
(
tickets
> 0) {
sale();
//
或者下面这样实现
// synchronized (this) {
// if (tickets > 0) {
// System.out.println(Thread.currentThread().getName() + "
卖第
"
// + (100 - tickets + 1) + "
张票
");
// tickets--;
// }
// }
}
}
public
synchronized
void
sale() {
if
(
tickets
> 0) {
System.out
.println(Thread.currentThread().getName() +
"
卖第
"
+ (100 -
tickets
+ 1) +
"
张票
"
);
tickets
--;
}
}
}
public
class
TestSaleTicket {
public
static
void
main(String[] args) {
SaleTicket st =
new
SaleTicket();
new
Thread(st,
"
一号窗口
"
).start();
new
Thread(st,
"
二号窗口
"
).start();
new
Thread(st,
"
三号窗口
"
).start();
new
Thread(st,
"
四号窗口
"
).start();
}
}
22.
用JAVA
中的多线程示例生产者和消费者问题
package
com.softeem.demo;
class
Producer
implements
Runnable
{
private
SyncStack
stack
;
public
Producer(SyncStack stack) {
this
.
stack
= stack;
}
public
void
run() {
for
(
int
i = 0; i <
stack
.getProducts().
length
; i++) {
String product =
"
产品
"
+i;
stack
.push(product);
System.out
.println(
"
生产了
: "
+product);
try
{
Thread.sleep(200);
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class
Consumer
implements
Runnable
{
private
SyncStack
stack
;
public
Consumer(SyncStack stack) {
this
.
stack
= stack;
}
public
void
run() {
for
(
int
i=0;i<
stack
.getProducts().
length
;i++)
{
String product =
stack
.pop();
System.out
.println(
"
消费了
: "
+product);
try
{
Thread.sleep(1000);
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class
SyncStack
{
private
String[]
products
=
new
String[10];
private
int
index
;
public
synchronized
void
push(String product)
{
if
(
index
==product.length())
{
try
{
wait();
}
catch
(InterruptedException e) {
//
TODO
Auto-generated catch block
e.printStackTrace();
}
}
notify();
products
[
index
]=product;
index
++;
}
public
synchronized
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() {
return
products
;
}
}
public
class
TestProducerConsumer {
public
static
void
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.
编程实现序列化的Student
(sno,sname
)对象在网络上的传输
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 "学号:" + 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("客户端程序收到服务器端程序传输过来的学生对象>> " + 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>
规则:<table>operation 1表insert,2表update,3表delete.
<column>handle 1表作为where条件,0表作为操作字段。
要求:按照规则生成三条SQL语句!(即做一个方法解析xml文件生成一个含有三条SQL语句的字符串)
/**
*
解析
XML
文件生成一个含有可执行
SQL
语句的字符串
*
@param
xmlFileName
*
@return
SQL
*/
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();
//
获得对表的操作
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"
);
}
else
if
(
"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"
);
}
else
if
(
"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
的内置对象并说明他们的作用
request:request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header数据的有用的方法。 response:response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) out:out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 pageContext:pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 session:session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 application:applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 config:config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 page:page表示从该页面产生的一个servlet实例。
exception: exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象