一、Java面向對象:
1、super()與 this()的區別?
This():當前類的對象,super 父類對象。
Super():在子類訪問父類的成員和行爲,必須受類繼承規則的約束
而 this 他代表當前對象,當然所有的資源都可以訪問.
在構造函數中,如果第一行沒有寫 super(),編譯器會自動插入.但是如果父類沒有不帶參數的構
造函數,或這個函數被私有化了(用 private 修飾).此時你必須加入對父類的實例化構造.而 this 就
沒有這個要求,因爲它本身就進行實例化的構造.
而在方法中 super 和 this 使用的方法就差不多了.只不過 super 要考慮是否能訪問其父類的資源.
2、作用域 public,protected,private,以及不寫時的區別?
Public:不同包、同一包、類內都可用
Private:類內
Protected: 不同包的子類、同一包、類內都可用
不寫時:同一包
3、編程輸出如下圖形。
* * * * *
* * * *
* * *
* *
*
代碼如下:
public class Print {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 5; j > i; j--) {
System.out.print("*");
}
System.out.println();
}
}
}
4、什麼是 java 序列化,如何實現 java 序列化?(寫一個實例)
序列化:
可以將一個對象保存到一個文件,所以可以通過流的方式在網絡上傳輸,可以將文件的內
容讀取,轉化爲一個對象。
處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行
讀寫操作,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操作
時所引發的問題。
序列化的實現:
將需要被序列化的類實現 Serializable 接口,該接口沒有需要實現的方法,implements
Serializable 只是爲了標註該對象是可被序列化的,然後使用一個輸出流(如:
FileOutputStream) 來構造一個 ObjectOutputStream( 對象流 ) 對 象 , 接 着 , 使 用
ObjectOutputStream 對象的 writeObject(Object obj)方法就可以將參數爲 obj 的對象寫出
(即保存其狀態),要恢復的話則用輸入流。
5、Overload 和 Override 的區別。Overloaded 的方法是否可以改變返回值的類型?
方法的重寫 Override,子類覆蓋父類的方法,將子類傳與父類的引用調用的還是子類的方法。
重載 Overloading 一個類多個方法,名稱相同,參數個數類型不同。
兩者都是 Java 多態性的不同表現。
Overloaded 的方法是可以改變返回值的類型。
1, public class Ctest()
{
Public static void main()
{
System.out.prinln(8+8+”88”+8+8);
}
}
168888
5、繼承時候類的執行順序問題,一般都是選擇題,問你將會打印出什麼?
答:父類:
package test;
public class FatherClass
{
public FatherClass()
{
System.out.println("FatherClass Create");
}
}
子類:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass
{
public ChildClass()
{
System.out.println("ChildClass Create");
}
public static void main(String[] args)
{
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass();
}
}
輸出結果:
C:>java test.ChildClass
FatherClass Create
FatherClass Create
ChildClass Create
6、用插入法進行排序代碼如下
package test;
import java.util.*;
class InsertSort
{
ArrayList al;
public InsertSort(int num,int mod)
{
al = new ArrayList(num);
Random rand = new Random();
System.out.println("The ArrayList Sort Before:");
for (int i=0;i<num ;i++ )
{
al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));
System.out.println("al["+i+"]="+al.get(i));
}
}
public void SortIt()
{
Integer tempInt;
int MaxSize=1;
for(int i=1;i<al.size();i++)
{
tempInt = (Integer)al.remove(i);
if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())
{
al.add(MaxSize,tempInt);
MaxSize++;
System.out.println(al.toString());
} else {
for (int j=0;j<MaxSize ;j++ )
{
if
(((Integer)al.get(j)).intValue()>=tempInt.intValue())
{
al.add(j,tempInt);
MaxSize++;
System.out.println(al.toString());
break;
}
}
}
}
System.out.println("The ArrayList Sort After:");
for(int i=0;i<al.size();i++)
{
System.out.println("al["+i+"]="+al.get(i));
}
}
public static void main(String[] args)
{
InsertSort is = new InsertSort(10,100);
is.SortIt();
}
}
JAVA 類實現序例化的方法是實現 java.io.Serializable 接口
Collection 框架中實現比較要實現 Comparable 接口和 Comparator 接口
7、編程:編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 但是要保證漢字不被截半個,如"我 ABC"4,應該截爲"我 AB",輸入"我 ABC 漢 DEF",6,應該輸出爲"
我 ABC"而不是"我 ABC+漢的半個"。
答:代碼如下:
public static void split(String source,int num) throws Exception
{
int k=0;
String temp="";
for (int i = 0; i <source.length(); i++)
{
byte[] b=(source.charAt(i)+"").getBytes();
k=k+b.length;
if(k>num)
{
break;
}
temp=temp+source.charAt(i);
}
System.out.println(temp);
}
8、指出下面程序的運行結果。
class A{
static{
System.out.print("1");
}
public A(){
System.out.print("2");
}
}
class B extends A{
static{
System.out.print("a");
}
public B(){
System.out.print("b");
}
}
public class Hello{
public static void main(String[] ars){
A ab = new B(); //執行到此處,結果: 1a2b
ab = new B(); //執行到此處,結果: 1a2b2b
}
}
注:類的 static 代碼段,可以看作是類首次加載(被虛擬機加載)執行的代碼,而對於類的
加載,首先要執行其基類的構造,再執行其本身的構造
9、抽象類和接口的區別?
(1)接口可以被多重 implements,抽象類只能被單一 extends
(2)接口只有定義,抽象類可以有定義和實現
(3)接口的字段定義默認爲:public static final, 抽象類字段默認是"friendly"(本包可見)
當功能需要累積時用抽象類,不需要累積時用接口。
10、什麼是類的返射機制?
通過類(Class 對象),可以得出當前類的 fields、method、construtor、interface、superClass、
modified 等,同是可以通過類實例化一個實例、設置屬性、喚醒方法。Spring 中一切都是返
射、struts、hibernate 都是通過類的返射進行開發的。
11、類的返射機制中的包及核心類?
java.lang.Class
java.lang.refrection.Method
java.lang.refrection.Field
java.lang.refrection.Constructor
java.lang.refrection.Modifier
java.lang.refrection.Interface
12、得到 Class 的三個過程是什麼?
對象.getClass()類.class 或 Integer.type(int) Integer.class(java.lang.Integer)
Class.forName();
13、如何喚起類中的一個方法?
產生一個 Class 數組,說明方法的參數
通過 Class 對象及方法參數得到 Method
通過 method.invoke(實例,參數值數組)喚醒方法
14、如何將數值型字符轉換爲數字(Integer,Double)?
Integer.parseInt(“1234”)
Double.parseDouble(“123.2”)
15、如何將數字轉換爲字符?
1+””
1.0+””
16、如何去小數點前兩位,並四捨五入?
double d=1256.22d;
d=d/100;
System.out.println(Math.round(d)*100);
17、如何取得年月日,小時分秒?
Calendar c=Calendar.getInstance();
c.set(Calendar.YEAR,2004);
c.set(Calendar.MONTH,0);
c.set(Calendar.DAY_OF_MONTH,31);
System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+"
"+c.get(Calendar.DAY_OF_MONTH));
18、如何獲取某個日期是當月的最後一天?
當前日期加一天,若當前日期與結果的月份不相同,就是最後一天。
取下一個月的第一天,下一個月的第一天-1
public static void main(String[] args)
{
Calendar c=Calendar.getInstance();
c.set(Calendar.YEAR,2004);
c.set(Calendar.MONTH,0);
c.set(Calendar.DAY_OF_MONTH,30);
Calendar c1=(Calendar)c.clone();
System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+"
"+c.get(Calendar.DAY_OF_MONTH));
c.add(Calendar.DAY_OF_MONTH,1);
if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))
{
System.out.println("是最後一天");
}
else
{
System.out.println("不是取後一天");
}
}
19、float 型 float f=3.4 是否正確?
報錯,應當是 float f=3.4f
如果是 float f=3(整數)正確
20、說出一些常用的類,包,接口,請各舉 5 個
常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer
常用的包:java.lang java.awt java.io java.util java.sql javax.xml javax.sevlet
javax.ejb. java.net javax.faces
常用的接口 : List Map Document NodeList EjbObject EjbHome SessionBean
EntityBean
21、java 中會存在內存泄漏嗎,請簡單描述。
會。如:int i,i2; return (i-i2); //when i 爲足夠大的正數,i2 爲足夠大的負數。結果
會造成溢位,導致錯誤。
22、java 中實現多態的機制是什麼?
靜態的多態:方法名相同,參數個數或類型不相同。(overloading)
動態的多態:
子類覆蓋父類的方法,將子類的實例傳與父類的引用調用的是子類的方法
實現接口的實例傳與接口的引用調用的實現類的方法。
23、垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收?
動態內存
存放類實例
靜態內存
類本身
垃圾收集主要針對的是動態內存,一般當內存不夠用時會進行垃圾收集。
或通過 System.gc()手動收集,但不保證一定執行。
24、靜態變量和實例變量的區別?
static i = 10; //常量
class A a; a.i =10;//可變
靜態方法可以調用靜態變量。
實現方法可以調用靜態變量、實例變量
25、是否可以從一個 static 方法內部發出對非 static 方法的調用?
不可以,如果其中包含對象的 method();不能保證對象初始化.
26、寫 clone()方法時,通常都有一行代碼,是什麼?
Clone 有缺省行爲,super.clone();他負責產生正確大小的空間,並逐位複製。
27、JAVA 語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally 分別代表什麼意義?在
try 塊中可以拋出異常嗎?
Try:執行部分,產生異常
Catch:捕捉異常
Finally:不管有沒有異常都執行
Throws:在方法聲明處聲明要拋出的異常,調用者必須對其進行處理。
Throw:拋出一個異常
在 try 中可以拋出異常,一般與聲明的異常相同。
自定義異常要繼承於 Exception 或 Exception 的子類
28、冒泡排序法
//相鄰兩個數比較,將最小或最大的放到後面,最後面數的不參與比較
public class BubbleSort {
private static int al[] = new int[10];
public BubbleSort() {
al[0]=2;
al[1]=3;
al[2]=23;
al[3]=45;
al[4]=1;
al[5]=67;
al[6]=23;
al[7]=80;
al[8]=35;
al[9]=72;
}
public static void main(String[] args) {
BubbleSort bs = new BubbleSort();
System.out.println("排序前:");
display(al);
for(int i=0;i<al.length;i++) {
for (int j = 0; j < al.length-i-1; j++) {
if(al[j]>al[j+1]) {
swap(j,j+1);
}
}
}
System.out.println();
System.out.println("排序後:");
display(al);
}
private static void display(int[] al2) {
for (int i = 0; i < al2.length; i++) {
System.out.print(al2[i]+" ");
}
}
private static void swap(int i, int j) {
int temp = al[i];
al[i]= al[j];
al[j] = temp;
}
}
29、String and StringBuffer 的區別?
String:長度給定不可變,當多個字符串聯合時要先轉爲StringBuffer,再聯合,速度慢。
StringBuffer:長度可變,可以將多個字符串值直接聯合,效率高
30、用 java 代碼編寫堆棧
public class Stack {
int[] data;
int maxSize;
int top;
public Stack(int maxSize) {
this.maxSize = maxSize;
data = new int[maxSize];
top = -1;
}
/**
* 依次加入數據
* @param data 要加入的數據
* @return 添加是否成功
*/
public boolean push(int data) {
if(top+1== maxSize) {
System.out.println("棧已滿!");
return false;
}
this.data[++top] = data;
return true;
}
/**
* 從棧中取出數據
* @return 取出的數據
*/
public int pop() throws Exception{
if(top==-1) {
throw new Exception("棧已空!");
}
return this.data[top--];
}
public static void main(String[] args) throws Exception {
Stack stack=new Stack(1000);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
while(stack.top>=0)
{
System.out.println(stack.pop());
}
}
}