java基础知识回顾1
2014-02-10 14:51
507 查看
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关键字保留;
java关键字
6.JAVA中数据类型如何分类?
可分为简单数据类型和引用数据类型:
简单数据类型:数值型(byte,short,int,long,float double),字符型(char),布尔型(boolean);
引用数据类型:类,接口,数组.
7.JAVA中运算符的分类及举例
<1> 分割符:,,;,[],()
<2> 算术运算符: +,―,*,/,%,++,――
<3>
关系运算符: >,<,>=,<=,==,!=
<4>
布尔逻辑运算符: !,& , | , ^ , &&,||
<5>
位运算符: &,|,^,~ , >>,<<,>>>
<6>
赋值运算符: = 扩展赋值运算符:+=,―=,*=,/=
<7>
字符串连接运算符: +
<8>
造型操作符:()
8.super,this关键字的作用及用法
<1>
在Java类中使用super来引用父类的成分
- 可用于访问父类定义的属性
- 可用于调用父类中定义的成员方法
- 可用于调用在类的构造器中调用父类的构造器
<2>
中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。
–
Java构造器中指该构造器所创建的新对象
–
方法中指调用该方法的对象
<3>
关键字的用法this
–
在类本身的方法或构造器中引用该类的实例变量和方法
–
将当前对象作为参数传递给其它方法或构造器
–
用来调用其他的重载的构造器
9.什么是JAVA中的表达式?有什么作用?
• 表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分
• 表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作。
•
一些表达式的例子:
–
X
–
X+10
–
Y=x+10
–
Arr[10]
–
student.geName()
10.做表列出JAVA中所有修饰符和他们的适用范围(能不能修饰构造器,属性,自由块等)
11.写一个方法,用一个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”格式的字符串
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.写一个方法,能够判断任意一个整数是否素数
public
boolean isPrimes(int
n) {
for (int i = 2; i <= Math.sqrt(n);
i++) {
if(n%i==0){
return
false;
}
}
return
true;
}
14.写一个方法,输入任意一个整数,返回它的阶乘
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
//二分查找特定整数在整型数组中的位置(递归)
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;
}
}
// 二分查找特定整数在整型数组中的位置(非递归)
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.做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
package com.wepull.demo;
//动物的接口
interface Animal{
publicvoid eat(Food food);
}
//一种动物类:猫
class Cat
implements Animal{
public
void eat(Food food){
System.out.println("小猫吃"+food.getName());
}
}
//一种动物类:狗
class Dog
implements Animal{
public void eat(Food food){
System.out.println("小狗啃"+food.getName());
}
}
//食物抽象类
abstract
class Food{
protected String
name;
public String getName() {
returnname;
}
public void setName(String name) {
this.name = name;
}
}
//一种食物类:鱼
class Fish
extends Food{
public Fish(String name) {
this.name = name;
}
}
//一种食物类:骨头
class Bone
extends Food{
public Bone(String name) {
this.name = name;
}
}
//饲养员类
[b]class Feeder[/b]{
//饲养员给某种动物喂某种食物
public void feed(Animal animal,Food food){
animal.eat(food);
}
}
/**
*@authorleno
*测试饲养员给动物喂食物
*/
public
class 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中异常处理的机制
1、程序的执行过程中如果出现异常会自动生成一个异常类对象,该对象将被提交给java运行时系统,该过程被称为抛出异常
2、当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
3、如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
4、程序员通常只能处理违例(Exception),而对错误(Error)无能为力。
18.做一个单子模式的类,只加载一次属性文件
package com.wepull.demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import
java.util.Properties;
//单子模式,保证在整个应用期间只加载一次配置属性文件
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() {
returnconfig;
}
publicvoid setConfig(Properties config) {
this.config = config;
}
}
1、J2SE
19.拷贝一个目录(文件)到指定路径
//拷贝一个目录或者文件到指定路径下
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 =
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中的多线程示例银行取款问题
package
com.wepull.demo;
/**
*账户类
*默认有余额,可以取款
*/
class
Account {
private float
balance = 1000;
public float getBalance() {
return balance;
}
public void
setBalance(float balance) {
this.balance
= balance;
}
/**取款的方法需要同步*/
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("对不起,余额不足!");
}
}
}
/*银行卡*/
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()+"元!");
}
}
// 存折
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.wepull.demo;
// 售票类
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.wepull.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 {
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.编程实现序列化的Student(sno,sname)对象在网络上的传输
package
com.wepull.demo;
[b]import
[/b]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) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
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();
}
}
2、
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语句的字符串
[b]public
[/b]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("insert
into").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){
e.printStackTrace();
}
return
sbsql.toString();
}
2、
Jsp/Servlet
25.写出JSP的内置对象并说明他们的作用
request:它表示HttpServletRequest对象,包含了有关浏览器的请求信息,且提供了几个用于获取cookie, header数据的方法。
response:它表示HttpServletResponse对象,并提供了几个用于响应浏览器的方法(如cookies,头信息等)
out:out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext:它表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、
servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session:它表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
application:它表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config:它表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page:page表示从该页面产生的一个servlet实例。
exception: 它是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
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关键字保留;
java关键字
6.JAVA中数据类型如何分类?
可分为简单数据类型和引用数据类型:
简单数据类型:数值型(byte,short,int,long,float double),字符型(char),布尔型(boolean);
引用数据类型:类,接口,数组.
7.JAVA中运算符的分类及举例
<1> 分割符:,,;,[],()
<2> 算术运算符: +,―,*,/,%,++,――
<3>
关系运算符: >,<,>=,<=,==,!=
<4>
布尔逻辑运算符: !,& , | , ^ , &&,||
<5>
位运算符: &,|,^,~ , >>,<<,>>>
<6>
赋值运算符: = 扩展赋值运算符:+=,―=,*=,/=
<7>
字符串连接运算符: +
<8>
造型操作符:()
8.super,this关键字的作用及用法
<1>
在Java类中使用super来引用父类的成分
- 可用于访问父类定义的属性
- 可用于调用父类中定义的成员方法
- 可用于调用在类的构造器中调用父类的构造器
<2>
中为解决变量的命名冲突和不确定性问题,引入关键字“this”代表其所在方法的当前对象。
–
Java构造器中指该构造器所创建的新对象
–
方法中指调用该方法的对象
<3>
关键字的用法this
–
在类本身的方法或构造器中引用该类的实例变量和方法
–
将当前对象作为参数传递给其它方法或构造器
–
用来调用其他的重载的构造器
9.什么是JAVA中的表达式?有什么作用?
• 表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分
• 表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作。
•
一些表达式的例子:
–
X
–
X+10
–
Y=x+10
–
Arr[10]
–
student.geName()
10.做表列出JAVA中所有修饰符和他们的适用范围(能不能修饰构造器,属性,自由块等)
11.写一个方法,用一个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”格式的字符串
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.写一个方法,能够判断任意一个整数是否素数
public
boolean isPrimes(int
n) {
for (int i = 2; i <= Math.sqrt(n);
i++) {
if(n%i==0){
return
false;
}
}
return
true;
}
14.写一个方法,输入任意一个整数,返回它的阶乘
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
//二分查找特定整数在整型数组中的位置(递归)
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;
}
}
// 二分查找特定整数在整型数组中的位置(非递归)
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.做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
package com.wepull.demo;
//动物的接口
interface Animal{
publicvoid eat(Food food);
}
//一种动物类:猫
class Cat
implements Animal{
public
void eat(Food food){
System.out.println("小猫吃"+food.getName());
}
}
//一种动物类:狗
class Dog
implements Animal{
public void eat(Food food){
System.out.println("小狗啃"+food.getName());
}
}
//食物抽象类
abstract
class Food{
protected String
name;
public String getName() {
returnname;
}
public void setName(String name) {
this.name = name;
}
}
//一种食物类:鱼
class Fish
extends Food{
public Fish(String name) {
this.name = name;
}
}
//一种食物类:骨头
class Bone
extends Food{
public Bone(String name) {
this.name = name;
}
}
//饲养员类
[b]class Feeder[/b]{
//饲养员给某种动物喂某种食物
public void feed(Animal animal,Food food){
animal.eat(food);
}
}
/**
*@authorleno
*测试饲养员给动物喂食物
*/
public
class 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中异常处理的机制
1、程序的执行过程中如果出现异常会自动生成一个异常类对象,该对象将被提交给java运行时系统,该过程被称为抛出异常
2、当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
3、如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
4、程序员通常只能处理违例(Exception),而对错误(Error)无能为力。
18.做一个单子模式的类,只加载一次属性文件
package com.wepull.demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import
java.util.Properties;
//单子模式,保证在整个应用期间只加载一次配置属性文件
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() {
returnconfig;
}
publicvoid setConfig(Properties config) {
this.config = config;
}
}
1、J2SE
19.拷贝一个目录(文件)到指定路径
//拷贝一个目录或者文件到指定路径下
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 =
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中的多线程示例银行取款问题
package
com.wepull.demo;
/**
*账户类
*默认有余额,可以取款
*/
class
Account {
private float
balance = 1000;
public float getBalance() {
return balance;
}
public void
setBalance(float balance) {
this.balance
= balance;
}
/**取款的方法需要同步*/
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("对不起,余额不足!");
}
}
}
/*银行卡*/
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()+"元!");
}
}
// 存折
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.wepull.demo;
// 售票类
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.wepull.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 {
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.编程实现序列化的Student(sno,sname)对象在网络上的传输
package
com.wepull.demo;
[b]import
[/b]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) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
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();
}
}
2、
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语句的字符串
[b]public
[/b]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("insert
into").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){
e.printStackTrace();
}
return
sbsql.toString();
}
2、
Jsp/Servlet
25.写出JSP的内置对象并说明他们的作用
request:它表示HttpServletRequest对象,包含了有关浏览器的请求信息,且提供了几个用于获取cookie, header数据的方法。
response:它表示HttpServletResponse对象,并提供了几个用于响应浏览器的方法(如cookies,头信息等)
out:out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext:它表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、
servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session:它表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
application:它表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config:它表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page:page表示从该页面产生的一个servlet实例。
exception: 它是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
相关文章推荐
- java基础知识回顾——异常
- Java_基础知识回顾
- Java科普之基础知识回顾
- Java基础重点知识回顾9.06
- java基础知识回顾——枚举类和注解
- java基础知识回顾(二)
- java的基础知识回顾---2
- java零基础知识回顾(String)
- java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中
- 回顾Java基础知识——(1)
- java基础知识回顾----流程控制
- java基础知识回顾---List,set,Map 的用法和区别
- java基础知识回顾之javaIO类---BufferedInputStream和BufferedOutputStream
- Java基础知识总结回顾(1)
- 黑马程序员——java语言基础知识回顾(四)
- Java基础知识回顾-4 字符输入输出流
- java基础知识回顾之---java String final类之intern方法
- java基础知识回顾
- java基础知识回顾之---java String final类普通方法的应用之字符串数组排序
- java基础知识回顾之---java StringBuffer,Stringbuilder与String的区别