Java面向對象
創(chuàng)新互聯(lián)是一家業(yè)務范圍包括IDC托管業(yè)務,網(wǎng)絡空間、主機租用、主機托管,四川、重慶、廣東電信服務器租用,西部信息服務器租用,成都網(wǎng)通服務器托管,成都服務器租用,業(yè)務范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務公司。
1. super()與this()的區(qū)別?
This():當前類的對象,super父類對象。
Super():在子類訪問父類的成員和行為,必須受類繼承規(guī)則的約束
而this他代表當前對象,當然所有的資源都可以訪問.
在構造函數(shù)中,如果第一行沒有寫super(),編譯器會自動插入.但是如果父類沒有不帶參數(shù)的構造函數(shù),或這個函數(shù)被私有化了(用private修飾).此時你必須加入對父類的實例化構造.而this就沒有這個要求,因為它本身就進行實例化的構造.
而在方法中super和this使用的方法就差不多了.只不過super 要考慮是否能訪問其父類的資源.
2. 作用域public,protected,private,以及不寫時的區(qū)別?
Public:不同包、 同一包、 類內都可用
Private: 類內
Protected:不同包的子類、同一包、 類內都可用
不寫時: 同一包內、類內
3. 編程輸出如下圖形。
* * * * *
* * * *
* * *
* *
*
代碼如下:
public class Print {
publicstatic 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事件委托機制的概念,一個源產(chǎn)生一個事件并將它送到一個或多個監(jiān)聽器那里。在這種方案中,監(jiān)聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監(jiān)聽器將處理這個事件,然后返回。
垃圾回收機制垃圾收集是將分配給對象但不再使用的內存回收或釋放的過程。如果一個對象沒有指向它的引用或者其賦值為null,則次對象適合進行垃圾回收
5. 在JAVA中,如何跳出當前的多重嵌套循環(huán)?
用break; return 方法。
6. 什么是java序列化,如何實現(xiàn)java序列化?(寫一個實例)
序列化:處理對象流的機制,所謂對象流也就是將對象的內容進行流化??梢詫α骰蟮膶ο筮M行讀寫操作,也可將流化后的對象傳輸于網(wǎng)絡之間。序列化是為了解決在對對象流進行讀寫操作時所引發(fā)的問題。
序列化的實現(xiàn):將需要被序列化的類實現(xiàn)Serializable接口,該接口沒有需要實現(xiàn)的方法,implementsSerializable只是為了標注該對象是可被序列化的,然后使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數(shù)為obj的對象寫出(即保存其狀態(tài)),要恢復的話則用輸入流。
7. 一個".java"源文件中是否可以包括多個類(不是內部類)?有什么限制?
可以。如果這個類的修飾符是public,其類名與文件名必須相同。
8. 排序都有哪幾種方法?請列舉。用JAVA實現(xiàn)一個快速排序?
排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸并排序,分配排序(箱排序、基數(shù)排序)
快速排序的偽代碼。
9. Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
重寫Override,子類覆蓋父類的方法,將子類傳與父類的引用調用的還是子類的方法。
重載Overloading 一個類多個方法,名稱相同,參數(shù)個數(shù)類型不同。
兩者都是Java多態(tài)性的不同表現(xiàn)。
Overloaded的方法是可以改變返回值的類型。
1, public class Ctest(){
Public static void main(){
System.out.prinln(8+8+”88”+8+8);
}
} 168888
(方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。
Overloaded的方法是可以改變返回值的類型。)
10. Final類有什么特點?
屬性常量 方法不可以overridding 類不可以繼承
11. 繼承時候類的執(zhí)行順序問題,一般都是選擇題,問你將會打印出什么?
答:父類:
package test;
public class FatherClass {
public FatherClass() {
System.out.println("FatherClassCreate");
}
}
子類:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass{
public ChildClass() {
System.out.println("ChildClassCreate");
}
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. 內部類的實現(xiàn)方式?
package test;
public class OuterClass {
private class InterClass {
Public Interlass(){
System.out.println("InterClassCreate");
}
}
public OuterClass(){
InterClass ic = new InterClass();
System.out.println("OuterClassCreate");
}
public static void main(String[] args){
OuterClass oc = new OuterClass();
}
}
輸出結果:
C:java test/OuterClass InterClass Create OuterClass Create
13. 用JAVA實現(xiàn)一種排序,JAVA類實現(xiàn)序列化的方法(二種)?
14. 如在COLLECTION框架中,實現(xiàn)比較要實現(xiàn)什么樣的接口?
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 SortBefore:");
for (int i=0;inum ;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;ial.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;jMaxSize ;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 SortAfter:");
for(int i=0;ial.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類實現(xiàn)序例化的方法是實現(xiàn)java.io.Serializable接口
Collection框架中實現(xiàn)比較要實現(xiàn)Comparable 接口和 Comparator 接口
16. 編程:編寫一個截取字符串的函數(shù),輸入為一個字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。但是要保證漢字不被截半個,如"我ABC"4,應該截為"我AB",輸入"我ABC漢DEF",6,應該輸出為"我ABC"而不是"我ABC+漢的半個"。
public static void split(String source,intnum) throws Exception{
intk=0;
Stringtemp="";
for(int i = 0; i source.length(); i++){
byte[]b=(source.charAt(i)+"").getBytes();
k=k+b.length;
if(knum){
break;
}
temp=temp+source.charAt(i);
}
System.out.println(temp);
}
15、Java編程,打印昨天的當前時刻
public class YesterdayCurrent{
public void main(String[] args){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(cal.getTime());
}
}
16、文件讀寫,實現(xiàn)一個計數(shù)器
public int getNum(){
int i = -1;
try{
String stri="";
BufferedReader in = new BufferedReader(newFileReader(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(newBufferedWriter(new FileWriter(f,false)));
out.write(String.valueOf(i)); //可能是編碼的原因,如果直接寫入int的話,將出現(xiàn)java編碼和windows編碼的混亂,因此此處寫入的是String
out.close() ;
}catch(Exception e){
e.printStackTrace();
}
}
17、指出下面程序的運行結果。
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(); //執(zhí)行到此處,結果: 1a2b
ab = new B(); //執(zhí)行到此處,結果: 1a2b2b
}
}注:類的static 代碼段,可以看作是類首次加載(被虛擬機加載)執(zhí)行的代碼,而對于類的加載,首先要執(zhí)行其基類的構造,再執(zhí)行其本身的構造
18、抽象類和接口的區(qū)別?
(1)接口可以被多重implements,抽象類只能被單一extends(2)接口只有定義,抽象類可以有定義和實現(xiàn)(3)接口的字段定義默認為:publicstatic final, 抽象類字段默認是"friendly"(本包可見)
當功能需要累積時用抽象類,不需要累積時用接口。
19、什么是類的反射機制?
通過類(Class對象),可以得出當前類的fields、method、construtor、interface、superClass、modified等,同是可以通過類實例化一個實例、設置屬性、喚醒方法。Spring中一切都是返射、struts、hibernate都是通過類的返射進行開發(fā)的。
20、類的返射機制中的包及核心類?
①java.lang.Class②java.lang.refrection.Method③java.lang.refrection.Field
④java.lang.refrection.Constructor⑤java.lang.refrection.Modifier⑥java.lang.refrection.Interface
21、得到Class的三個過程是什么?
①對象.getClass()②類.class或Integer.type(int) Integer.class(java.lang.Integer)③Class.forName();
22、如何喚起類中的一個方法?
①產(chǎn)生一個Class數(shù)組,說明方法的參數(shù)②通過Class對象及方法參數(shù)得到Method③通過method.invoke(實例,參數(shù)值數(shù)組)喚醒方法
23、如何將數(shù)值型字符轉換為數(shù)字(Integer,Double)?
Integer.parseInt(“1234”) Double.parseDouble(“123.2”)
24、如何將數(shù)字轉換為字符?
1+”” 1.0+””
25、如何去小數(shù)點前兩位,并四舍五入。
double d=1256.22d; d=d/100; System.out.println(Math.round(d)*100);
26、如何取得年月日,小時分秒?
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));
27、如何取得從1970年到現(xiàn)在的毫秒數(shù)
Java.util.Date dat=new Date(); long now=dat.getTime();
或System.currentTimeMillis()
28、如何獲取某個日期是當月的最后一天?
當前日期加一天,若當前日期與結果的月份不相同,就是最后一天。
取下一個月的第一天,下一個月的第一天-1
public static void main(String[] args){
Calendarc=Calendar.getInstance();
c.set(Calendar.YEAR,2004);
c.set(Calendar.MONTH,0);
c.set(Calendar.DAY_OF_MONTH,30);
Calendarc1=(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("不是取后一天");
}
}
29、如何格式化日期?
Import java.text. SimpleDateFormat;
SimpleDateFormat sdf=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date dat=new Date();
String str=sdf.format(dat); //把日期轉化為字符串
System.out.println(str);
Java.util.Date d1=sdf.parse(“yyyy-mm-dd”); //將字符串轉化為日期
30、編碼轉換,怎樣實現(xiàn)將GB2312編碼的字符串轉換為ISO-8859-1編碼的字符串。
String a=new String("中".getBytes("gb2312"),"iso-8859-1");
String a=new String("中".getBytes("iso-8859-1"));
應該是String a=new String("中".getBytes("gb2312"),"iso-8859-1");
String a1=newString(a.getBytes("iso-8859-1"));
Java程序員應聘一般要經(jīng)過筆試和面試。作為一個技術人員,特別是剛出道的,筆試的成績是比較重要。以下是我經(jīng)過幾次筆試總結的一些經(jīng)驗教訓。
一般來說,試題會分為三個部分,Java基礎、數(shù)據(jù)庫基礎和綜合題。
首先是Java基礎,這個很簡單,也就是考考你對Java語言本身的理解,包括語法,類庫的使用等。有選擇題,也會有寫代碼題。寫代碼的時候認真仔細就是了?;A題答案一般都比較死,所以盡量不要錯。在這,出一道我遇到的題考考大家,Java編程:把American,Japan,China,F(xiàn)rance,Brazil按英文字母排序。說說思路就行了:)
其次是數(shù)據(jù)庫。準確的說,考的不是數(shù)據(jù)庫,而是SQL語句。一般題型是,給兩三個表,然后讓你根據(jù)需求寫SQL。最普通的就是學生表、選課表和成績表。要掌握的就是連接查詢,還有就是一些函數(shù)(建表、表操作等就不說了哈)。其實這些都相當簡單,但是往往被新手忽略。我就遭過,因為有半年沒寫過SQL了,連接查詢搞忘完了,有兩次筆試都空起,結果可想而知。這些是必備技術,千萬不能空起??!
然后是綜合題。之所以說是綜合題,是因為包含的內容比較多,一般都是主觀題。這里,人家是想看看你對Java高級技術以及周邊技術的了解程度和運用能力,說白了,就是考概念和考應用題。這里說的Java高級技術,也就是J2EE架構中的技術,這些不會的話,人家是不得要你的。如果你會一些流行的技術框架,那就更好了。所謂Java周邊技術,包括HTTP,HTML,XML,UML,JavaScript,CSS等,要求一般不是很高,要了解,比如讓你用HTML寫個表單你要會。關于剛才提到的技術或者框架,希望要了解其工作的原理和機制,一般要考,比如讓你說說Struts的MVC。關于應用題,可能出一道網(wǎng)絡應用來考。
以上就是我筆試的經(jīng)驗,一般是這樣,不過我也遇到過變態(tài)的。一次筆試,就被徹底甩翻,C/C++、數(shù)據(jù)庫、Java技術、Shell編程、網(wǎng)絡協(xié)議、Unix、軟件工程全部上了。
如果筆試做的好,那就成功大半了,不過不要輕視面試哦!
關于面試技巧,網(wǎng)上太多了,我就不多說。作為技術人員,雖說以技術為主,但溝通能力同樣重要,面試時要主動,表達要清楚,要微笑,要誠實,要穩(wěn)重。
關于價錢,說實話,我們中國的程序員是世界上最好的程序員,我們拿最少的錢,干最多的活。剛出道的程序員,在成都,一般來說,試用不會超過2000,多半是1500左右,做好被資本家剝削的心理準備吧。
祝你旗開得勝?。?!
1.amethod()方法被重寫
2.getMyClass()中輸出一次,main()中再輸出一次