您的位置:首页 > 编程语言 > Java开发

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的对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: