久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

JAVA編程習題1(五篇范文)

時間:2019-05-12 11:25:36下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《JAVA編程習題1》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《JAVA編程習題1》。

第一篇:JAVA編程習題1

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

JAVA編程習題1

4.test10097求兩個數的和

/*輸入n表示做n次下面的操作: 輸入兩個正整數,輸出它們的和.例: 輸入:

//表示n=2,做兩次操作 10 11 20 30 輸出: sum=21 sum=50 */

5.test20001求兩個數的和與差

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

/*程序填空,不要改變與輸入輸出有關的語句。輸入整數a和b,計算并輸出a、b的和與差。例: 輸入 2-8 輸出 The sum is-6 The difference is 10*/

6.test20002求平方根

//程序填空,不要改變與輸入輸出有關的語句。輸入1個實數x,計算并輸出其平方根。例: 輸入 1.21 輸出

The square root of 1.21 is 1.1

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

7.test20003華氏溫度轉換成攝氏溫度

/*程序填空,不要改變與輸入輸出有關的語句。

輸入華氏溫度f,計算并輸出相應的攝氏溫度c。c = 5/9(f-32).例:括號內是說明 輸入

17.2(華氏溫度)輸出

The temprature is-8.****/

8.test20004計算旅途時間

程序填空,不要改變與輸入輸出有關的語句。

輸入2個整數time1和time2,表示火車的出發時間和到達時間,計算并輸出旅途時間。

有效的時間范圍是0000到2359,不需要考慮出發時間晚于到達時間的情況。

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

例:括號內是說明 輸入

712 1411(出發時間是7:10,到達時間是14:11)輸出

The train journey time is 6 hrs 59 mins.9.test20005數字加密

程序填空,不要改變與輸入輸出有關的語句。輸入1個四位數,將其加密后輸出。方法是將該數每一位上的數字加9,然后除以10取余,做為該位上的新數字,最后將第1位和第3位上的數字互換,第2位和第4位上的數字互換,組成加密后的新數。例:括號內是說明 輸入 1257 輸出

The encrypted number is 4601(每一位上的數字加9除以10取余后,得0146,交換后得到4601)

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

10.test20006大小寫字母轉換

程序填空,不要改變與輸入輸出有關的語句。輸入一個大寫英文字母,輸出相應的小寫字母。例: 輸入 G 輸出 g

import java.io.*;public class T20006 {

public static void main(String[] args)throws IOException

{

char ch;

ch=(char)System.in.read();

/*------------------*/

ch=(char)(ch+32);

// 以ASCII碼計算

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

}

System.out.println(ch);

} 11.Test20007計算三門課程的平均成績

程序填空,不要改變與輸入輸出有關的語句。

已知某位學生的數學、英語和計算機課程的成績分別是87分、72分和93分,求該生3門課程的平均分。本題無輸入。輸出示例:

math = 87, eng = 72, comp = 93 average = 84

12.test20008計算存款利息

程序填空,不要改變與輸入輸出有關的語句。輸入存款金額 money、存期 year 和年利率 rate,精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

根據下列公式計算存款到期時的利息 interest(稅前),輸出時保留2位小數。

interest = money(1+rate)^year10 / 2 =

(數字與運算符之間有一空格)輸出 5 10 */ /*補充知識:in.next()與in.nextline()的區別

in.next只接受一個字,不能接受一個帶有空格的字符串,如下: 例如輸入: Show me--(回車)用next()只能得到Show,因為遇到空格表示結束,但是nextline()則要遇到回車才知道結束.可以看一個例子,演示給大家看,如下:----------

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

import java.util.Scanner;public class Test60011{

public static void main(String []args)

{

String s1_1,s1_2,s2;

Scanner in=new Scanner(System.in);

s1_1=in.next();

System.out.println(s1_1);

System.out.println(“----------”);

in.nextLine();// 把剩余的吃掉

s2=in.nextLine();

System.out.println(s2);

System.out.println(“----------”);

s1_1=in.next();

s1_2=in.next();

System.out.println(s1_1+“

”+s1_2);

} }------------*/

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

39.求1+1/2!+……1/N!//求1+1/2!+1/3!+....(用方法求n!)

40.求a+aa+aaa+……(用方法)//求a+aa+aaa+aa…a

41.統計一個整數中數字的個數

/*程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

(repeat=3)-21902 2

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

345543 輸出:

count=2

(-21902中有2個2)count=1

(有1個2)count=0

(345543中沒有2)*/

42.判斷素數(用方法)

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

NO

(1不是素數)

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

YES

(2是素數)NO

(9不是素數)YES

(17是素數)

43.統計素數并求和

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

(素數就是只能被1和自身整除的正整數,1不是素數,2是素數)。要求定義并調用函數prime(m)判斷m是否為素數。例:括號內是說明 輸入:

(repeat=3)1 10

(m=1, n=10)20 35(m=20, n=35)14 16(m=14, n=16)輸出:

count=4, sum=17

(1到10之間有4個素數:2,3,5,7)count=3, sum=83

(20到35之間有3個素數:23, 29, 31)count=0, sum=0

(14到16之間沒有素數)

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

44.輸出Fibonacci序列

/*程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

Fibonacci 序列(第1項起):1 1 2 3 5 8 13 21......要求定義并調用函數fib(n),它的功能是返回第n項Fibonacci數。例如,fib(7)的返回值是13。輸出語句:System.out.print(f+“ ”);

例:括號內是說明 輸入:

(repeat=3)1 10

(m=1, n=10)20 100(m=20, n=100)1000 6000(m=1000, n=6000)輸出: 1 2 3 5 8

(1到10之間的Fibonacci數)21 34 55 89

(20到100之間的Fibonacci數)

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

1597 2584 4181

(1000到6000之間的Fibonacci數)*/

45.求完數

/*輸入2 個正整數m和n(1<=m,n<=1000),輸出m 到n之間的所有完數

(完數就是因子和與它本身相等的數)。

要求定義并調用函數factorsum(number),它的功能是返回number的因子和。

例如,factorsum(12)的返回值是16(1+2+3+4+6)。輸出語句:System.out.print(i+“ ”);例:括號內是說明 輸入: 2

(repeat=2)20 500(m=100, n=400)1 100

(m=1, n=100)輸出: 28 496 1 6 288*/

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

46.求各位數字的立方和等于它本身的數 程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

輸出語句:System.out.print(i+“ ”);例:括號內是說明 輸入: 2

(repeat=2)100 400(m=100, n=400)1 100

(m=1, n=100)輸出:

153 370 371(1*1*1+5*5*5+3*3*3=153;3*3*3+7*7*7=370;3*3*3+7*7*7+1*1*1=371)1

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

47.將一個整數逆序輸出

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

要求定義并調用函數reverse(number),它的功能是返回number的逆序數。

例如reverse(12345)的返回值是54321。例:括號內是說明 輸入

(repeat=4)123456-100-2 99 輸出 654321-1-2 99

48。十進制轉換二進制

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數 repeat(0

要求定義并調用函數 dectobin(n),它的功能是輸出 n 的二進制。例如,調用dectobin(10),輸出1010。

輸出語句:System.out.print(t);

//t為某位二進制數 例:括號內是說明 輸入: 3

(repeat=3)15 100 0 輸出: 1111 1100100 0

49。求平均值

程序填空,不要改變與輸入輸出有關的語句。

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

輸入一個正整數repeat(0

(repeat=2)3 1 2-6 5 12 2 5 4 0 輸出 aver=-1.0 aver=4.6

50。求最大值及其下標

/*輸入一個正整數n(1

(設最大值惟一,下標從0開始)。例:括號內是說明 輸入

(repeat=3)3 1 6 4 3 10 8 1 5 1 2 5 4 0

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

輸出

max=6,index=1

(最大值6的下標是1)max=10,index=0

(最大值10的下標是0)max=5,index=2

(最大值5的下標是2)*/

51。逆序輸出

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

(repeat=2)4 10 8 1 2 5 1 2 5 4 0 輸出 2 1 8 10 0 4 5 2 1

52。交換最小值和最大值

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

最大值與最后一個數交換,然后輸出交換后的n個數。例:括號內是說明 輸入

(repeat=3)5 4 3 5 1 2 4 1 5 6 7 5 5 4 3 2 1 輸出 1 3 2 4 5 1 5 6 7 1 4 3 2 5 53。排序

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

(repeat=3)4 5 1 7 6 3 1 2 3 5 5 4 3 2 1

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

輸出 7 6 5 1 3 2 1 5 4 3 2 1

54。矩陣運算

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

(2+3+4+5+6+7+8=35)

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

55。加法口訣表

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

(repeat=1)3

(n=3)輸出: +

56。判斷上三角函數

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

(上三角矩陣,即主對角線以下的元素都為0, 主對角線為從矩陣的左

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

上角至右下角的連線)例:括號內是說明 輸入:

(repeat=2)3 1 2 3

0 4 5 0 0 6(n=3)2 1 0-8 2

(n=2)輸出: YES NO

57。求矩陣每行元素之和

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

(repeat=1)3 2(m=3, n=2)6 3 1-8

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案 12 輸出: sum of row 0 is 9 sum of row 1 is-7 sum of row 2 is 15

58。找鞍點

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

(repeat=2)4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9(n=4)2 1 7 4 1

(n=2)輸出: a[2][1]=6 NO

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

59。求字符串長度

程序填空,不要改變與輸入輸出有關的語句。連續輸入一批以 # 結束的多串字符。統計并輸出每串字符的長度。輸出使用:System.out.println(len);例:括號內是說明 輸入:

hello 12#abc+0#

(連續輸入2串字符“hello 12”和“abc+0”)輸出:

(“hello 12”的長度是8)5

(“abc+0”的長度是5)

60。統計大寫輔音字母

程序填空,不要改變與輸入輸出有關的語句。輸入一個正整數n(0

輸入一行字符串,統計并輸出字符串中大寫輔音字母的個數(大寫輔音字母:除“A”,“E”,“I”,“O”,“U”以外的大寫字母)。例:括號內是說明 輸入:

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

(輸入3個字符串)HELLO IT12 uieiaba 輸出:

(“HELLO”中有3個大寫輔音字母)1

(“IT12”中有1個大寫輔音字母)

0

(“uieiaba”中沒有大寫輔音字母)

61。查找字符

程序填空,不要改變與輸入輸出有關的語句。

先輸入一個字符ch。然后輸入一個正整數n(0

輸入一行字符串,在字符串中查找該字符(ch),如果找到,則輸出 該字符在字符串中最后出現的位置(從0開始);否則輸出“Not Found”。例:括號內是說明 輸入:

m

(輸入一個字符)3

(要輸入3行字符串)moon

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

programming 1234

輸出:

0

(m在“moon”中最后出現位置是0)7

(m在“programming”中最后出現位置是7)Not Found

(“1234”中沒有m)

62。字符串替換

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

對應字母

A ──→ Z

B ──→ Y

C ──→ X

D ──→ W

……

X ──→ C

Y ──→ B

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

Z ──→ A 例:括號內是說明 輸入:

(輸入3行字符串)A flag of USA IT12 oueiaba 輸出: Z flag of FHZ RG12 oueiaba

63。十六進制轉換十進制

程序填空,不要改變與輸入輸出有關的語句。

輸入一個正整數repeat(0

個新字符串(十六進制形式),然后將其轉換為十進制數后輸出。例:括號內是說明 輸入:

精心收集

精心編輯

精致閱讀

如需請下載!

演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案

(輸入3行字符串)10 Pf4+1-+A

輸出: 16 3905 10

-----------------------

精心收集

精心編輯

精致閱讀

如需請下載!

第二篇:Java面向對象編程習題總結

第一章

面向對象開發方法概述

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編程心得體會

JAVA編程心得

計算機3班

竇金霞

20104773

最近幾周一直在弄程序,說實話真的很累,但累中也有成功的快樂。我覺得學到了很多東西,這是只看課本知識所不能學到的。

說實話,以前我一直沒學過JAVA雖然我也知道JAVA的重要性,可是即使上課聽了,不實踐還是掌握不了。因為種種原因,今年我沒有買筆記本。沒有機器,僅僅靠每周一次的上機練習是絕對不夠的。所以我就插空調程序,在舍友們不用的時候自己再接她們的電腦調。

調上一個WEB版的通訊錄程序時我已經感覺到學的很吃力,好多東西都不懂。這次做的這個學生成績管理系統更復雜了,所以一開始調的時候感覺特別吃力.所以我告訴自己不能放棄,慢慢來,就這樣我從最基本的sql語句session對象開始學起,我覺得我還有太多不懂得所以要比別人付出更多的努力。就這樣我一點一點的學著??

說心里話,在做上一個web版的通訊錄時,我就感覺到成功的喜悅。好多地方我都是一點一點的問的,在問的過程中,我也學會了很多,像:Servlet和jsp之間跳不過去時有兩種解決辦法,一是關閉底層類中的db.close;二是將Servlet中的throws Exception改成try catch以捕捉異常;我還學到了集中查找錯誤的方法,可以加上兩個雙斜杠“//”將具體的方法屏蔽掉,一檢查是方法錯誤還是Servlet錯誤,還有就是寫上System.out.println()將獲得的數據輸出,用來檢查數據傳輸過程有沒有錯誤等等。

雖然在別人看來,這些方法可能都很常規,但是確實我自己學會的,我覺得很有成就感。我已經做好計劃了,暑假的時候去買本本用自己的本本練習一下JAVA,雖然下學期不學JAVA了,但是我對JAVA的熱情不會因為這個而削減的!

做完這個學生成績管理系統后,我覺得我對JAVA的看法已經改變了。一前總以為JAVA很繁瑣很難,聽同學說JAVA不好學,開始又有一些聽不懂,所以一直很畏懼JAVA。但真正做了這個系統以后我才感覺到其實任何事都沒有難與不難之分,只要你肯努力的去做,世上無難事只怕有心人!

我現在對java學習充滿了熱情,我知道我還有很多的不足

還有很多需要努力的地方,所以我的JAVA之旅將繼續進行??

第四篇:Java多線程編程總結

Java多線程編程總結

2007-05-17 11:21:59 標簽:java 多線程

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處、作者信息和本聲明。否則將追究法律責任。http://lavasoft.blog.51cto.com/62575/27069

Java多線程編程總結

下面是Java線程系列博文的一個編目:

Java線程:概念與原理 Java線程:創建與啟動

Java線程:線程棧模型與線程的變量 Java線程:線程狀態的轉換 Java線程:線程的同步與鎖 Java線程:線程的交互 Java線程:線程的調度-休眠 Java線程:線程的調度-優先級 Java線程:線程的調度-讓步 Java線程:線程的調度-合并 Java線程:線程的調度-守護線程 Java線程:線程的同步-同步方法 Java線程:線程的同步-同步塊

Java線程:并發協作-生產者消費者模型 Java線程:并發協作-死鎖 Java線程:volatile關鍵字 Java線程:新特征-線程池

Java線程:新特征-有返回值的線程 Java線程:新特征-鎖(上)Java線程:新特征-鎖(下)Java線程:新特征-信號量 Java線程:新特征-阻塞隊列 Java線程:新特征-阻塞棧 Java線程:新特征-條件變量 Java線程:新特征-原子量 Java線程:新特征-障礙器 Java線程:大總結

----

下面的內容是很早之前寫的,內容不夠充實,而且是基于Java1.4的內容,Java5之后,線程并發部分擴展了相當多的內容,因此建議大家看上面的系列文章的內容,與時俱進,跟上Java發展的步伐。----

一、認識多任務、多進程、單線程、多線程 要認識多線程就要從操作系統的原理說起。

以前古老的DOS操作系統(V 6.22)是單任務的,還沒有線程的概念,系統在每次只能做一件事情。比如你在copy東西的時候不能rename文件名。為了提高系統的利用效率,采用批處理來批量執行任務。

現在的操作系統都是多任務操作系統,每個運行的任務就是操作系統所做的一件事情,比如你在聽歌的同時還在用MSN和好友聊天。聽歌和聊天就是兩個任務,這個兩個任務是“同時”進行的。一個任務一般對應一個進程,也可能包含好幾個進程。比如運行的MSN就對應一個MSN的進程,如果你用的是windows系統,你就可以在任務管理器中看到操作系統正在運行的進程信息。

一般來說,當運行一個應用程序的時候,就啟動了一個進程,當然有些會啟動多個進程。啟動進程的時候,操作系統會為進程分配資源,其中最主要的資源是內存空間,因為程序是在內存中運行的。在進程中,有些程序流程塊是可以亂序執行的,并且這個代碼塊可以同時被多次執行。實際上,這樣的代碼塊就是線程體。線程是進程中亂序執行的代碼流程。當多個線程同時運行的時候,這樣的執行模式成為并發執行。

多線程的目的是為了最大限度的利用CPU資源。

Java編寫程序都運行在在Java虛擬機(JVM)中,在JVM的內部,程序的多任務是通過線程來實現的。每用java命令啟動一個java應用程序,就會啟動一個JVM進程。在同一個JVM進程中,有且只有一個進程,就是它自己。在這個JVM環境中,所有程序代碼的運行都是以線程來運行。

一般常見的Java應用程序都是單線程的。比如,用java命令運行一個最簡單的HelloWorld的Java應用程序時,就啟動了一個JVM進程,JVM找到程序程序的入口點main(),然后運行main()方法,這樣就產生了一個線程,這個線程稱之為主線程。當main方法結束后,主線程運行完成。JVM進程也隨即退出。

對于一個進程中的多個線程來說,多個線程共享進程的內存塊,當有新的線程產生的時候,操作系統不分配新的內存,而是讓新線程共享原有的進程塊的內存。因此,線程間的通信很容易,速度也很快。不同的進程因為處于不同的內存塊,因此進程之間的通信相對困難。

實際上,操作的系統的多進程實現了多任務并發執行,程序的多線程實現了進程的并發執行。多任務、多進程、多線程的前提都是要求操作系統提供多任務、多進程、多線程的支持。

在Java程序中,JVM負責線程的調度。線程調度是值按照特定的機制為多個線程分配CPU的使用權。調度的模式有兩種:分時調度和搶占式調度。分時調度是所有線程輪流獲得CPU使用權,并平均分配每個線程占用CPU的時間;搶占式調度是根據線程的優先級別來獲取CPU的使用權。JVM的線程調度模式采用了搶占式模式。

所謂的“并發執行”、“同時”其實都不是真正意義上的“同時”。眾所周知,CPU都有個時鐘頻率,表示每秒中能執行cpu指令的次數。在每個時鐘周期內,CPU實際上只能去執行一條(也有可能多條)指令。操作系統將進程線程進行管理,輪流(沒有固定的順序)分配每個進程很短的一段是時間(不一定是均分),然后在每個線程內部,程序代碼自己處理該進程內部線程的時間分配,多個線程之間相互的切換去執行,這個切換時間也是非常短的。因此多任務、多進程、多線程都是操作系統給人的一種宏觀感受,從微觀角度看,程序的運行是異步執行的。

用一句話做總結:雖然操作系統是多線程的,但CPU每一時刻只能做一件事,和人的大腦是一樣的,呵呵。

二、Java與多線程

Java語言的多線程需要操作系統的支持。

Java 虛擬機允許應用程序并發地運行多個執行線程。Java語言提供了多線程編程的擴展點,并給出了功能強大的線程控制API。

在Java中,多線程的實現有兩種方式: 擴展java.lang.Thread類 實現java.lang.Runnable接口

每個線程都有一個優先級,高優先級線程的執行優先于低優先級線程。每個線程都可以或不可以標記為一個守護程序。當某個線程中運行的代碼創建一個新 Thread 對象時,該新線程的初始優先級被設定為創建線程的優先級,并且當且僅當創建線程是守護線程時,新線程才是守護程序。

當 Java 虛擬機啟動時,通常都會有單個非守護線程(它通常會調用某個指定類的 main 方法)。Java 虛擬機會繼續執行線程,直到下列任一情況出現時為止:

調用了 Runtime 類的 exit 方法,并且安全管理器允許退出操作發生。

非守護線程的所有線程都已停止運行,無論是通過從對 run 方法的調用中返回,還是通過拋出一個傳播到 run 方法之外的異常。

三、擴展java.lang.Thread類

/** * File Name: TestMitiThread.java * Created by: IntelliJ IDEA.* Copyright: Copyright(c)2003-2006 * Company: Lavasoft([url]http://lavasoft.blog.51cto.com/[/url])* Author: leizhimin * Modifier: leizhimin * Date Time: 2007-5-17 10:03:12 * Readme: 通過擴展Thread類實現多線程 */ public class TestMitiThread { public static void main(String[] rags){ System.out.println(Thread.currentThread().getName()+ “ 線程運行開始!”);new MitiSay(“A”).start();new MitiSay(“B”).start();System.out.println(Thread.currentThread().getName()+ “ 線程運行結束!”);} }

class MitiSay extends Thread { public MitiSay(String threadName){ super(threadName);}

public void run(){ System.out.println(getName()+ “ 線程運行開始!”);for(int i = 0;i < 10;i++){ System.out.println(i + “ ” + getName());try { sleep((int)Math.random()* 10);} catch(InterruptedException e){ e.printStackTrace();} } System.out.println(getName()+ “ 線程運行結束!”);} }

運行結果:

main 線程運行開始!main 線程運行結束!A 線程運行開始!0 A 1 A B 線程運行開始!2 A 0 B 3 A 4 A 1 B 5 A 6 A 7 A 8 A 9 A A 線程運行結束!2 B 3 B 4 B 5 B 6 B 7 B 8 B 9 B B 線程運行結束!說明:

程序啟動運行main時候,java虛擬機啟動一個進程,主線程main在main()調用時候被創建。隨著調用MitiSay的兩個對象的start方法,另外兩個線程也啟動了,這樣,整個應用就在多線程下運行。

在一個方法中調用Thread.currentThread().getName()方法,可以獲取當前線程的名字。在mian方法中調用該方法,獲取的是主線程的名字。

注意:start()方法的調用后并不是立即執行多線程代碼,而是使得該線程變為可運行態(Runnable),什么時候運行是由操作系統決定的。

從程序運行的結果可以發現,多線程程序是亂序執行。因此,只有亂序執行的代碼才有必要設計為多線程。

Thread.sleep()方法調用目的是不讓當前線程獨自霸占該進程所獲取的CPU資源,以留出一定時間給其他線程執行的機會。

實際上所有的多線程代碼執行順序都是不確定的,每次執行的結果都是隨機的。

四、實現java.lang.Runnable接口

/** * 通過實現 Runnable 接口實現多線程 */ public class TestMitiThread1 implements Runnable {

public static void main(String[] args){ System.out.println(Thread.currentThread().getName()+ “ 線程運行開始!”);TestMitiThread1 test = new TestMitiThread1();Thread thread1 = new Thread(test);Thread thread2 = new Thread(test);thread1.start();thread2.start();System.out.println(Thread.currentThread().getName()+ “ 線程運行結束!”);}

public void run(){ System.out.println(Thread.currentThread().getName()+ “ 線程運行開始!”);for(int i = 0;i < 10;i++){ System.out.println(i + “ ” + Thread.currentThread().getName());try { Thread.sleep((int)Math.random()* 10);} catch(InterruptedException e){ e.printStackTrace();} } System.out.println(Thread.currentThread().getName()+ “ 線程運行結束!”);} }

運行結果:

main 線程運行開始!Thread-0 線程運行開始!main 線程運行結束!0 Thread-0 Thread-1 線程運行開始!0 Thread-1 1 Thread-1 1 Thread-0 2 Thread-0 2 Thread-1 3 Thread-0 3 Thread-1 4 Thread-0 4 Thread-1 5 Thread-0 6 Thread-0 5 Thread-1 7 Thread-0 8 Thread-0 6 Thread-1 9 Thread-0 7 Thread-1 Thread-0 線程運行結束!8 Thread-1 9 Thread-1 Thread-1 線程運行結束!說明:

TestMitiThread1類通過實現Runnable接口,使得該類有了多線程類的特征。run()方法是多線程程序的一個約定。所有的多線程代碼都在run方法里面。Thread類實際上也是實現了Runnable接口的類。

在啟動的多線程的時候,需要先通過Thread類的構造方法Thread(Runnable target)構造出對象,然后調用Thread對象的start()方法來運行多線程代碼。

實際上所有的多線程代碼都是通過運行Thread的start()方法來運行的。因此,不管是擴展Thread類還是實現Runnable接口來實現多線程,最終還是通過Thread的對象的API來控制線程的,熟悉Thread類的API是進行多線程編程的基礎。

五、讀解Thread類API

static int MAX_PRIORITY 線程可以具有的最高優先級。static int MIN_PRIORITY 線程可以具有的最低優先級。static int NORM_PRIORITY 分配給線程的默認優先級。

構造方法摘要

Thread(Runnable target)分配新的 Thread 對象。Thread(String name)分配新的 Thread 對象。

方法摘要

static Thread currentThread()返回對當前正在執行的線程對象的引用。ClassLoader getContextClassLoader()返回該線程的上下文 ClassLoader。long getId()返回該線程的標識符。String getName()返回該線程的名稱。int getPriority()返回線程的優先級。Thread.State getState()返回該線程的狀態。ThreadGroup getThreadGroup()返回該線程所屬的線程組。static boolean holdsLock(Object obj)當且僅當當前線程在指定的對象上保持監視器鎖時,才返回 true。void interrupt()中斷線程。

static boolean interrupted()測試當前線程是否已經中斷。boolean isAlive()測試線程是否處于活動狀態。boolean isDaemon()測試該線程是否為守護線程。boolean isInterrupted()測試線程是否已經中斷。void join()等待該線程終止。void join(long millis)等待該線程終止的時間最長為 millis 毫秒。void join(long millis, int nanos)等待該線程終止的時間最長為 millis 毫秒 + nanos 納秒。void resume()已過時。該方法只與 suspend()一起使用,但 suspend()已經遭到反對,因為它具有死鎖傾向。有關更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。void run()如果該線程是使用獨立的 Runnable 運行對象構造的,則調用該 Runnable 對象的 run 方法;否則,該方法不執行任何操作并返回。void setContextClassLoader(ClassLoader cl)設置該線程的上下文 ClassLoader。void setDaemon(boolean on)將該線程標記為守護線程或用戶線程。

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)設置當線程由于未捕獲到異常而突然終止,并且沒有為該線程定義其他處理程序時所調用的默認處理程序。void setName(String name)改變線程名稱,使之與參數 name 相同。void setPriority(int newPriority)更改線程的優先級。

void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)設置該線程由于未捕獲到異常而突然終止時調用的處理程序。static void sleep(long millis)在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。static void sleep(long millis, int nanos)在指定的毫秒數加指定的納秒數內讓當前正在執行的線程休眠(暫停執行)。void start()使該線程開始執行;Java 虛擬機調用該線程的 run 方法。void stop()已過時。該方法具有固有的不安全性。用 Thread.stop 來終止線程將釋放它已經鎖定的所有監視器(作為沿堆棧向上傳播的未檢查 ThreadDeath 異常的一個自然后果)。如果以前受這些監視器保護的任何對象都處于一種不一致的狀態,則損壞的對象將對其他線程可見,這有可能導致任意的行為。stop 的許多使用都應由只修改某些變量以指示目標線程應該停止運行的代碼來取代。目標線程應定期檢查該變量,并且如果該變量指示它要停止運行,則從其運行方法依次返回。如果目標線程等待很長時間(例如基于一個條件變量),則應使用 interrupt 方法來中斷該等待。有關更多信息,請參閱《為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?》。void stop(Throwable obj)已過時。該方法具有固有的不安全性。請參閱 stop()以獲得詳細信息。該方法的附加危險是它可用于生成目標線程未準備處理的異常(包括若沒有該方法該線程不太可能拋出的已檢查的異常)。有關更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。void suspend()已過時。該方法已經遭到反對,因為它具有固有的死鎖傾向。如果目標線程掛起時在保護關鍵系統資源的監視器上保持有鎖,則在目標線程重新開始以前任何線程都不能訪問該資源。如果重新開始目標線程的線程想在調用 resume 之前鎖定該監視器,則會發生死鎖。這類死鎖通常會證明自己是“凍結”的進程。有關更多信息,請參閱為何 Thread.stop、Thread.suspend 和 Thread.resume 遭到反對?。String toString()返回該線程的字符串表示形式,包括線程名稱、優先級和線程組。static void yield()暫停當前正在執行的線程對象,并執行其他線程。

六、線程的狀態轉換圖

線程在一定條件下,狀態會發生變化。線程變化的狀態轉換圖如下:

1、新建狀態(New):新創建了一個線程對象。

2、就緒狀態(Runnable):線程對象創建后,其他線程調用了該對象的start()方法。該狀態的線程位于可運行線程池中,變得可運行,等待獲取CPU的使用權。

3、運行狀態(Running):就緒狀態的線程獲取了CPU,執行程序代碼。

4、阻塞狀態(Blocked):阻塞狀態是線程因為某種原因放棄CPU使用權,暫時停止運行。直到線程進入就緒狀態,才有機會轉到運行狀態。阻塞的情況分三種:

(一)、等待阻塞:運行的線程執行wait()方法,JVM會把該線程放入等待池中。

(二)、同步阻塞:運行的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池中。

(三)、其他阻塞:運行的線程執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。

5、死亡狀態(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命周期。

七、線程的調度

1、調整線程優先級:Java線程有優先級,優先級高的線程會獲得較多的運行機會。

Java線程的優先級用整數表示,取值范圍是1~10,Thread類有以下三個靜態常量: static int MAX_PRIORITY 線程可以具有的最高優先級,取值為10。static int MIN_PRIORITY 線程可以具有的最低優先級,取值為1。static int NORM_PRIORITY 分配給線程的默認優先級,取值為5。

Thread類的setPriority()和getPriority()方法分別用來設置和獲取線程的優先級。

每個線程都有默認的優先級。主線程的默認優先級為Thread.NORM_PRIORITY。

線程的優先級有繼承關系,比如A線程中創建了B線程,那么B將和A具有相同的優先級。JVM提供了10個線程優先級,但與常見的操作系統都不能很好的映射。如果希望程序能移植到各個操作系統中,應該僅僅使用Thread類有以下三個靜態常量作為優先級,這樣能保證同樣的優先級采用了同樣的調度方式。

2、線程睡眠:Thread.sleep(long millis)方法,使線程轉到阻塞狀態。millis參數設定睡眠的時間,以毫秒為單位。當睡眠結束后,就轉為就緒(Runnable)狀態。sleep()平臺移植性好。

3、線程等待:Object類中的wait()方法,導致當前的線程等待,直到其他線程調用此對象的 notify()方法或 notifyAll()喚醒方法。這個兩個喚醒方法也是Object類中的方法,行為等價于調用 wait(0)一樣。

4、線程讓步:Thread.yield()方法,暫停當前正在執行的線程對象,把執行機會讓給相同或者更高優先級的線程。

5、線程加入:join()方法,等待其他線程終止。在當前線程中調用另一個線程的join()方法,則當前線程轉入阻塞狀態,直到另一個進程運行結束,當前線程再由阻塞轉為就緒狀態。

6、線程喚醒:Object類中的notify()方法,喚醒在此對象監視器上等待的單個線程。如果所有線程都在此對象上等待,則會選擇喚醒其中一個線程。選擇是任意性的,并在對實現做出決定時發生。線程通過調用其中一個 wait 方法,在對象的監視器上等待。直到當前的線程放棄此對象上的鎖定,才能繼續執行被喚醒的線程。被喚醒的線程將以常規方式與在該對象上主動同步的其他所有線程進行競爭;例如,喚醒的線程在作為鎖定此對象的下一個線程方面沒有可靠的特權或劣勢。類似的方法還有一個notifyAll(),喚醒在此對象監視器上等待的所有線程。注意:Thread中suspend()和resume()兩個方法在JDK1.5中已經廢除,不再介紹。因為有死鎖傾向。

7、常見線程名詞解釋

主線程:JVM調用程序mian()所產生的線程。

當前線程:這個是容易混淆的概念。一般指通過Thread.currentThread()來獲取的進程。后臺線程:指為其他線程提供服務的線程,也稱為守護線程。JVM的垃圾回收線程就是一個后臺線程。

前臺線程:是指接受后臺線程服務的線程,其實前臺后臺線程是聯系在一起,就像傀儡和幕后操縱者一樣的關系。傀儡是前臺線程、幕后操縱者是后臺線程。由前臺線程創建的線程默認也是前臺線程。可以通過isDaemon()和setDaemon()方法來判斷和設置一個線程是否為后臺線程。

本文出自 “熔 巖” 博客,請務必保留此出處http://lavasoft.blog.51cto.com/62575/27069

第五篇:Java基礎編程題

【程序1】

題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?

1.程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21....【程序2】

題目:判斷101-200之間有多少個素數,并輸出所有素數。

1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。

【程序3】

題目:打印出所有的“水仙花數”,所謂“水仙花數”是指一個三位數,其各位數字立方和等于該數本身。例如:153是一個“水仙花數”,因為153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。

【程序4】

題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。

程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:

(1)如果這個質數恰等于n,則說明分解質因數的過程已經結束,打印出即可。

(2)如果n<>k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你n,重復執行第一步。

(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。

【程序5】

題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。

1.程序分析:(a>b)?a:b這是條件運算符的基本例子。

【程序6】

題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。

1.程序分析:利用輾除法。

【程序7】

題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

1.程序分析:利用while語句,條件為輸入的字符不為'n'.【程序8】

題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。

1.程序分析:關鍵是計算出每一項的值。

【程序9】

題目:一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如6=1+2+3.編程 找出1000以內的所有完數。

【程序10】

題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地時,共經過多少米?第10次反彈多高?

【程序11】

題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?

1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。

【程序12】

題目:企業發放的獎金根據利潤提成。利潤(I)低于或等于10萬元時,獎金可提10%;利潤高于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可可提成7.5%;20萬到40萬之間時,高于20萬元的部分,可提成5%;40萬到60萬之間時高于40萬元的部分,可提成3%;60萬到100萬之間時,高于60萬元的部分,可提成1.5%,高于100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?

1.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。

【程序13】

題目:一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?

1.程序分析:在10萬以內判斷,先將該數加上100后再開方,再將該數加上268后再開方,如果開方后的結果滿足如下條件,即是結果。請看具體分析:

【程序14】

題目:輸入某年某月某日,判斷這一天是這一年的第幾天?

1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然后再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大于3時需考慮多加一天。

【程序15】

題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。

1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然后再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。

【程序16】

題目:輸出9*9口訣。

1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。

【程序17】

題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個 第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下 的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。

1.程序分析:采取逆向思維的方法,從后往前推斷。

【程序18】

題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。

1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。

【程序19】

題目:打印出如下圖案(菱形)

*

***

******

********

******

***

*

1.程序分析:先把圖形分成兩部分來看待,前四行一個規律,后三行一個規律,利用雙重 for循環,第一層控制行,第二層控制列。

【程序20】

題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。

1.程序分析:請抓住分子與分母的變化規律。

【程序21】

題目:求1+2!+3!+...+20!的和

1.程序分析:此程序只是把累加變成了累乘。

【程序22】

題目:利用遞歸方法求5!。

1.程序分析:遞歸公式:fn=fn_1*4!

【程序23】

題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大?

1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數,需知道第四人的歲數,依次類推,推到第一人(10歲),再往回推。

【程序24】

題目:給一個不多于5位的正整數,要求:

一、求它是幾位數,二、逆序打印出各位數字。

【程序25】

題目:一個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同。

【程序26】

題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續 判斷第二個字母。

1.程序分析:用情況語句比較好,如果第一個字母一樣,則判斷用情況語句或if語句判斷第二個字母。

【程序27】

題目:求100之內的素數

【程序28】

題目:對10個數進行排序

1.程序分析:可以利用選擇法,即從后9個比較過程中,選擇一個最小的與第一個元素交換,下次類推,即用第二個元素與后8個進行比較,并進行交換。

【程序29】

題目:求一個3*3矩陣對角線元素之和

1.程序分析:利用雙重for循環控制輸入二維數組,再將a[i][i]累加后輸出。

【程序30】

題目:有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。

1.程序分析:首先判斷此數是否大于最后一個數,然后再考慮插入中間的數的情況,插入后此元素之后的數,依次后移一個位置。

【程序31】

題目:將一個數組逆序輸出。

1.程序分析:用第一個與最后一個交換。

【程序32】

題目:取一個整數a從右端開始的4~7位。

程序分析:可以這樣考慮:

(1)先使a右移4位。

(2)設置一個低4位全為1,其余全為0的數。可用~(~0<<4)

(3)將上面二者進行&運算。

【程序33】

題目:打印出楊輝三角形(要求打印出10行如下圖)

1.程序分析:2 13 3 14 6 4 15 10 10 5 1

【程序34】

題目:輸入3個數a,b,c,按大小順序輸出。

1.程序分析:利用指針方法。

【程序35】

題目:輸入數組,最大的與第一個元素交換,最小的與最后一個元素交換,輸出數組。

【程序36】

題目:有n個整數,使其前面各數順序向后移m個位置,最后m個數變成最前面的m個數

【程序37】

題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。

【程序38】

題目:寫一個函數,求一個字符串的長度,在main函數中輸入字符串,并輸出其長度。

【程序39】

題目:編寫一個函數,輸入n為偶數時,調用函數求1/2+1/4+...+1/n,當輸入n為奇數時,調用函數1/1+1/3+...+1/n(利用指針函數)

【程序40】

題目:字符串排序。

【程序41】

題目:海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據分為五份,多了一個,這只猴子把多的一個扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中,拿走了一份,第三、第四、第五只猴子都是這樣做的,問海灘上原來最少有多少個桃子?

【程序42】

題目:809*??=800*??+9*??+1 其中??代表的兩位數,8*??的結果為兩位數,9*??的結果為3位數。求??代表的兩位數,及809*??后的結果。

【程序43】

題目:求0—7所能組成的奇數個數。

【程序44】

題目:一個偶數總能表示為兩個素數之和。

【程序45】

題目:判斷一個素數能被幾個9整除

【程序46】

題目:兩個字符串連接程序

【程序47】

題目:讀取7個數(1—50)的整數值,每讀取一個值,程序打印出該值個數的*。

【程序48】

題目:某個公司采用公用電話傳遞數據,數據是四位的整數,在傳遞過程中是加密的,加密規則如下:每位數字都加上5,然后用和除以10的余數代替該數字,再將第一位和第四位交換,第二位和第三位交換。

【程序49】

題目:計算字符串中子串出現的次數

【程序50】

題目:有五個學生,每個學生有3門課的成績,從鍵盤輸入以上數據(包括學生號,姓名,三門課成績),計算出平均成績,況原有的數據和計算出的平均分數存放在磁盤文件“stud”中。

下載JAVA編程習題1(五篇范文)word格式文檔
下載JAVA編程習題1(五篇范文).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    Java編程語言面試題

    西安英泰移動通信學院S2級Java編程語言測試題 1 Java編程語言面試題 一、簡答題 1、 簡述用Java編程語言編寫、編譯、解釋和執行過程。 2、 簡述在Java JDK中,java.exe程序的......

    java高級編程教學大綱

    《Java高級編程》教學大綱 鄭州大學軟件技術學院 一、 課程的性質與任務 本課程是軟件開發專業開設的程序設計類高級課程,學生在學習了《程序設計導論》,初步具備了一定的程......

    Java AWT編程總結

    1. 什么是GUI? a) GUI是Graphics User Interface的全稱,意思是圖形用戶界面. 2. 為什么需要GUI? a) 圖形用戶界面能夠讓最終用戶通過鼠標拖動、單擊等動作就可以操作整個應......

    Java線程編程總結

    線程編程方面60、java中有幾種方法可以實現一個線程?用什么關鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用? 答:有兩種實現方法,分別是繼承Thread類與實現Runnable接......

    Java AWT編程總結

    1. 什么是GUI? a) GUI是Graphics User Interface的全稱,意思是圖形用戶界面. 2. 為什么需要GUI? a) 圖形用戶界面能夠讓最終用戶通過鼠標拖動、單擊等動作就可以操作整個應......

    Java JDBC編程總結

    Java JDBC編程總結 Hibernate、TopLink等OR Mapping操作數據庫的技術都是建立JDBC技術之上的,實際來說,他們的性能和JDBC是有很大差距的,但反過來說,如果JDBC用不好,還不如hibern......

    java編程實習心得體會

    Java編程實習心得體會 “紙上得來終覺淺,絕知此事要躬行。”在短暫的實習過程中,我深深的感覺到自己所學知識的膚淺和在實際運用中的專業知識的匱乏。剛開始的一段時間里,對一......

    Java編程學習順序★

    1. 第一階段 掌握要點:Java語基礎知識。包括異常、IO流、多線程、集合類、數據庫。 (切記基礎知識一定要時時刻刻鞏固)eg:Java編程思想、Java2 核心技術 2. 第二階段掌握要點:To......

主站蜘蛛池模板: 久久aⅴ人妻少妇嫩草影院| 狠狠精品干练久久久无码中文字幕| 国产乱码一二三区精品| 男阳茎进女阳道视频大全| 亚洲国产精品无码久久久秋霞1| 欧美成年黄网站色视频| 免费无码一区二区三区a片百度| 色综合伊人色综合网站| 久久国产成人精品国产成人亚洲| av无码爆乳护士在线播放| 在线亚洲精品国产二区图片欧美| 久久不见久久见免费视频1′| 婷婷色香五月综合缴缴情| 午夜精品射精入后重之免费观看| 真实国产精品vr专区| 美女视频黄又黄又免费| 无码天堂亚洲国产av| 国产麻豆乱子伦午夜视频观看| 亚洲成a∨人片在线观看不卡| 好男人在在线社区www在线影院| 无码人妻aⅴ一区二区三区69岛| 亚洲精品国偷自产在线99正片| 国产最爽的av片在线观看| 暴力调教一区二区三区| 羞羞影院午夜男女爽爽| 无码国产精成人午夜视频不卡| 十八禁无码精品a∨在线观看| 久久精品国产福利国产秒拍| 麻豆果冻传媒精品国产av| 影音先锋中文字幕无码资源站| 亚洲日本国产综合高清| 日韩欧美亚洲中文乱码| 国产一区二区三区怡红院| 国产精品久久久av久久久| 高潮喷水无码av亚洲| 女人和拘做爰正片视频| 人妻中出无码中字在线| 狠狠久久永久免费观看| 水蜜桃亚洲精品一区二区| 久久久亚洲欧洲日产国码二区| 久久婷婷五月综合色区|