Java面向對象精選二十題

1.super()與this()的區別?
This():當前類的對象,super父類對象。
Super():在子類訪問父類的成員和行爲,必須受類繼承規則的約束
而this他表明當前對象,固然全部的資源均可以訪問.
在構造函數中,若是第一行沒有寫super(),編譯器會自動插入.可是若是父類沒有不帶參數的構造函數,或這個函數被私有化了(用private修飾).此時你必須加入對父類的實例化構造.而this就沒有這個要求,由於它自己就進行實例化的構造.
而在方法中super和this使用的方法就差很少了.只不過super 要考慮是否能訪問其父類的資源.java

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 事件委託機制的概念,一個源產生一個事件並將它送到一個或多個監聽器那裏。在這種方案中,監聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這個事件,而後返回。
    垃圾回收機制 垃圾收集是將分配給對象但再也不使用的內存回收或釋放的過程。若是一個對象沒有指向它的引用或者其賦值爲null,則次對象適合進行垃圾回收windows

5.在JAVA中,如何跳出當前的多重嵌套循環?
用break; return 方法。
6.什麼是java序列化,如何實現java序列化?(寫一個實例)
序列化:
能夠將一個對象保存到一個文件,因此能夠經過流的方式在網絡上傳輸,能夠將文件的內容讀取,轉化爲一個對象。網絡

處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。
序列化的實現:
將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
7.一個".java"源文件中是否能夠包括多個類(不是內部類)?有什麼限制?
能夠。若是這個類的修飾符是public,其類名與文件名必須相同。
8.排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序?
排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數排序)
快速排序的僞代碼。
9.Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型?
方法的
重寫Override,子類覆蓋父類的方法,將子類傳與父類的引用調用的仍是子類的方法。
重載Overloading 一個類多個方法,名稱相同,參數個數類型不一樣。
二者都是Java多態性的不一樣表現。
Overloaded的方法是能夠改變返回值的類型。
1, public class Ctest()
{
Public static void main()
{
System.out.prinln(8+8+」88」+8+8);
}
}框架

168888
10.Final類有什麼特色?
屬性常量
方法不能夠overridding
類不能夠繼承
11.繼承時候類的執行順序問題,通常都是選擇題,問你將會打印出什麼?
答:父類:
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
12.內部類的實現方式?
答:示例代碼以下:
package test;
public class OuterClass
{
private class InterClass
{
Public Interlass()
{
System.out.println("InterClass Create");
}
}
public OuterClass()
{
InterClass ic = new InterClass();
System.out.println("OuterClass Create");
}
public static void main(String[] args)
{
OuterClass oc = new OuterClass();
}
}
輸出結果:
C:>java test/OuterClass
InterClass Create
OuterClass Create
13.用JAVA實現一種排序,JAVA類實現序列化的方法(二種)?dom

  1. 如在COLLECTION框架中,實現比較要實現什麼樣的接口?
    15.用插入法進行排序代碼以下
    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();
}
} ide

JAVA類實現序例化的方法是實現java.io.Serializable接口
Collection框架中實現比較要實現Comparable 接口和 Comparator 接口
16.編程:編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 可是要保證漢字不被截半個,如"我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);
}
1五、Java編程,打印昨天的當前時刻
public class YesterdayCurrent{
public void main(String[] args){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(cal.getTime());
}
}
1六、文件讀寫,實現一個計數器
public int getNum(){
int i = -1;
try{
String stri="";
BufferedReader in = new BufferedReader(new FileReader(f));
while((stri=in.readLine())!=null){
i = Integer.parseInt(stri.trim());
}
in.close();
}catch(Exception e){
e.printStackTrace();
}
return i;
}
public void setNum(){
int i = getNum();
i++;
try{
PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false)));
out.write(String.valueOf(i)); //多是編碼的緣由,若是直接寫入int的話,將出現java編碼和windows編碼的混亂,所以此處寫入的是String
out.close() ;
}catch(Exception e){
e.printStackTrace();
}
}
1七、指出下面程序的運行結果。
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 代碼段,能夠看做是類首次加載(被虛擬機加載)執行的代碼,而對於類的加載,首先要執行其基類的構造,再執行其自己的構造
1八、抽象類和接口的區別?
(1)接口能夠被多重implements,抽象類只能被單一extends
(2)接口只有定義,抽象類能夠有定義和實現
(3)接口的字段定義默認爲:public static final, 抽象類字段默認是"friendly"(本包可見)
當功能須要累積時用抽象類,不須要累積時用接口。
1九、什麼是類的返射機制?
經過類(Class對象),能夠得出當前類的fields、method、construtor、interface、superClass、modified等,同是能夠經過類實例化一個實例、設置屬性、喚醒方法。Spring中一切都是返射、struts、hibernate都是經過類的返射進行開發的。
20、類的返射機制中的包及核心類?
 java.lang.Class
 java.lang.refrection.Method
 java.lang.refrection.Field
 java.lang.refrection.Constructor
 java.lang.refrection.Modifier
 java.lang.refrection.Interface函數

相關文章
相關標籤/搜索