1、類Person和類Student的關系是()
class Person {}
class Student extends Person {
public int id; //學號
public int score; //總分
public String name; // 姓名
public int getScore(){return score;}
}
包含關系
繼承關系
關聯關系
無關系,上述類定義有語法錯誤
Java中類之間的六種關系:
第一種:繼承關系,例如:子類繼承父類,子介面繼承父介面,
第二種:實作關系,例如:類實作介面,
第三種:依賴關系,例如:一個類作為另一個類中方法的引數存在,這種關系具有偶然性和臨時性,
第四種:關聯關系,例如:一個類作為另一個類中的成員變數存在,它是一種強依賴關系,
第五種:聚合關系,例如:整體和部分之間,他們是可以分離的擁有各自的生命周期,并且部分是相同的,像鳥群和鳥,
第六種:組合關系,它是一種強聚合,并且整體和部分之間不可分離,具有相同的生命周期,整體包含該部分,也包含其他部分,其他部分和該部分是不相同的,像cpu和計算機,計算機除了包括cpu還有鍵盤和顯示幕等,
B
2、以下關于java封裝的描述中,正確的是:
封裝的主要作用在于對外隱藏內部實作細節,增強程式的安全性
封裝的意義不大,因此在編碼中盡量不要使用
如果子類繼承父類,對于父類中進行封裝的方法,子類仍然可以直接呼叫
只能對一個類中的方法進行封裝,不能對屬性進行封裝
封裝主要是隱藏內部代碼;
繼承主要是復用現有代碼;
多型主要是改寫物件行為,
封裝就是將屬性私有化,提供公有的方法訪問私有屬性,------------------- 所以CD錯誤,
做法就是:修改屬性的可見性來限制對屬性的訪問,并為每個屬性創建一對取值( getter )方法和賦值( setter )方法,用于對這些屬性的訪問,
通過封裝,可以實作對屬性的資料訪問限制,同時增加了程式的可維護性,
由于取值方法和賦值方法隱藏了實作的變更,因此并不會影響讀取或修改該屬性的類,避免了大規模的修改,程式的可維護性增強
A
3、下面關于 new 關鍵字的表述錯誤的是()
new關鍵字在生成一個物件時會為物件開辟記憶體空間
new關鍵字在生成一個物件時會呼叫類的構造方法
new關鍵字在生成一個物件時會將生成的物件的地址回傳
Java中只能通過new關鍵字來生成一個物件
使用new關鍵字來生成物件只是最常用的方式;除此之外,還可以:
1,使用反射創建物件,呼叫java.lang.Class或者java.lang.reflect.Constructor類的new Instance()實體方法;
2,呼叫物件的clone()方法(要拷貝的物件需要實作Cloneable介面,并重寫clone()方法);
3,使用反序列化方式,通過讓類實作Serializable介面,然后使用new ObjectInputStream().readObject()來創建物件D
4、一個類可以有多個不同名的建構式 (不考慮內部類的情況),( )
正確
錯誤
只有與類名相同的方法可以叫建構式
java 建構式,可以被訪問修飾符修飾,而不能被特殊修飾符修飾;(在編譯器經過測驗) 訪問修飾符: public (最常用,其他類的任何位置都可以訪問) protected(能夠在同一包中被子類訪問) 什么都不寫,""(能夠被同一包里的類訪問) private(經常使用的單例模式中) 特殊修飾符: static (靜態) final(最終) abstract(抽象) synchronized(同步) 這些都不能夠放在建構式前使用B
5、在為傳統面向物件語言的程式做單元測驗的時候,經常用到mock物件,Mock物件通過反射數,請問反射最大程度破壞了面向物件的以下哪個特性?
封裝
多型
繼承
抽象
mock物件:也成為偽物件,在測驗中的利用mock物件來代替真實物件,方便測驗的進行,
java的封裝性:指的是將物件的狀態資訊隱藏在物件內部,不允許外部程式直接訪問物件內部資訊,通過該類提供的方法實作對內部資訊的操作訪問,
反射機制:在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個物件,都能夠呼叫它的任意一個方法和屬性
反射可以訪問原類的私有方法,私有成員變數,因此,反射破壞了Java的A
A
6、abstract和final可以同時作為一個類的修飾符,( )
正確
錯誤
abstract修飾的類需要被繼承,而final修飾的類不可被繼承,自相矛盾,
拓展:
一、抽象類的使用原則如下:
(1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實作該方法),預設情況下默認為public;
(2)抽象類不能直接實體化,需要依靠子類采用向上轉型的方式處理;
(3)抽象類必須有子類,使用extends繼承,一個子類只能繼承一個抽象類;
(4)子類(如果不是抽象類)則必須覆寫抽象類之中的全部抽象方法(如果子類沒有實作父類的抽象方法,則必須將子類也定義為為abstract類,二、final關鍵字:
(1)修飾變數 : 變數不可修改;
(1)修飾方法 : 方法不可重寫;
(1)修飾類 :類不可繼承,
7、以下代碼的輸出的正確結果是
public class Test {
public static void main(String args[]) {
String s = "祝你考出好成績!";
System.out.println(s.length());
}
}
-
24
-
16
-
15
-
8
length得到的是字符,不是位元組,
中文和英文一樣的,看作一個字符,
D
8、instanceof運算子能夠用來判斷一個物件是否為:
-
一個類的實體
-
一個實作指定介面的類的實體
-
全部正確
-
一個子類的實體
instanceof是JAVA中的關鍵字,用來判斷一個物件是不是一個類的實體,是不是一個類的子類,是不是一個介面的實作類
C
9、下列程式test 類中的變數c 的最后結果為
public class Test {
public static void main(String args[]) {
int a = 10;
int b;
int c;
if (a > 50) {
b = 9;
}
c = b + a;
}
}
10
0
19
編譯出錯
方法內定義的變數沒有初始值,必須要進行初始化, 類中定義的變數可以不需要賦予初始值,默認初始值為0,
D
10、順序執行下列程式陳述句后,則b的值是()
String a="Hello";
String b=a.substring(0,2);
Hello
Hel
He
null
substring 方法將回傳一個包含從 start 到最后(不包含end)的子字串的字串,
C
11、輸出結果為:
String str = "";
System.out.print(str.split(",").length);
0
1
出現例外
/** * String split 這個方法默認回傳一個陣列, * 如果沒有找到分隔符, * 會把整個字串當成一個長度為1的字串陣列 * 回傳到結果, 所以此處結果就是1
*/ private static void testSpringSpilte(){
String str = "12,3";
String str2 = "123";
System.out.print(str.split(",").length);
System.out.print(str2.split(",").length);
}
}
結果 2 1
B
12、下面欄位宣告中哪一個在interface主體內是合法的? ()
private final static int answer = 42;
public static int answer = 42;
final static answer = 42;
int answer;
在介面中,屬性都是默認public static final修飾的,所以:
A(錯誤):不能用private修飾;
B(正確):在介面中,屬性默認public static final,這三個關鍵字可以省略;
C(錯誤):沒寫屬性的型別;
D(錯誤):final修飾的屬性必須賦值;
介面中的屬性在不提供修飾符修飾的情況下,會自動加上public static final
注意(在1.8的編譯器下可試):
(1)屬性不能用private,protected,default 修飾,因為默認是public
(2)如果屬性是基本資料型別,需要賦初始值,若是參考型別,也需要初始化,因為默認有final修飾,必須賦初始值;
(3)介面中常規的來說不能夠定義方法體,所以無法通過get和set方法獲取屬性值,所以屬性不屬于物件,屬于類(介面),因為默認使用static修飾,
B
13、以下代碼執行的結果顯示是多少()?
public static void main(String[] args) {
int count = 0;
int num = 0;
for (int i = 0; i <= 100; i++){
num = num + i;
count = count++;
}
System.out.println("bcz=" + (num*count));
}
num * count = 505000
num * count = 0
運行時錯誤
num * count = 5050
count=count++就是先把區域變數表中count的值0放入運算元堆疊中,然后直接對區域變數表中的count加1,然后再把運算元堆疊中的0出堆疊賦值給區域變數表中的count,最終區域變數表中的count值仍為0
count = count ++;這個先將count這個值0暫存起來,然后count自加1變成1,最后將暫存的值賦值給count,count最終的值為0
B
14、假定Base b = new Derived(); 呼叫執行b.methodOne()后,輸出結果是什么?
public class Base
{
public void methodOne()
{
System.out.print("A");
methodTwo();
}
public void methodTwo()
{
System.out.print("B");
}
}
public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print("C");
}
public void methodTwo()
{
super.methodTwo();
System.out.print("D");
}
}
向上轉型:父類只能呼叫父類方法或者子類覆寫后的方法,而子類中的單獨方法則是無法呼叫的,
因此:
呼叫的順序是:(1)、(2)、(3)、(4)、(5)、(6)、(7) ; 得到的結果是:ABDC
public class Base
{
public void methodOne() //3
{
System.out.print("A");
methodTwo(); //4 執行到這里的時候呼叫子類的覆寫方法
}
public void methodTwo() //7
{
System.out.print("B");
}
}
public class Derived extends Base
{
public void methodOne() //1
{
super.methodOne();//2
System.out.print("C");
}
public void methodTwo() //執行到這里的時候呼叫子類的覆寫方法 5
{
super.methodTwo(); //6
System.out.print("D");
}
}
15、在Web應用程式中,( )負責將HTTP請求轉換為HttpServletRequest物件
Servlet物件
HTTP服務器
Web容器
JSP網頁
web容器是一種服務程式,在服務器一個埠就有一個提供相應服務的程式,而這個程式就是處理從客戶端發出的請求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是這樣的容器,一個服務器可以多個容器,
Apache就是一個Http服務器,Tomcat是一個web容器,靜態的htmlApache還可以處理,但是動態的需要轉發給Tomcat去處理了,比如jsp頁面,請求先經由Apache轉發給Tomcat再由Tomcat決議請求,所以應該是web容器去決議成request物件,
C
16、在創建派生類物件,建構式的執行順序()
基類建構式,派生類物件成員建構式,派生類本身的建構式
派生類本身的建構式,基類建構式,物件成員建構式
基類建構式,派生類本身的建構式,派生類物件成員建構式
物件成員建構式,基類建構式,派生類本身的建構式
public class ExtendsTest {
public static void main(String[] args) {
C c = new D();
}
}
class C {
static
{
System.out.println("C 基類靜態域 ");
}
{
System.out.println("C 基類物件成員建構式");
}
public C(){
System.out.println("C 基類本身的建構式");
}
}
class D extends C{
static
{
System.out.println("D 派生類靜態域");
}
{
System.out.println("D 派生類物件成員建構式");
}
public D(){
System.out.println("D 派生類本身的建構式");
}
}
運行結果:
C 基類靜態域
D 派生類靜態域
C 基類物件成員建構式
C 基類本身的建構式
D 派生類物件成員建構式
D 派生類本身的建構式
規律就是 父類先于子類 靜態的先于非靜態的
其中靜態域包含靜態代碼塊與靜態方法,這個誰在前面,則先執行誰,
父類靜態域——》子類靜態域——》父類成員初始化——》父類構造塊——》1父類構造方法——》2子類成員初始化——》子類構造塊——》3子類構造方法;
A
17、下面哪些Java中的流物件是位元組流?
FileInputStream
BufferedInputStream
PushbackInputStream
ByteArrayInputStream
ABCD
18、下面有關Java的說法正確的是( )
一個類可以實作多個介面
抽象類必須有抽象方法
protected成員在子類可見性可以修改
通過super可以呼叫父類建構式
final的成員方法實作中只能讀取類的成員變數
String是不可修改的,且java運行環境中對string物件有一個常量池保存
A對:java類單繼承,多實作
B錯:被abstract修飾的類就是抽象類,有沒有抽象方法無所謂
C對:描述有問題,protected成員在子類的可見性,子類(不繼承父類protected成員方法)獲取父類被protected修飾的成員屬性或方法,可見性是不可能變的,因為修飾符protected就是描述可見性的,
這道題應該是要考察子類繼承父類,并重寫父類的protected成員方法,該方法的可見性可以修改,這是對的,因為子類繼承父類的方法,訪問權限可以相同或往大了改
D對,
E錯:final修飾的方法只是不能重寫,static修飾的方法只能訪問類的成員變數
F對,ACDF
19、下面哪些賦值陳述句是正確的()
long test=012
float f=-412
int other =(int)true
double d=0x12345678
byte b=128
選ABD
A和B中long和float,正常定義需要加l和f,但是long和float屬于基本型別,會進行轉化,所以不會報出例外,AB正確
boolean型別不能和任何型別進行轉換,會報出型別例外錯誤,所以C錯,
D選項可以這樣定義,D正確,
E選項中,byte的取值范圍是-128—127,報出例外: cannot convert from int to byte.所以E選項錯誤,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/400536.html
標籤:java



