1.下列不屬於面向對象編程的特性的是( C )。
A.封裝 B.繼承
C.抽象 D.多態
2.(*)下述概念中不屬於面向對象的是( D )。
A.對象 B.繼承、多態
C.類、封裝 D.過程調用
3.(*)對象是Java中很重要的概念,下列說法中能准確地描述對象的是( A )。
A.對象是類的具體實例,可以操作數據的方法
B.對象是抽象的,類可以通過對象來生成
C.對象只是方法的集合
D.對象是一組具有共同的結構和行為的類
4.(*)下面有關變量及其作用域的陳述哪一項是錯誤的?(D)
A.在方法里面定義的局部變量在方法退出的時候被撤銷
B.局部變量只在定義它的方法內有效
C.在方法外面定義的實例變量在對象被構造時創建
D.在方法中定義的方法的參變量只要該對象被需要就一直存在
5.下列方法的聲明中不合法的是(B )。
A.float play(){ return 1; }
B.void play(int d,e) { }
C.double play(int d) { return 2.0; }
D.int play(int r) { return 1; }
6.下列哪個方法不能與方法public void add(int a){ }重載?(A )
A.public int add(int b) { }
B.public void add(double b) { }
C.public void add(int a, int b) { }
D.public void add(float g) { }
7.類Test定義如下:
1.public class Test {
2. float use(float a, float b) {
3. }
4.
5.}
將以下哪種方法插入第4行是不合法的?( B )
A.float use(float a, float b, float c) { }
B.float use(float c, float d) { }
C.int use(int a,int b) { }
D.float use(int a, int b, int c) { }
8.為了區分重載多態中同名的不同方法,要求( A )。
A.采用不同的參數列表
B.返回值類型不同
C.調用時用類名或對象名做前綴
D.參數名不同
9.下列有關構造方法描述正確的是( D)。
A.所有類都必須定義一個構造方法
B.構造方法必須有返回值
C.構造方法必須訪問類的非靜態成員
D.構造方法可以初始化類的成員變量
10.下列關於構造方法的敘述中,錯誤的是(C )。
A.構造方法名與類名必須相同
B.構造方法沒有返回值,但不用void聲明
C.構造方法不可以重載
D.構造方法只能通過new自動調用
11.設A為已定義的類名,下列聲明對象a的語句中正確的是(C)。
A.public A a =new A( );
B.A a = A( );
C.A a = new A();
D.a A;
12.給出如下類定義:
public class Test {
Test(int i) {
}
}
如果要創建一個該類的對象,正確的語句是( B )。
A.Test t = newTest();
B.Test t = newTest(5);
C.Test t = newTest("5");
D.Test t = newTest(3.4);
13.以下代碼的調試結果為(C )。
class Square {
int a;
void Square() {
a = 10;
}
public static void main(String[] args) {
Square s = new Square();
System.out.println(s.a);
}
}
A.輸出10 B.編譯錯誤
C.輸出0 D.運行錯誤
14.下面程序的輸出結果是(A )。
class Test {
int i = 2;
String s = null;
void Test() {
i = 3;
s = "days";
}
public static void main(String args[]) {
Test t = new Test();
System.out.println(t.i + t.s);
}
}
A.2null B.3null
C.3days D.以上都不對
15.編譯並運行下面的Java程序,將產生什么結果?(D )
class A {
int i = 1;
int j;
public static void main(String[] args) {
int k;
A a = new A();
System.out.println(a.i + a.j + k);
}
}
A.0 B.1
C.2 D.出現編譯錯誤
16.如下代碼的輸出結果是( C )。
public class Test {
void printValue(int m) {
do {
System.out.println("The value is " + m);
} while (--m > 10);
}
public static void main(String arg[]) {
int i = 10;
Test t = new Test();
t.printValue(i);
}
}
A.The value is8 B.Thevalue is 9
C.The value is10 D.Thevalue is 11
17.如下代碼的輸出結果是( D )。
class Point {
int x, y;
Point(int a, int b) {
x = a;
y = b;
}
}
class Test {
public static void main(String[] args) {
Point p1, p2;
p1 = new Point(3, 6);
p2 = new Point(8, 9);
p1 = p2;
System.out.println("p1.x= " + p1.x + ", p1.y = " + p1.y);
}
}
A.p1.x = 3, p1.y = 6 B.p1.x = 3, p1.y= 9
C.p1.x = 8, p1.y = 6 D.p1.x = 8, p1.y= 9
二、簡答題
1.簡述面向對象編程的三個主要特征。
封裝:客觀事物封裝成抽象的類
繼承:子類繼承父類的所有特征和行為
多態:父類引用變量可以指向子類對象
2.什么是方法的重載?
在同一個類中定義多個同名的方法,
方法名一樣,參數類型或者個數不一樣
3.簡述成員變量和局部變量的區別?
成員變量:作為類的成員直接存在類中,可以通過this引用
局部變量:在方法定義或聲明上
內存位置不同:成員變量在堆,局部變量在棧
成員變量有默認值初始化
局部變量沒有,必須定義賦值才能用
4.在寫好java文件后,編譯時會編譯java文件中的注釋代碼嗎?
不會 只識別代碼
5.什么是方法的重寫?
子類繼承父類方法,方法名一樣,參數列表一樣
而且只能重寫父類非私有的方法
三、編程題
1.定義立方體類Cube,具有屬性邊長和顏色,具有方法設置顏色和計算體積,在該類的主方法中創建一個立方體對象,將該對象的邊長設置為3,顏色設置為“green”,輸出該立方體的體積和顏色。4
public class Cube { static double side; static String color; Cube(double side){ this.side=side; } public static double bulk(){ return side*side*side; } public static void setColor(String c){ color=c; } } public class Test { public static void main(String[] args) { Cube c=new Cube(4); c.setColor("green"); System.out.println("立方體的體積為:"+c.bulk()); System.out.println(" 顏色為:"+c.color); } }
2.編寫Java應用程序,該程序中有梯形類和主類。要求如下:8
(1)梯形類具有屬性上底、下底、高和面積,具有返回面積的功能,在構造方法中對上底、下底和高進行初始化。
(2)主類用來測試梯形類的功能。
1 public class Ladder { 2 3 double upper; 4 5 double bottom; 6 7 double height; 8 9 double area; 10 11 public Ladder(double upper, double bottom, double height) { 12 13 super(); 14 15 this.upper = upper; 16 17 this.bottom = bottom; 18 19 this.height = height; 20 21 } 22 23 //返回面積 24 25 public double getArea(){ 26 27 area=(upper+bottom)*height/2; 28 29 return area; 30 31 } 32 33 } 34 35 測試類: 36 37 public class Zhu { 38 39 public static void main(String[] args) { 40 41 Ladder lad=new Ladder(2, 5, 9); 42 43 System.out.println("梯形的面積為:"+lad.getArea()); 44 45 } 46 47 }
3.按要求編寫Java應用程序:8
(1)定義描述學生的類Student,有一個構造方法對屬性進行初始化,一個outPut方法用於輸出學生的信息。
(2)定義主類,創建兩個Student類的對象,測試其功能。
1 public class Student { 2 3 String name; 4 5 String sex; 6 7 int age; 8 9 public Student(String name, String sex, int age) { 10 11 super(); 12 13 this.name = name; 14 15 this.sex = sex; 16 17 this.age = age; 18 19 } 20 21 public void outPut(){ 22 23 System.out.println("學生的姓名為:"+this.name+"\t性別為:"+this.sex+"\t年齡為:"+this.age); 24 25 } 26 27 } 28 29 public class TestStu { 30 31 public static void main(String[] args) { 32 33 Student stu=new Student("夏目", "男", 20); 34 35 stu.outPut(); 36 37 Student stu1=new Student("娘口三三", "男", 18); 38 39 stu1.outPut(); 40 41 } 42 43 }
4.(*)定義機動車類,具有屬性:車牌號、車速和載重量,具有功能:加速、減速。一個構造方法沒有形參,在方法中將車牌號設置為“遼A1234”,速度為100,載重量為50;另一個構造方法用形參為對象的所有屬性賦值。5
在主類中創建兩個機動車對象,創建第一個時調用無參數的構造方法,使其加速10。創建第二個時調用有參數的構造方法,使其車牌號為“遼B5678”,車速為80,載重量為20,並讓其減速20。最后輸出兩輛車的所有信息。
1 public class Car { 2 3 String num; 4 5 double speed; 6 7 double weight; 8 9 double speedUp; 10 11 double speedDown; 12 13 Car(){ 14 15 num="遼A1234"; 16 17 speed=100; 18 19 weight=50; 20 21 } 22 23 Car(String n, double s, double w) { 24 25 num=n; 26 27 speed=s; 28 29 weight=w; 30 31 } 32 33 public void speedUp(int s) { 34 35 speed+=s; 36 37 38 39 } 40 41 public void speedDown(int d){ 42 43 speed-=d; 44 45 } 46 47 48 49 } 50 51 52 53 54 55 public class TestCar { 56 57 public static void main(String[] args) { 58 59 Car c=new Car(); 60 61 c.speedUp(10); 62 63 Car c1= new Car("遼B5678",80, 20); 64 65 c1.speedDown(20); 66 67 System.out.println(c.num + "的車速為" +c.speed + ", 載重量為" +c.weight); 68 69 System.out.println(c1.num + "的車速為" +c1.speed + ", 載重量為" +c1.weight); 70 71 } 72 73 }
5.(*)按要求編寫Java應用程序。9
(1)定義Teacher類,具有屬性:教師的姓名、年齡、教授的課程以及是否擔任班主任,方法printInfo輸出教師的姓名、年齡和所教授的課程,構造方法為成員變量賦值。
(2)定義Team類,有屬性:班級名稱和班主任,有一個輸出班級名稱的方法,另一個是構造方法,為成員變量賦值。
(3)定義主類TestTeam,創建一個班級對象,輸出班級名稱和班主任的詳細信息。
public class Teacher { String name; String coures; int age; boolean Tutor; public Teacher(String name, String coures, int age,boolean Tutor) { super(); this.name = name; this.coures = coures; this.age = age; this.Tutor=Tutor; } public void printlnfo(){ System.out.println("老師的姓名為:"+this.name+"\t\t年齡為:"+this.age+"\t教授課程為:"+this.coures); } } public class Team { String classname; Teacher tutor; public Team(String classname, Teacher tutor) { super(); this.classname = classname; this.tutor = tutor; } public void className(){ System.out.println("班級名稱為:"+this.classname); } } public class TestTeam { public static void main(String[] args) { Teacher tea=new Teacher("薛之謙", "音樂", 33, true); Team tea1=new Team("金曲撈", tea); tea1.className(); tea1.getTutor().printlnfo(); } }