1.Java有那些基本數據類型,String是否是基本數據類型,他們有何區別。java
Java語言提供了八種基本類型:sql
六種數字類型(四個整數型,兩個浮點型)數據庫
字節型byte 8位 短整型short 16位 整型int 32位 數組
長整型long 64位 單精度float 32位 雙精度double 64位安全
一種字符類型數據結構
字符型char 8位app
還有一種布爾型ide
布爾型:boolean 8位 可存儲"True"和"false"。函數
String自己就是一個對象而不是基本數據類型,String的變量名是對String類的引用。性能
2.字符串的操做:
寫一個方法,實現字符串的反轉,如:輸入abc,輸出cba
public static String reverse(String s){
int length=s.length();
StringBuffer result=new StringBuffer(length);
for(int i=length-1;i>=0;i--)
result.append(s.charAt(i));
return result.toString();
}
寫一個方法,實現字符串的替換,如:輸入bbbwlirbbb,輸出bbbhhtccc。
String s = "bbbwlirbbb";
s.replaceAll("wlirbbb","hhtccc");
3.數據類型之間的轉換
如何將數值型字符轉換爲數字(Integer,Double)
使用Integer.parseInt()和Double.parseDouble()方法。
如何將數字轉換爲字符
class my
{
int a=12;
Label label=new Label();
label.setText(String.valueOf(a));
}
如何取小數點前兩位,並四捨五入。
System.out.println("四捨五入取整:(3.856)="
+ new BigDecimal(i).setScale(2, BigDecimal.ROUND_HALF_UP));
4.日期和時間
如何取得年月日,小時分秒
Date dat=new Date();
dat.getYear(); dat.getMonth(); dat.getDay(); dat.getHours(); dat.getMinutes(); dat.getSeconds();
如何取得從1970年到如今的毫秒數
long now=dat.getTime();
如何獲取某個日期是當月的最後一天
DateFormate df=DateFormate.getInstance();df.Format(dat);
如何格式化日期
DateFormate df=DateFormate.getInstance();
df.Format(dat);
5.數組和集合
數組與集合的區別:一:數組聲明瞭它容納的元素的類型,而集合不聲明。這是因爲集合以object形式來存儲它們的元素。二:一個數組實例具備固定的大小,不能伸縮。集合則可根據須要動態改變大小。三:數組是一種可讀/可寫數據結構沒有辦法建立一個只讀數組。然而可使用集合提供的ReadOnly方 只讀方式來使用集合。該方法將返回一個集合的只讀版本。
6.文件和目錄(I/O)操做
如何列出某個目錄下的全部文件
如何列出某個目錄下的全部子目錄
判斷一個文件或目錄是否存在
如何讀寫文件
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class FileOpreate {
public static void main(String [] args)
{
FileOpreate fo=new FileOpreate();
try
{
//文件的寫入
/*String[] testStr=new String[50];
for(int i=0;i<testStr.length;i++)
{
testStr[i]="個人測試數據00"+i;
}
fo.writeFile("D:\\","test.txt",testStr);
*/
//文件的寫入
/*String str="測試";
fo.writeFile("D:\\","test001.txt",str);*/
//建立或者刪除文件
/*if(fo.createAndDeleteFile("D:\\","test001.txt"))
{
fo.createAndDeleteFile("D:\\","test002.txt");
}*/
//建立或者刪除文件夾
/*fo.createAndDeleteFolder("D:\\","2009-07-06");*/
//輸出一個文件內的文件名稱
/*fo.readFolderByFile("D:\\");*/
//判斷一個文件是不是空的
/*fo.fileIsNull("D:\\","test002.txt");*/
//讀取所有的文件內容
/*fo.readAllFile("D:\\","test.txt");*/
//一行一行讀取文件內容
fo.readLineFile("D:\\","test.txt");
}
catch(Exception e)
{
e.printStackTrace();
}
}
7.Java多態的實現(繼承、重載、覆蓋)
多態可分爲:
1)編譯多態:主要是體如今重載,系統在編譯時就能肯定調用重載函數的哪一個版本。
2)運行多態:主要體如今OO設計的繼承性上,子類的對象也是父類的對象,即上溯造型,因此子類對象能夠做爲父類對象使用,父類的對象變量能夠指向子類對象。所以經過一個父類發出的方法調用可能執行的是方法在父類中的實現,也多是某個子類中的實現,它是由運行時刻具體的對象類型決定的。
8.編碼轉換,怎樣實現將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串。
String str = new String("字符串".getBytes("GB2312"),"ISO-8859-1");
9.使用StringBuffer類與String類進行字符串鏈接時有何區別?
JAVA平臺提供了兩個類:String和StringBuffer,它們能夠儲存和操做字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可使用StringBuffer。典型地,你可使用StringBuffers來動態構造字符數據。
10.談談final, finally, finalize的區別。
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示老是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。
11.String s = new String("xyz");建立了幾個String Object?
兩個,一個是string s,另外一個是」xyz」。
12.Java有沒有goto?
goto是java中的保留字,如今沒有在java中使用。
13.數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。String有length()這個方法。
14.Overload和Override的區別。
override(重寫)
1)方法名、參數、返回值相同。
2)子類方法不能縮小父類方法的訪問權限。
3)子類方法不能拋出比父類方法更多的異常(但子類方法能夠不拋出異常)。
4)存在於父類和子類之間。
5)方法被定義爲final不能被重寫。
overload(重載)
1)參數類型、個數、順序至少有一個不相同。
2)不能重載只有返回值不一樣的方法名。
3)存在於父類和子類、同類中。
15.abstract class和interface有什麼區別?
Interface只能有成員常量,只能是方法的聲明;
而abstract class能夠有成員變量,能夠聲明普通方法和抽象方法。
聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類能夠在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象的,沒有一個有程序體。接口只能夠定義static final成員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。而後,它能夠在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用能夠轉換到接口類型或從接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口。
16.是否能夠繼承String類?
String類是final類故不能夠繼承。
17.面向對象的特徵有哪些方面?
1)抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解所有問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2)繼承:繼承是一種聯結類的層次模型,而且容許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類能夠從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類能夠從它的基類那裏繼承方法和實例變量,而且類能夠修改或增長新的方法使之更適合特殊的須要。
3)封裝:封裝是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界能夠被描繪成一系列徹底自治、封裝的對象,這些對象經過一個受保護的接口訪問其餘對象。
4) 多態性:多態性是指容許不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包含多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很好的解決了應用程序函數同名問題。
18.int 和 Integer 有什麼區別?
Java 提供兩種不一樣的類型:引用類型和原始類型(或內置類型)。
Int是java的原始數據類型,
Integer是java爲int提供的封裝類。
Java爲每一個原始類型提供了封裝類。
原始類型封裝類booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble
引用類型和原始類型的行爲徹底不一樣,而且它們具備不一樣的語義。引用類型和原始類型具備不一樣的特徵和用法,它們包括:大小和速度問題,這種類型以哪一種類型的數據結構存儲,當引用類型和原始類型用做某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值爲 null,而原始類型實例變量的缺省值與它們的類型有關。
19.做用域public,private,protected,以及不寫時的區別?
訪問 |
Public |
Protected |
缺省的 |
Private |
同類 |
√ |
√ |
√ |
√ |
同包 |
√ |
√ |
√ |
× |
子類 |
√ |
√ |
× |
× |
通用性 |
√ |
× |
× |
× |
20.用java寫一個冒泡排序。
/**
* 對int數組進行升序排序
*
* @param intVal:要排序的數組
* @param asc:值爲true,表示升序排序;傳入值爲false,表示降序排序
* @return 返回排序後的int數組
*/
public static int[] intArraySort(int [] intVal,boolean asc){
int [] vals=intVal;
int temp;
if(vals.length>0){
if(asc==true){
for(int i=0;i<=vals.length-2;i++){
for(int j=0;j<vals.length-i-1;j++){
if(vals[j]>vals[j+1]){
//升序排列
temp=vals[j];
vals[j]=vals[j+1];
vals[j+1]=temp;
}
}
}
}else{
for(int i=0;i<=vals.length-2;i++){
for(int j=0;j<vals.length-i-1;j++){
if(vals[j]<vals[j+1]){
//降序排列
temp=vals[j];
vals[j]=vals[j+1];
vals[j+1]=temp;
}
}
}
}
}
return vals;
}
21.short s1 =1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,須要強制轉換類型) short s1 = 1; s1 += 1;(能夠正確編譯)
22.float型float f=3.4是否正確?
不正確。精度不許確,應該用強制類型轉換,以下所示:float f=(float)3.4 或float f = 3.4f
在java裏面,沒小數點的默認是int,有小數點的默認是 double;
23.ArrayList和Vector的區別,HashMap和Hashtable的區別。
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性能上較ArrayList差。
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於Hashtable。
HashMap容許將null做爲一個entry的key或者value,而Hashtable不容許。
HashMap把Hashtable的contains方法去掉了,改爲containsvalue和containsKey。由於contains方法容易讓人引發誤解。 Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap 就必須爲之提供外同步。
24.Error與Exception有什麼區別?
error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。
exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。
25.statement 和preparestatement區別
1)建立時的區別:
Statement stm=con.createStatement();
PreparedStatement pstm=con.prepareStatement(sql);
執行的時候:
stm.execute(sql);
pstm.execute();
2)pstm一旦綁定了SQL,此pstm就不能執行其餘的Sql,即只能執行一條SQL命令。
stm能夠執行多條SQL命令。
3)對於執行同構的sql(只有值不一樣,其餘結構都相同),用pstm的執行效率比較的高,對於異構的SQL語句,Statement的執行效率要高。
4)當須要外部變量的時候,pstm的執行效率更高.
26.寫一個數據庫鏈接類,包括查詢及結果存儲。
import java.sql.*; //須要加入的包
//類的定義
class DBConnect {
private String con1 = "sun.jdbc.odbc.JdbcOdbcDriver"; //鏈接SQL所須要的字符串
private String url = "jdbc:odbc:test";
private String user = "sa", password = ""; //這裏請根據您的數據庫用戶和密碼自行修改
Connection con; //用於鏈接數據庫用的
PreparedStatement ps; //其實用Statement也行,PreparedStatement集成了Statement.
ResultSet rs; //一個集合,能夠用於執行SQL命令
//構造函數
DBConnect() {
try {
Class.forName(con1); //Class.forName()用於將一些類加載到JVM
this.Connect(); //函數調用
try {
this.execute();
} catch (SQLException ex) {
System.out.println(ex.toString());
}
} catch (ClassNotFoundException ce) {
System.out.println(ce);
}
}
public void Connect() {
try {
con = DriverManager.getConnection(url, user, password); //作這部以前先把ODBC配置好
if (con != null) {
System.out.println("Connection Sucessfully!");
}
} catch (SQLException ex) {
System.out.println(ex.toString());
}
}
public void execute() throws SQLException {
ps = con.prepareStatement("select *from friends"); //把SQL語句搞給ps
rs = ps.executeQuery(); //這裏執行,以後讓rs知道信息
while (rs.next()) //這裏必須加next(),偏移量移動.
{
System.out.print(rs.getString(2) + "\t");
System.out.print(rs.getString(3) + "\t");
System.out.print(rs.getString(4) + "\t");
System.out.print(rs.getDate(5) + "\t");
System.out.print(rs.getInt(6) + "\t");
System.out.println("");
}
}
public void close() //用於釋放資源,Java裏沒有析構函數,可是經過重寫protected void finalize(),
{ //以後在調用System.runFinalization()和System.gc()能夠提醒JVM執行finalize()以釋放,
try{ //在之前的J2SE版本里能夠經過以上方法調用finalize(),但目前的J2SE5.0只能提醒JVM,但JVM不必定執行
rs.close(); //最好的方案仍是本身寫析構close();
ps.close();
con.close();
}catch(SQLException ce)
{
System.out.println(ce.toString());
}
System.out.println("Connection released!!!");
}
public static void main(String[] args) {
DBConnect dbc=new DBConnect();
dbc.close();
}
}