131、j2ee中的應用服務器有哪些?(ACD)
A. Weblogic
B. Tomcat
C. JBoss
D. WebSphere
E. IIS
EJB是sun的服務器端組件模型,最大的用處是部署分布式應用程序當然,還有許多方式可以實現分布式應用,類似微軟的.net技術。
憑借 java 跨平臺的優勢,用EJB 技術部署的分布式系統可以不限于特定的平臺。EJB(EnterpriseJavaBean)是J2EE的一部分,定義了一個用于開發基于組件的企業多重應用程序的標準。其特點包括網絡服務支持和核心開發工具(SDK)。
在J2EE里,Enterprise Java Beans(EJB)稱為Java企業Bean,是Java 的核心代碼,分別是會話 Bean(Session Bean),實體 Bean(Entity Bean)和消息驅動 Bean(MessageDriven Bean)。
簡單來講:比如做一個工程就和蓋房子,如果,你會 java,那么你就擁有了基本的技能,一步一步累磚,總能把房子蓋好但是EJB就是一個框架,蓋房子的時候,先有這個框架,然后你根據這個框架去累磚,房子就會蓋的又快又好。java是基礎,EJB 是在java上發展出來的模型,框架。
服務器集群就是指將很多服務器集中起來一起進行同一種服務,在客戶端看來就象是只有一個服務器。集群可以利用多個計算機進行并行計算從而獲得很高的計算速度,也可以用多個計算機做備份,從而使得任何一個機器壞了整個系統還是能正常運行。一旦在服務器上安裝并運行了群集服務,該服務器即可加入群集。群集化操作可以減少單點故障數量,并且實現了群集化資源的高可用性。
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("c");
System.out.println("沒有去重前的數據為>>>" + list.toString());
for (int i = 0; i < list.size() - 1; i++) {
for (int j = list.size() - 1; j > i; j--) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
System.out.println("去重后的數據為>>>" + list.toString());
}
}
135、利用 java 面向對象的思路設計正方形、長方形、圓的計算面積的類圓:
class MianJi {
float r;
float pai = (float) 3.14;
void gongShi() {
Float s = pai * r * r;
System.out.println("圓的面積為" + s);
}
void zhengFangXing(float bianChang) {
System.out.println("正方形的面積為" + bianChang * bianChang);
}
void changFangXing(float chang, float kuan) {
System.out.println("長方形的面積為" + chang * kuan);
}
public static void main(String[] arg) {
MianJi c = new MianJi();
System.out.println("請輸入圓的半徑:");
Scanner sc = new Scanner(System.in);
c.r = sc.nextFloat();
c.gongShi();
System.out.println("請輸入正方形的邊長:");
float bian = sc.nextFloat();
c.zhengFangXing(bian);
System.out.println("請輸入長方形的長和寬:");
float chang = sc.nextFloat();
float kuan = sc.nextFloat();
c.changFangXing(chang, kuan);
}
}
136、任何>=6的偶數都可以分解為兩個質數之和,從鍵盤輸入一個偶數,輸出其分解的質數
public class Test {
public static void main(String[] args) {
int num = inPut();
outPut(num);
}
public static int inPut() {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入大于 6 的偶數:");
int num = sc.nextInt();
if (num % 2 != 0 || num <= 6) {
System.out.println("輸入錯誤,請重新輸入大于 6 的偶數:");
return inPut();
}
return num;
}
public static boolean isPrim(int num) {
for (int i = 2; i <= Math.sqrt((double) num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
public static void outPut(int num) {
for (int i = 2; i <= num / 2; i++) {
if (isPrim(i) == true && isPrim(num - i) == true) {
System.out.println(i + " " + (num - i));
}
}
}
}
137、什么叫對象?什么叫類?什么是面向對象(OOP)?
類的概念:類是具有相同屬性和行為的一組對象的集合。它為屬于該類的所有對象提供了統一的抽象描述,其內部包括屬性和行為兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名并包括屬性說明和服務說明兩個主要部分。
對象的概念:對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。從更抽象的角度來說,對象是問題域或實現域中某些事物的一個抽象,它反映該事物在系統中需要保存的信息和發揮的作用;它是一組屬性和有權對這些屬性進行操作的一組服務的封裝體。客觀世界是由對象和對象之間的聯系組成的。
類與對象的關系就如模具和鑄件的關系,類的實例化結果就是對象,而對一類對象的抽象就是類。類描述了一組有相同特性(屬性)和相同行為(方法)的對象。
上面大概就是它們的定義吧,也許你是剛接觸面象對象的朋友,不要被概念的東西搞暈了, 給你舉個列子吧,如果你去中關村想買幾臺組裝的PC機,到了那里你第一步要干什么,是不是裝機的工程師和你坐在一起,按你提供的信息和你一起完成一個裝機的配置單呀,這個配置單就可以想像成是類,它就是一張紙,但是它上面記錄了你要買的PC機的信息,如果用這個配置單買10臺機器,那么這10臺機子,都是按這個配置單組成的,所以說這10臺機子是一個類型的,也可以說是一類的。那么什么是對象呢,類的實例化結果就是對象,用這個配置單配置出來(實例化出來)的機子就是對象,是我們可以操作的實體,10 臺機子,10 個對象。每臺機子都是獨立的,只能說明他們是同一類的,對其中一個機(對象)做任何動作都不會影響其它9臺機器,但是我對類修改,也就是在這個配置單上加一個或少一個配件,那么裝出來的9個機子都改變了,這是類和對象的關系(類的實例化結果就是對象)
● 修飾類
當用final修飾一個類時,表明這個類不能被繼承。也就是說,如果一個類你永遠不會讓他被繼承,就可以用final進行修飾。final類中的成員變量可以根據需要設為final,但是要注意 final 類中的所有成員方法都會被隱式地指定為final 方法。在使用 final 修飾類的時候,要注意謹慎選擇,除非這個類真的在以后不會用來繼承或者出于安全的考慮,盡量不要將類設計為 final類。
● 修飾方法
被final修飾的方法將不能被子類覆蓋,主要用于:
把方法鎖定,以防任何繼承類修改它的含義。
在早期的Java實現版本中,會將final方法轉為內嵌調用,所以效率能夠提升。
● 修飾變量
對于一個final變量,如果是基本數據類型的變量,則其數值一旦在初始化之后便不能更改;如果是引用類型的變量,則在對其初始化之后便不能再讓其指向另一個對象。當用 final 作用于類的成員變量時,成員變量(注意是類的成員變量,局部變量只需要保證在使用之前被初始化賦值即可)必須在定義時或者構造器中進行初始化賦值,而且final變量一旦被初始化賦值之后,就不能再被賦值了。
● java.lang.*
提供利用Java編程語言進行程序設計的基礎類。最重要的類是Object(它是類層次結構的根)和Class(它的實例表示正在運行的應用程序中的類)。
● java.util.*
包含集合框架、遺留的Collection類、事件模型、日期和時間設施、國際化和各種實用工具類(字符串標記生成器、隨機數生成器和位數組、日期 Date 類、堆棧 Stack 類、向量 Vector 類等)。集合類、時間處理模式、日期時間工具等各類常用工具包。
● java.io.*
Java 的核心庫java.io提供了全面的IO接口。包括:文件讀寫、標準設備輸出等。Java 中 IO是以流為基礎進行輸入輸出的,所有數據被串行化寫入輸出流,或者從輸入流讀入。
● java.net.*
并非所有系統都支持 IPv6 協議,而當 Java 網絡連接堆棧嘗試檢測它并在可用時透明地使用它時,還可以利用系統屬性禁用它。在IPv6不可用或被顯式禁用的情況下,Inet6Address 對大多數網絡連接操作都不再是有效參數。雖然可以保證在查找主機名時 java.net.InetAddress.getByName之類的方法不返回Inet6Address,但仍然可能通過傳遞字面值來創建此類對象。在此情況下,大多數方法在使用 Inet6Address 調用時都將拋出異常。
● java.sql.*
提供使用JavaTM編程語言訪問并處理存儲在數據源(通常是一個關系數據庫)中的數據的API。此API包括一個框架,憑借此框架可以動態地安裝不同驅動程序來訪問不同數據源。
重載需要滿足的條件:在同一類中定義的方法,方法名必須相同,參數一定不同。
發生覆蓋的條件:“三同一不低”,子類和父類的方法名稱,參數列表,返回類型必須完全相同,而且子類方法的訪問修飾符的權限不能比父類低。子類方法不能拋出比父類方法更多的異常。即子類方法所拋出的異常必須和父類方法所拋出的異常一致,或者是其子類,或者什么也不拋出;被覆蓋的方法不能是final類型的。因為final修飾的方法是無法覆蓋的。被覆蓋的方法不能為private。否則在其子類中只是新定義了一個方法,并沒有對其進行覆蓋。被覆蓋的方法不能為static。所以如果父類中的方法為靜態的,而子類中的方法不是靜態的,但是兩個方法除了這一點外其他都滿足覆蓋條件,那么會發生編譯錯誤。反之亦然。即使父類和子類中的方法都是靜態的,并且滿足覆蓋條件,但是仍然不會發生覆蓋,因為靜態方法是在編譯的時候把靜態方法和類的引用類型進行匹配。
重寫規則:重寫方法不能比被重寫方法限制有更嚴格的訪問級別。(但是可以更廣泛,比如父類方法是包訪問權限,子類的重寫方法是public訪問權限)。比如:Object類有個toString()方法,開始重寫這個方法的時候我們總容易忘記public修飾符,編譯器當然不會放過任何教訓我們的機會。出錯的原因就是:沒有加任何訪問修飾符的方法具有包訪問權限,包訪問權限比 public當然要嚴格了,所以編譯器會報錯的。參數列表必須與被重寫方法相同。重寫有個孿生的弟弟叫重載,也就是后面要出場的。如果子類方法的參數與父類對應的方法不同,那么就是你認錯人了,那是重載,不是重寫。返回類型必須與被重寫方法的返回類型相同。
父類方法A:void eat(){}子類方法B:int eat(){}兩者雖然參數相同,可是返回類型不同,所以不是重寫。
父類方法A:int eat(){} 子類方法 B:long eat(){} 返回類型雖然兼容父類,但是不同就是不同,所以不是重寫。???????