第一篇:java語言深入:究竟什么叫面向接口編程
Java:Java語言深入:究竟什么叫面向接口編程
[ 來源:Java | 作者:Java | 時間:2007-7-20 | 去論壇]
在一個面向對象的系統中,系統的各種功能是由許許多多的不同對象協作完成的。在這種情況下,各個對象內部是如何實現自己的對系統設計人員來講就不那么重要了;而各個對象之間的協作關系則成為系統設計的關鍵。小到不同類之間的通信,大到各模塊之間 的交互,在系統設計之初都是要著重考慮的,這也是系統設計的主要工作內容。面向接口編程我想就是指按照這種思想來編程吧!實際上,在日常工作中,你已經按 照接口編程了,只不過如果你沒有這方面的意識,那么你只是在被動的實現這一思想;表現在頻繁的抱怨別人改的代碼影響了你(接口沒有設計到),表現在某個模 塊的改動引起其他模塊的大規模調整(模塊接口沒有很好的設計)等等。
Booch先生那天談到Interaction Designer,它就是指做這類設計的人,只不過層次更高一些。我想目前我們的軟件設計隊伍中,這類人是最缺乏的人才之一。非接口編程?是不是就是面向過程的編程思想?
1.關于接口的理解。
接口從更深層次的理解,應是定義(規范,約束)與實現(名實分離的原則)的分離。
我們在一般實現一個系統的時候,通常是將定義與實現合為一體,不加分離的,我認為最為理解的系統設計規范應是所有的定義與實現分離,盡管這可能對系統中的某些情況有點繁煩。
接口的本身反映了系統設計人員對系統的抽象理解。
接口應有兩類:第一類是對一個體的抽象,它可對應為一個抽象體(abstract class);
第二類是對一個體某一方面的抽象,即形成一個抽象面(interface);
一個體有可能有多個抽象面。
抽象體與抽象面是有區別的。
2.設計接口的另一個不可忽視的因素是接口所處的環境(context,environment),系統論的觀點:環境是系統要素所處的空間與外部影響 因素的總和。任何接口都是在一定的環境中產生的。因此環境的定義及環境的變化對接口的影響是不容忽視的,脫離原先的環境,所有的接口將失去原有的意義。
3.按照組件的開發模型(3C),它們三者相輔相成,各司一面,渾然一體,缺一不可。
面向對象是指,我們考慮問題時,以對象為單位,考慮它的屬性及方法
面向過程是指,我們考慮問題時,以一個具體的流程(事務過程)為單位,考慮它的實現
接口設計與非接口設計是針對復用技術而言的,與面向對象(過程)不是一個問題
我認為:UML里面所說的interface是協議的另一種說法。并不是指com的interface,CORBA的interface,Java的interface,Delphi的interface,人機界面的interface或NIC的interface。
在具體實現中,是可以把UML的interface實現為語言的interface,分布式對象環境的interface或其它什么 interface,但就理解UML的interface而言,指的是系統每部分的實現和實現之間,通過interface所確定的協議來共同工作。
所以我認為,面向interface編程,原意是指面向抽象協議編程,實現者在實現時要嚴格按協議來辦。也就是Bill Joy同志說的,一邊翻 rfc,一邊寫代碼的意思。面向對象編程是指面向抽象和具象。抽象和具象是矛盾的統一體,不可能只有抽象沒有具象。一般懂得抽象的人都明白這個道理。但 有的人只知具象卻不知抽象為何物。
所以只有interface沒有實現,或只有實現而沒有interface者是沒有用的,反OO的。
所以還是老老實實面向對象編程,面向協議編程,或者什么都不面向,老老實實編程。
但是我很討厭討論這樣的術語,不如我們談談什么叫面向領導的編程?面向用戶的編程?領導和用戶有時都很BT,我們就面向BT編程?
第二篇:Java編程語言面試題
西安英泰移動通信學院S2級Java編程語言測試題 1
Java編程語言面試題
一、簡答題
1、簡述用Java編程語言編寫、編譯、解釋和執行過程。
2、簡述在Java JDK中,java.exe程序的作用。
3、簡述Java編程語言中的數組和C編程語言中定義數組有什么區別。
4、簡述類與對象的關系。對象的方法和類的方法是否為一回事?
5、JVM在解析代碼Person p1=new Person()和new Person()時有什么區別?
6、簡述this關鍵字的四中用途。
7、簡述構造函數的作用。
8、分別簡述static和final關鍵字的意義。
9、簡述抽象類和接口的區別,并闡明抽象類和接口的用途。
10、簡述多態的概念和意義。
11、簡述異常和錯誤的區別。
12、簡述如何創建和啟動一個線程的兩種方法
13、簡述棧內存和堆內存分別用來做什么。
14、簡述throw關鍵字在程序中拋出的是什么。
15、在一個類的public static void method()中,能夠直接使用該類什么類型的成員。
二、計算題
1、在類Runner中定義一個方法move(),要求這個方法的參數是一個實現了接口Runnable的匿名內部類的對象,該接口中的方法中的內容自己可以決定。
2、類Outer中與方法屬性平行定義的內部類為Inner{ public void doStuff(){}},寫出在另一個類TestInner的public static void main(String s)中調用方法doStuff()的代碼。
3、類Book{ public void insert(String id)throws Exception{…}}中的方法被類TestBook中public void testInser()方法調用,寫出該方法中的主要代碼。
4、兩個頂級包test1和test2,需要將它們壓縮成一個文件myjava.jar,再用WinRaR打開時,會在瀏覽器上看到下列層次;
◎META-INF
◎test1
◎test2
注:◎為文件夾
請寫出操作過程,并寫出運行的命令行程序(提示:用jar.......).5、同一個線程類ThreadTest中定義了:
public synchronized void sale(){...}
synchronized(str){...}
寫出能使這兩個類成員保持同步的改進代碼。
6、解釋類class Q{
private String name=“李四”;
private String sex=“女”;
boolean bFull=false;
public synchronized void put(String name,String sex){
if(bFull)
try{
wait();
this.name=name;
}catch(InterruptedException e){}
try{
Thread.sleep(10);
}catch(Exception e){
System.out.println(e.getMessage());
}
this.sex=sex;
bFull=true;
notify();
}
public synchronized void get()
{
if(!bFull)
try{
wait();
}catch(InterruptedException e){}
System.out.println(name + “----” + sex);
bFull=false;
notify();
}
}
中wait()、notify()、sleep()諸方法的作用。
7、在類class TestInteger{
public static void main(String[] args){
int w =。。。。。。。。。。。。。。。。。。。。// 將args[0]轉換int型的方法
int h =。。。。。。。。。。。。。。。。。。。。//將args[1]轉換int型的另一種方法//int h = Integer.valueOf(args[1]).intValue();//第三種方法
for(int i=0;i StringBuffer sb=new StringBuffer(); for(int j=0;j sb.append('*'); } System.out.println(sb.toString()); } } } 中,args[0]的值為:“1234”,args[1]的值為:“5678”,請上面代碼塊中的……………處填寫代碼。 8、下面類 import java.util.*; public class TestVector{ public static void main(String [] args){ int b=0; Vector v=new Vector();System.out.println(“Please Enter Number:”); while(true){ try{ b= System.in.read();//……….} catch(Exception e){ System.out.println(e.getMessage()); } if(b=='r' || b== 'n') break; else{ int num=b-'0'; v.addElement(new Integer(num));//………..} } int sum=0; Enumeration e=v.elements();//………………… while(e.hasMoreElements()){ Integer intObj=(Integer)e.nextElement();//………………..sum += intObj.intValue(); } System.out.println(sum); } } 中,請在諸單行注釋//。。。。中解釋其左邊一行代碼的意義。 9、下面類 import java.io.*; public class DataStreamTest{ public static void main(String[] args){ try{ FileOutputStream fos=new FileOutputStream(“c:hello.txt”);//…….BufferedOutputStream bos= new BufferedOutputStream(fos);//…… DataOutputStream dos= new DataOutputStream(bos);//……..dos.writeUTF(“ab中國”);//……… dos.writeBytes(“ab中國”); dos.writeChars(“ab中國”); dos.close();//………… FileInputStream fis=new FileInputStream(“hello.txt”);//…….BufferedInputStream bis=new BufferedInputStream(fis);//…….DataInputStream dis=new DataInputStream(bis);//…….System.out.println(dis.readUTF()); dis.close(); }catch(Exception e){ System.out.println(e.getMessage()); } } } 中,請在諸單行注釋//。。。。中解釋其左邊一行代碼的意義。 10、已知接口:interface PCI { voidstart(); voidstop(); } 要求:寫兩個類:NetWorkCard,SoundCard分別實現上面接口的方法(內容自編),并寫第三個類MainBoard,該類中的方法install(PCI p)應用NetWorkCard,SoundCard兩個類對象的方法。根據上面的要求,填寫下面的代碼: class Assembler { public static void main(String []args) { //在下面寫代碼….} } class NetWorkCard ….{ } class SoundCard…………{ } class MainBoard…………………………………..{ install(PCI p){ } } 第一章 面向對象開發方法概述 1.面向對象的軟件開發有哪些優點? 1) 把軟件系統看成是各種對象的集合,這更接近人類的自然思維方式。 2) 軟件需求的變動性往往是功能的變動,而功能的執行者——對象,一般不會有多大的變化,比結構化更穩定。 3) 對象包括屬性和行為,對象把數據及方法的具體實現方式一起封裝起來,使得方法與之相關的數據不再分析,提高了每個子系統的相對對立性,從而提高軟件的可維護性。 4) 支持封裝,抽象,繼承和多態。提高了軟件的可重用性,可維護性和可擴展性。 2.在軟件系統中,為什么說一個孤立的不對外提供任何服務的對象是沒有意義的? 1) 每個對象都具有特定的功能,相對于其他對象而言,它的功能就是為其他對象提供的服務。 2) 從使用者角度出發,整個軟件系統就是一個服務的提供者。 3) 在系統內部,每個子系統也都是服務的提供者,它們其他子系統提供服務。 4) 因此說一個孤立的部隊為提供任何服務的系統是美歐任何意義的。 3.列舉一些現實生活中的例子,來說明什么是依賴關系、什么是聚集關系,以及什么是關聯關系。 1) 關聯關系:關聯是指類之間的特定對應關系,可以分為單向關聯和雙向關聯,也可以分為一對一關聯、一對多關聯以及多對多關聯。A關聯B,是指Class A與Class B之間存在特定的對應關系。舉例如學生和老師,訂單和客戶。 2) 依賴關系:類之間的調用關系。A依賴B,Class A訪問Class B提供的服務。如Panel與Shape的關系。 3) 聚集關系:是整體與部分之間的關系 4.列舉一些顯示生活中的例子,來說明什么是封裝,什么是接口。 1) 接口:對象中所有向使用者公開的方法的聲明構成了對象的接口。 2) 封裝:隱藏對象的屬性和實現細節,僅僅對外公開接口。 3) 接口的優點:a.提高系統之間松散耦合b.提高了系統的可擴展性。 4) 封裝的有點: a.便于使用者正確、方便地理解和使用系統,防止使用者錯誤修改系統的屬性。 b.有助于建立各個系統之間的松耦合關系,提高系統的獨立性。 c.提高軟件的可重用性,沒個系統都是一個相對獨立的整體,可以在多種環境中得到重用。 d.降低構建大型系統的風險,即使整個系統不成功,個別的獨立子系統有可能依然有價值。 5.抽象的最主要特征是什么? 抽象是指從特定角度出發,從已經存在的一些事物中抽取我們所關注的特性,形成一個新的事物的思維過程。 6.在建立對象模型時,要經歷哪些抽象思維過程? 1) 從問題領域的事物到軟件模型中對象的抽象。 2) 從對象到類的抽象。 3) 從子類到父類的抽象 7.類就是程序員自定義的類型。這種說法是否正確? 不正確,類是一組具有相同屬性和行為的對象的抽象。類及類的關系構成了對象模型的主要內容。開發人員需要根據先識別對象,然后再進行分類(創建任意的數據模型)的思路來建立對象模型。 8.小王本來體重70kg,經過減肥,體重降到45kg,試從這個問題領域中識別對象、類、屬性、狀態和狀態的變化。 1) 類:人。 2) 對象:小王。 3) 屬性:體重。 4) 狀態:70kg。 5) 狀態的變化:小王的減肥行為導致體重下降。 9.在UML圖中哪些框圖描述了系統的動態結構,哪些框圖描述了系統的靜態結構? 1) 用例圖、類框圖、組件圖、部署圖構成了系統的靜態模型。 2) 狀態轉換圖、時序圖、協作圖則構成了系統的動態模型。 第二章 第一個Java應用 1.把一個類放在包里有什么用? 答:把類分包的作用: (1) 能夠區分名字相同的類 (2) 有助于實施訪問權限控制 (3) 有助于劃分和組織Java應用中的各個類 2.JavaDoc文檔是不是為軟件的終端用戶提供的使用指南? 答:不是的,JavaDoc文檔是供Java開發人員閱讀的,他們通過JavaDoc文檔來了解其他開發人員開發的類的用法。Java開發人員應該養成經常閱讀JavaDoc文檔的良好習慣。 3.對于com.abc.dollapp.AppMain類,使用以下命令進行編譯,編譯出來的.class文件位于什么目錄下? java –d C:classes –sourcepath C:src C:srccomabcdollappAppMain.java 答:將會存放在C:classescomabcdollapp下。 4.對于以上編譯出來的AppMain類,以下哪個java命令能正確運行它? (a) java C:classescomabcdollappAppMain.class (b) java –classpath C:classes AppMain (c) java –classpath C:classescomabcdollapp AppMain (d) java –classpath C:classes com.abc.dollapp.AppMain 答:(b) 5.以下哪些main()方法的聲明能夠作為程序的入口方法? (a) public static void main() (b) public static void main(String[] string) (c) public static void main(String args) (d) static public int main(String[] args) (e) static void main(String[] args) 答:(b),主函數必須以public static void形式存在,參數必須為String數組形式。 6.假定以下程序代碼都分別放在MyClass.java文件中,哪些程序代碼能夠編譯通過? (a) import java.awt.*;package Mypackage; class MyClass{}; (b) package MyPackage; import java.awt.*; class MyClass{}; (c) /*This is comment*/ package MyPackage; import java.awt.*; public class MyClass{}; 答:(c),程序順序必須按照import, package, class走,源文件必須以public類型的類命名。 7.對于以下Myprog類,運行命令”java Myprog good morning”,將會得到打印結果? public class Myprog { public static void main(String argv[]) { System.out.println(argv[2]); } } 答:打印結果為空。argv[0] = “good”, argv[1] = “morning”。 8.下面哪些是Java的關鍵字? (a) default (b) NULL (c) String (d) throws (e) long (f) true 答:(a),(d),(e),(f),java中所有的關鍵字都是小寫。 9.當AppMain類的main()方法創建了5個Doll對象時,運行時數據區的數據如何分布的?參考2.4節的圖2-13,畫出此時運行時數據區的狀態圖。 運行時數據區(內存) Java棧區 執行main()方法的主線程的方法調用棧 局部變量beibei 局部變量jingjing 局部變量huanhuan 局部變量yingying 局部變量nini 堆區 Doll實例 name:貝貝 Doll實例 name:晶晶 Doll實例 name:歡歡 Doll實例 name:迎迎 Doll實例 name:妮妮 方法區 Doll類型信息 AppMain類型信息 (包含main()方法信息) 10.下面哪些是合法的Java標識符? (a) #_pound (b) _underscore (c) 5Interstate (d) Interstate5 (e) _5_ (f) class 答:(b),(d),(e)標識符命名規則如下: (1) 標識符首字母必須為字母、下劃線“_”、美元“$”、人民幣“¥”(2) 標識符由數字、大寫字母、小寫字母、下劃線以及美元等組成 (3) 不能把關鍵字和保留字作為標識符 (4) 標識符沒有長度的限制 (5) 標識符是大小寫敏感的第三章 數據類型和變量 1.對于以下程序,運行“java Abs”,將得到什么打印結果? public class Abs { static int a = 0x11; //十六進制 static int b = 0011; //八進制 static int c = 'u0011'; //十六進制數據的Unicode字符編碼 static int d = 011; //八進制 /** * @param args */ public static void main(String[] args) { System.out.println(“a=”+a); System.out.println(“b=”+b); System.out.println(“c=”+c); System.out.println(“d=”+d); } } 答:輸出如下 a=17 b=9 c=17 d=9 2.以下哪段代碼能正確編譯通過? (a) char a = ?a?; char b = 1; char c = 08; (b) int a = ?a?; (c) long a =?u00FF?; (d) char a = ?u0FF?; (e) char d = “d”; 答:(b)、(c)能通過編譯。(a)中“char c=08”將int賦值給char需要部分強制轉換,“char c=8”就正確;(d)中unicode編碼錯誤,java采用的是UCS-2編碼,共16位;(e)字符賦值是使用單引號,字符串String賦值時才使用雙引號。 3.下面哪些代碼能編譯通過? (a) short myshort=99S; (b) String name = ?Excellent tutorial Mr Green?;(c) char c = 17c; (d) int z = 015; 答:(d)可以編譯通過。(a)中char賦值給short需要強制轉換;(b)中String類型賦值用雙引號;(c)中int賦值給char需要部分強制轉換。 4.字符“A”的Unicode字符編碼為65.下面哪些代碼正確定義了一個代表字符“A”的變量? (a) Char ch=65; (b) Char ch=?65?; (c) Char ch =?u0041?; (d) Char ch=?A?; (e) Char ch =”A” 答:(c)、(d)可以得到”A”。(b)的輸出為5,其他無法編譯通過。 5.以下代碼共創建了幾個對象? String s1=new String(“hello”); String s2=new String(“hello”); String s3=s1; String s4=s2; 答:共創建了2個對象。棧區4個局部變量分別引用了堆區的2個實例,而2個實例又引用了工作區的同一個類。 6.以下代碼能否編譯通過?假如能編譯通過,運行時將得到什么打印結果? class Test { static int myArg = 1; public static void main(String[] args) { Int myArg; System.out.println(myArg); } } 答:無法編譯通過,因為局部變量myArg聲明之后Java虛擬機就不會自動給它初始化為默認值,若在使用前未被初始化,編譯會報錯。 7.對于以下程序,運行“java Mystery Mighty Mouse”,將得到什么打印結果? public class Mystery { public static void main(String[] args) { Changer c = new Changer(); c.method(args); System.out.println(args[0]+“ ”+args[1]); } static class Changer { void method(String[] s) { String temp = s[0]; s[0] = s[1]; s[1] = temp; } } } 答:打印結果為“Mighty Mystery” 8.對于以下程序,運行“java Pass”,將得到什么打印結果? public class Pass { static int j = 20; public static void main(String[] args) { int i=10; Pass p = new Pass(); p.amethod(i); System.out.println(“i=”+i); System.out.println(“j=”+j); } public void amethod(int x) { x*=2; j*=2; } } 答:打印結果是 i=10 j=40 其中“int x”是傳參,作用域僅在amethod之中。 第四章 操作符 1.以下哪些程序代碼能夠編譯通過? (a) int i=0;if(i){ System.out.println(“hello”);} (b) boolean b1=true; boolean b2=true; if(b1==b2){ System.out.println(“So true”);} (c) int i=1; int j=2; if(i==1||j==i){ System.out.println(“ok”);} (d) int i=1; int j=2; if(i==1&|j==i){ System.out.println(“ok”);} 答:(b)、(c)能編譯通過。(a)中int不能作為boolean出現,(d)中不能出現&|該操作符。 2.運行以下程序,將得到什么打印結果? System.out.println(-1>>>1); System.out.println(-1>>1); System.out.println(2>>1); System.out.println(1<<<1); 答:>>>是邏輯右移位操作符,也稱不帶符號右移位操作符,在移位的過程中二進制數開頭填0;>>是右移位操作符,也稱帶符號右移位操作符,舍棄末尾,在開頭填符號位;<<<操作符不存在; 11111111 11111111 11111111 11111111 -1>>>1 01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 -1>>1 11111111 11111111 11111111 11111111 00000000 00000000 00000000 00000010 2>>1 00000000 00000000 00000000 00000001 2147483647-1 1 3.以下temp變量最終取值是什么? long temp =(int)3.9; temp %= 2; 答:取值為1。 4.以下代碼能否編譯通過?假如能編譯通過,運行時將得到什么打印結果? if(5 & 7 > 0 && 5 | 2)System.out.println(“true”); 答:int型不能作為boolean型出現。 5.以下代碼能否編譯通過?假如編譯通過,運行時將得到什么打印結果? int output=10; boolean b1 = false; if((b1==true)&&((output+=10)==20)){ System.out.println(“We are equal”+output);} else { System.out.println(“Not equal!”+output);} 答:Not equal!10 6.以下代碼能否編譯通過?假如能編譯通過,運行時將得到什么打印結果? int output=10; boolean b1 = false; if((b1==true)&((output+=10)==20)){ System.out.println(“We are equal”+output);} else { System.out.println(“Not equal!”+output);} 答:Not equal!20 7.對于以下聲明: String s1=new String(“Hello”); String s2=new String(“there”); String s3=new String(); 下面哪些是合法的操作? (a) s3=s1+s2; (b) s3=s1-s2; (c) s3=s1&s2; (d) s3=s1&&s2; 答:(a)是合法操作。除了“+”能用于字符串的連接以外,其他操作符(如“-”、“&”、“&&”等)都不支持String類型的操作元。 第五章 流程控制 1.運行以下代碼,將得到什么打印結果? int i = 3; int j = 0; double k = 3.2; if(i < k) if(i == j) System.out.println(i); else System.out.println(j); else System.out.println(k); 答:0 2.以下代碼能否編譯通過?假如能編譯通過,運行時將得到什么打印結果? int i = 4; switch(i){ default: System.out.println(“default”); case 0: System.out.println(“zero”); break; case 1: System.out.println(“one”); case 2: System.out.println(“two”);} 答:可以編譯通過,打印結果是: default zero 分析:default可以放在任何位置上,一旦符合一個case即從頭執行到尾,不再判斷case。 3.以下哪些是合法的 (a) int i;for(i=5, int j=10;i<10;j--){} (b) int i,j;for(i=0, j=10;i<10, j>0;i++, j--){} (c) int i,k;for(i=0, k=9;(i<10 && k>0);i++, k--){} (d) int i,j;for(i=0;j=10;i<10;i++,j--){} 答:(a)for語句中int定義要放在開頭。編譯不通過。 (b)循環判斷語句不可以用逗號連接。編譯不通過。 (c)合法。 (d)分號只能有2個。 4.運行以下代碼,將得到什么打印結果? int i = 1; switch(i){ default: System.out.println(“default”); case 0: System.out.println(“zero”); break; case 1: System.out.println(“one”); case 2: System.out.println(“two”);} 答:分析同1,運行結果如下: one two 5.以下哪些代碼合法? (a) float x=1; switch(x){ case 1; System.out.println(“Got a 1”); } (b) long x=1; switch(x){ case 1; System.out.println(“Got a 1”); } (c) byte x=1; switch(x){ case 1/1; System.out.println(“Got a 1”); } (d) int x=1; int c=1; switch(c){ case x; System.out.println(“Got a 1”);} (e) short x=1; switch(x){ case 3.2/2; System.out.println(“Got a 1”); } (f) short x=1; switch(x){ case 1,2,3; System.out.println(“Got a 1”); } 答:只有(c)是合法的。 6.以下代碼能否編譯通過?假如能編譯通過,運行時將得到什么打印結果? for(int a=0, b=0;a<2;b=++a, System.out.println(“b=”+b)){ System.out.println(“a=”+a);} 答:可以通過編譯,打印結果: a=0 b=1 a=1 b=2 7.以下代碼能否編譯通過?假如能編譯通過,運行時將得到什么打印結果? int x=0;one: while(x<10) { two: System.out.println(++x); if(x>3) break two; } 答:不能通過編譯。 第一章初識Java 1.程序是為了讓計算機執行某些操作或解決某個問題而編寫的一系列有序指令的集合。 2.Java包括編程語言和相關的技術。 3.Java主要用于開發,桌面應用程序和Internet應用程序。4.開發一個Java應用程序的基本步驟:編寫源程序,編譯程序和運行程序。源程序以.java為擴展名,編譯后生成的文件以.class為擴展名。使用javac命令可以編譯.java文件,使用java命令可以運行編譯后生成的.class文件。 5.編寫Java程序要符合Java編碼規范,為程序編寫注釋可大大增加程序的閱讀性。 6.MyEcplise是一個功能強大的集成開發環境(IDE)。它的各種窗口便于Java程序的開發,調試和管理。 第二章變量、數據類型和運算符 1.變量是一個數據存儲空間的表示,它是存儲數據的基本單元。變量的命名規則: (1)必須以字母,“_”,“$”開頭。(2)可以包括數字,但不能以數字開頭(3)不能包括除“_”,“$”以外的特殊符號(4)不能使用Java語言關鍵字或者保留字(goto) 2.Java中數據類型分為基本數據類型和引用數據類型,基本數據類型有整型(int),雙精度浮點型(double),字符型(char)和字符串(String)。3.變量要先聲明并賦值,才能使用。4.Java提供各種類型的運算符,具體如下。 (1)賦值運算(=)(2)算術運算符(+,-,*,/,%)(3)關系運算符(>,>=,<,<=,==,!=)(4)條件運算符(條件?表達式1:表達式2)(5)邏輯運算符(&& , || ,!, & , |)&&(短路與)與&的區別:&&進行判斷時,當第一個條件為假,則不需要判斷第二個條件,結果為假。&進行判斷時,即使第一個條件為假時,也需要判斷完第二個條件才能給出結果為假。||(短路或)與|的區別:與上同理(5)位運算符(&, | , << , >> , >>>)5.數據類型轉換是為了方便不同類型的數據之間進行運算 6.數據類型轉換包括了自動類型轉換和強制類型轉換,自動類型轉換需要滿足類型兼容且目標類型大于源類型的條件 7.Java中使用boolean類型表示真假,boolean類型的兩個值為true和false。 8.Java中的關系運算符可以用于來比較大小,高低,多少等,比較厚的結果是boolean類型。 9.Java提供Scanner類,可以實現從控制臺獲取鍵盤上輸入的信息 第三章選擇結構(一)Java中的if選擇結構,包括以下形式 (1)基本的if選擇結構:可以處理單一或組合條件的情況(2)if-else選擇結構:可以處理簡單的條件分支情況(3)多重if選擇結構:可以處理連續區間的條件分支情況(4)嵌套if選擇結構:可以處理復雜的條件分支情況 第四章選擇結構(二)1.switch選擇結構適用于進行等值判斷 2.switch關鍵字后面小括號里表達式的值可以是int , short , byte , char , 枚舉 , String(JDK1.7開始支持) 第五章循環結構(一)1.循環結構由循環結構和循環操作構成,只要滿足循環條件,循環操作就會反復執行 2.使用循環結構解決問題問題的步驟:分析循環條件和循環操作,套用循環結構的語法寫出代碼,檢查循環能否退出 3.while循環結構是先判斷后執行,do-while是先執行,后判斷。Do-while至少執行一次。 4.debug調試:設置斷點,單步運行,觀察變量 第六章循環結構(二)1.for循環結構的語法結構如下 for(表達式1:表達式2:表達式3){ } //循環體 表達式1:循環結構的初始部分,為循環變量賦初值 表達式2:循環結構的循環條件 表達式3:循環條件的迭代部分,通常用來修改循環變量的值 2.用break和continue語句控制流程 (1)break語句用于終止某個循環,程序跳轉到循環體外的下一條語句。Break也可以在switch語句中使用 (2)continue語句用于跳出本次循環,進入下一次循環 (3)return可以結束當前方法的執行并退出,返回調用該方法的語句處 第七章數組 1.數組是可以在內存中連續存儲多個元素的結構,數組中的所有元素必須屬于相同的數據類型 2.數組中的元素通過數組的下標進行訪問,數組的下標從0開始 3數組可用一個循環為元素賦值,或用一個循環輸出數組中的元素信息 4.通過數組名.length可獲得數組長度 5.利用Arrays.提供的sort()方法可以方便的對數組中的元素進行排序 6.二維數組實際上就是一個一維數組,他的每個元素又是一個一維數組。 第八章循環結構進階 1.數組的輸入排序,選擇排序,冒泡排序 2.在二重循環中可以使用break、continue語句控制程序的執行 選擇排序: 思路:每次循環得到最小值的下標,然后交換數據。如果交換的位置等于原來的位置,則不交換。插入排序: 思路:將數據插入到已排序的數組中。 第一章:抽象和封裝 1,為什么使用面向對象 1.1:萬事萬物皆對象,面向對象就是采用“現實模擬”的方法設計和開發程序。 2,使用面向對象進行設計 2.1:面向對象設計三部曲 1,發現類。 2,發現類的屬性。 3,發現類的方法。 經驗:在需求中找出名詞的方式確定類和屬性,找出動詞的方式確定方法。 3,創建類的對象 1,通過構造方法來創建對象 2,通過對象名.屬性名的方式調用屬性。 3,通過對象名.方法名的方式調用方法。 4,Static可以用來修飾屬性,方法和代碼塊。Static修飾的變 量屬于這個類所有。即由這個類創建的所有對象共有同一個static變量。類屬性,類方法可以通過類名和對象名訪問,勢力屬性,實例方法只能通過對象名訪問。 5,在方法里不可以定義static變量,類變量不能是局部變量。6,構造函數的重載 1,構造方法的名字和類名相同,沒有返回值類型。構造 方法的作用主要就是在創建對象是執行一些初始化操作,賦值。 2,在沒有給類提供任何構造方法時,系統會提供一個無 參的方法體為空的默認構造方法。一旦提供了自定義構造方法,系統將不會提供這個默認構造方法,如果要使用她,必須手動添加。 3,如果同一個類中包含了兩個或兩個以上方法,它們的方法名相同,方法參數個數或參數類型不同,則稱該方法被重載。成員方法和構造方法都可以重載。 4,構造方法沒有返回值類型。如果有,就不是構造方法,而是構造方法同名的成員方法。 5,封裝 1,封裝是類的三大特性之一,就是將類的狀態信息隱 藏在內部。 2,封裝的具體步驟:為每個屬性創建一對一賦值,在賦值方法中,加入對屬性的存取控制語句。 3,隱藏類的實現細節,讓使用者只能通過程序員規定的方法來訪問數據,可以方便地加入存取控制語句,限制不合理操作。第三篇:Java面向對象編程習題總結
第四篇:Java編程語言基礎總結
第五篇:使用java實現面向對象編程總結