習題1
1.Java語言的主要貢獻者是誰?
2.編寫、運行Java程序需要經過哪些主要步驟?
4.如果JDK的安裝目錄為D:\jdk,應當怎樣設置path的值?
5.下列哪個是JDK提供的編譯器?
A)java.exe
B)javac.exe
C)javap.exe
D)javaw.exe
6.Java源文件的擴展名是什么?Java字節碼的擴展名是什么?
7.下列哪個是Java應用程序主類中正確的main方法聲明?
A)publicvoidmain(Stringargs)
B)staticvoidmain(Stringargs)
C)publicstaticvoidMain(Stringargs)
D)publicstaticvoidmain(Stringargs)
習題2
1.模仿圖2.4簡單繪制出例子2中rectangle和lader對象的內存示意圖。
2.模仿例子2編寫含有3個類的Java應用程序,要求三個類分別在三個源文件中,其中一個源文件包含有名字為
Teacher的類,該類創建的對象調用add(doublea,doubleb)的方法可以得到2個數的和、調用sub(double
a,doubleb)的方法可以得到2個數的差;一個源文件包含有名字為Student的類,該類創建的對象調用speak()
的方法可以可以在命令行窗口輸出“老師好”;一個源文件包含名字為MainClass的主類。要求在主類的main方
法中分別用Teacher和Student類創建對象,使得程序能輸出12與236的和以及234與120的差,并輸出“老師好
”。
3.當源文件中有多個類時,請簡述源文件的命名規則。
4.當代碼量較大時應當使用哪種編程風格?
習題3
1.什么叫標識符?標識符的規則是什么?true是否可以作為標識符。
2.什么叫關鍵字?true和false是否是關鍵字?請說出6個關鍵字。
3.Java的基本數據類型都是什么?
4.上機運行下列程序,注意觀察輸出的結果。
publicclassE{
publicstaticvoidmain(Stringargs){
for(inti=20302;i<=20322;i++){
System.out.println((char)i);
}
5.上機調試下列程序,注意System.out.print()和System.out.println()的區別。
publicclassOutputData{
intx=234,y=432;
System.out.println(x+"<"+(2*x));
System.out.print("我輸出結果后不回車");
System.out.println("我輸出結果后自動回車到下一行");
System.out.println("x+y="+(x+y));
6.編寫一個Java應用程序,輸出全部的大寫英文字母。
7.是否可以將例子4中的
zhangSan.weight=reader.nextFloat();
更改為:
zhangSan.weight=reader.nexDouble();
習題4
1.下列程序的輸出結果是什么?if-else語句的書寫是否規范?
intx=10,y=5,z=100,result=0;
if(x>y)
x=z;
else
y=x;
z=y;
result=x+y+z;
System.out.println(result);
2.下列程序的輸出結果是什么?
charc='\0';
for(inti=1;i<=4;i++){
switch(i){
case1:c='新';
System.out.print(c);
case2:c='親';
break;
case3:c='斤';
default:System.out.print("!");
3.參考例子2,在應用程序中使用if-elseif-else多條件分支語句代替switch語句來判斷整數的中獎情況。
4.為了節約用電,將用戶的用電量分成3個區間,針對不同的區間給出不同的收費標準。對于1至90千瓦
的電量,每千瓦0.6元;對于91至150千瓦的電量,每千瓦1.1元;對于用大于151千瓦的電量,每千瓦1.7元。編
寫一個Java應用程序程序。在主類的main方法中,輸入用戶的用電量,程序輸出電費。
5.編寫一個應用程序,用兩個for循環語句分別輸出大寫和小寫的“字母表”。
6.一個數如果恰好等于它的因子之和,這個數就稱為“完數”。編寫一個應用程序求1000之內的所有完數。
7.編寫一個應用程序求滿足1+2!+3!…+n!<=9876的最大整數n。
習題5
1.類中的實例變量在什么時候會被分配內存空間?
2.什么叫方法的重載?構造方法可以重載嗎?
3.類中的實例方法可以操作類變量(static變量)嗎?類方法(static方法)可以操作實例變量嗎?
4.類中的實例方法可以用類名直接調用嗎?
5.簡述類變量和實例變量的區別。
6.下列哪些類聲明是錯誤的?
A)classA
B)publicclassA
C)protectedclassA
D)privateclassA
7.下列A類的類體中~哪些是錯誤的?
classTom{
privateintx=120;
protectedinty=20;
intz=11;
privatevoidf(){
x=200;
System.out.println(x);
voidg(){
publicclassA{
Tomtom=newTom();
tom.x=22;//
tom.y=33;//
tom.z=55;//
tom.f();//
tom.g();//
8.請說出A類中System.out.println的輸出結果。
classB
{intx=100,y=200;
publicvoidsetX(intx)
{x=x;
publicvoidsetY(inty)
{this.y=y;
publicintgetXYSum()
{returnx+y;
publicclassA
{publicstaticvoidmain(Stringargs)
{Bb=newB();
b.setX(-100);
b.setY(-200);
System.out.println("sum="+b.getXYSum());
9.請說出A類中System.out.println的輸出結果。
classB{
intn;
staticintsum=0;
voidsetN(intn){
this.n=n;
intgetSum(){
for(inti=1;i<=n;i++)
sum=sum+i;
returnsum;
Bb1=newB(),b2=newB();
b1.setN(3);
b2.setN(5);
ints1=b1.getSum();
ints2=b2.getSum();
System.out.println(s1+s2);
10.請說出E類中System.out.println的輸出結果。
classA{
doublef(intx,doubley){
returnx+y;
intf(intx,inty){
returnx*y;
Aa=newA();
System.out.println(a.f(10,10));
System.out.println(a.f(10,10.0));
習題6
1.子類將繼承父類的那些成員變量和方法?子類在什么情況下隱藏父類的成員變量和方法?
2.父類的final方法可以被子類重寫嗎?
3.什么類中可以有abstract方法?
4.什么叫對象的上轉型對象?
5.下列敘述哪些是正確的?
final類不可以有子類。
abstract類中只可以有abstract方法。
abstract類中可以有非abstract方法,但該方法不可以用final修飾。
不可以同時用final和abstract修飾一個方法。
6.請說出E類中System.out.println的輸出結果。
doublef(doublex,doubley){
classBextendsA{
doublef(intx,inty){
Bb=newB();
System.out.println(b.f(3,5));
System.out.println(b.f(3.0,5.0));
7.請說出E類中System.out.println的輸出結果。
staticintg(intn){
returnn*n;
doublem=super.f(x,y);
returnm+x*y;
intm=A.g(n);
returnm+n;
System.out.println(b.f(10.0,8.0));
System.out.println(b.g(3));
習題7
1.接口中能聲明變量嗎?
2.接口中能定義非抽象方法嗎?
3.什么叫接口的回調?
4.請說出E類中System.out.println的輸出結果。
interfaceA{
doublef(doublex,doubley);
classBimplementsA{
publicdoublef(doublex,doubley){
intg(inta,intb){
returna+b;
Aa=newB();
System.out.println(a.f(3,5));
Bb=(B)a;
以太坊JavaScript庫Ethers.js推出Shanghai升級前的測試網Shandong:10月16日消息,以太坊JavaScript庫Ethers.js推出Shanghai升級前的測試網Shandong。這是與EF DevOps合作運行的實驗性測試網,其激活了一組選定為 Shanghai 升級的 EIP(包括激活信標鏈取款功能的 EIP-4895),可用于早期的客戶端測試。[2022/10/16 14:29:21]
System.out.println(b.g(3,5));
5.請說出E類中System.out.println的輸出結果。
interfaceCom{
intadd(inta,intb);
abstractclassA{
abstractintadd(inta,intb);
classBextendsAimplementsCom{
publicintadd(inta,intb){
Comcom=b;
System.out.println(com.add(12,6));
Aa=b;
System.out.println(a.add(10,5));
習題8
1.內部類的外嵌類的成員變量在內部類中仍然有效嗎?
2.內部類中的方法也可以調用外嵌類中的方法嗎?
3.內部類的類體中可以聲明類變量和類方法嗎?
4.請說出下列程序的輸出結果。
classCry{
publicvoidcry(){
System.out.println("大家好");
Cryhello=newCry(){
publicvoidcry(){
System.out.println("大家好,祝工作順利!");
};
hello.cry();
習題9
1.下列敘述哪些是正確的?
String類是final類,不可以有子類。
String類在java.lang包中。
"abc"=="abc"的值是false.
"abc".equals("abc")的值是true
2.請說出E類中System.out.println的輸出結果。
importjava.util.*;
classGetToken{
Strings;
publicStringgetToken(intindex,Stringstr){
StringTokenizerfenxi=newStringTokenizer(str);
intnumber=fenxi.countTokens();
s=newString;
intk=1;
while(fenxi.hasMoreTokens()){
Stringtemp=fenxi.nextToken();
s=temp;
k++;
if(index<=number)
returns;
returnnull;
classE{
Stringstr="WeLoveThisGame";
GetTokentoken=newGetToken();
Strings1=token.getToken(2,str),
s2=token.getToken(4,str);
System.out.println(s1+":"+s2);
3.請說出E類中System.out.println的輸出結果。
byted="abc我們喜歡籃球".getBytes();
System.out.println(d.length);
Strings=newString(d,0,7);
System.out.println(s);
classMyString{
publicStringgetString(Strings){
StringBufferstr=newStringBuffer();
for(inti=0;i<s.length();i++){
if(i%2==0){
charc=s.charAt(i);
str.append(c);
returnnewString(str);
Strings="1234567890";
MyStringms=newMyString();
System.out.println(ms.getString(s));
Stringregex="\\djava\\w{1,}";
Stringstr1="88javaookk";
Stringstr2="9javaHello";
if(str1.matches(regex)){
System.out.println(str1);
if(str2.matches(regex)){
System.out.println(str2);
6.字符串調用publicStringtoUpperCase()方法返回一個字符串,該字符串把當前字符串中的小寫字母變成大寫字母;.字符串調用publicStringtoLowerCase()方法返回一個字符串,該字符串把當前字符串中的大寫字母變成小寫字母。String類的publicStringconcat(Stringstr)方法返回一個字符串,該字符串是把調用該方法的字符串與參數指定的字符串連接。編寫一個程序,練習使用這3個方法。
7.String類的publiccharcharAt(intindex)方法可以得到當前字符串index位置上的一個字符。編寫程序使用該方法得到一個字符串中的第一個和最后一個字符。
8.通過鍵盤輸入年份和月份。程序輸出相應的日歷牌。
9.計算某年、某月、某日和某年、某月、某日之間的天數間隔。要求年、月、日通過通過鍵盤輸入到程序中。
10.編程練習Math類的常用方法。
11.參看例子19,編寫程序剔除一個字符串中的全部非數字字符,例如,將形如“ab123you”的非數字字符全部剔除,得到字符串“123”。
12.參看例子21,使用Scanner類的實例解析“數學87分,物理76分,英語96分”中的考試成績,并計算出總成績以及平均分數。
習題10
1.如果準備按字節讀取一個文件的內容,應當使用FileInputStream流還是FileReader流?
2.FileInputStream流的read方法和FileReader流的read方法有何不同?
3.BufferedReader流能直接指向一個文件嗎?
4.使用ObjectInputStream和ObjectOutputStream類有哪些注意事項?
5.怎樣使用輸入、輸出流克隆對象?
6.使用RandomAccessFile流將一個文本文件倒置讀出。
7.使用Java的輸入、輸出流將一個文本文件的內容按行讀出,每讀出一行就順序添加行號,并寫入到另
一個文件中。
8.了解打印流。我們已經學習了數據流,其特點是用Java的數據類型讀寫文件,但使用數據流寫成的文
件用其它文件閱讀器無法進行閱讀(看上去是亂碼)。PrintStream類提供了一個過濾輸出流,該輸出流能以文本
格式顯示Java的數據類型。上機實習下列程序:
importjava.awt.*;
importjava.io.*;
try{
Filefile=newFile("p.txt");
FileOutputStreamout=newFileOutputStream(file);
PrintStreamps=newPrintStream(out);
ps.print(12345.6789);
ps.println("howareyou");
ps.println(true);
ps.close();
catch(IOExceptione){}
9.參考例子14,解析一個文件中的價格數據,并計算平均價格,比如該文件的內容如下:
商品列表:
電視機,2567元/臺
洗衣機,3562元/臺
冰箱,6573元/臺
習題11
1.JFrame類的對象的默認布局是什么布局?
2.一個容器對象是否可以使用add方法添加一個JFrame窗口?
3.編寫應用程序,有一個標題為“計算”的窗口,窗口的布局為FlowLayout布局。窗口中添加兩個文本區,當
我們在一個文本區中輸入若干個數時,另一個文本區同時對你輸入的數進行求和運算并求出平均值,也就是說
隨著你輸入的變化,另一個文本區不斷地更新求和及平均值。
4.編寫一個應用程序,有一個標題為“計算”的窗口,窗口的布局為FlowLayout布局。設計四個按鈕,分別命
名為“加”、“差”、“積、”、“除”,另外,窗口中還有三個文本框。單擊相應的按鈕,將兩個文本框的
數字做運算,在第三個文本框中顯示結果。要求處理NumberFormatException異常。
5.參照例子13編寫一個體現MVC結構的GUI程序。首先編寫一個封裝梯形類,然后再編寫一個窗口。要求窗口使
用三文本框和一個文本區為梯形對象中的數據提供視圖,其中三個文本框用來顯示和更新梯形對象的上底、下
底和高;文本區對象用來顯示梯形的面積。窗口中有一個按鈕,用戶單擊該按鈕后,程序用3個文本框中的數據
分別作為梯形對象的上底、下底和高,并將計算出的梯形的面積顯示在文本區中。
習題12
1.線程有幾種狀態?
2.引起線程中斷的常見原因是什么?
3.一個線程執行完run方法后,進入了什么狀態?該線程還能再調用start方法嗎?
4.線程在什么狀態時,調用isAlive()方法返回的值是false。
5.建立線程有幾種方法?
6.怎樣設置線程的優先級?
7.在多線程中,為什么要引入同步機制?
8.在什么方法中wait()方法、notify()及notifyAll()方法可以被使用?
9.將例子11中SellTicket類中的循環條件:
while(fiveAmount<3)
該寫成:
if(fiveAmount<3)
是否合理。
10.線程調用interrupt()的作用是什么?
11.參照例子14,模擬三個人排隊買票,張某、李某和趙某買電影票,售票員只有三張五元的錢,電影票5元錢
一張。張某拿二十元一張的新人民幣排在李的前面買票,李某排在趙的前面拿一張10元的人民幣買票,趙某拿
一張5元的人民幣買票。
12.參照例子9,要求有3個線程:student1、student2和teacher,其中student1準備睡10分鐘后再開始上課
,其中student2準備睡一小時后再開始上課。teacher在輸出3句“上課”后,吵醒休眠的線程student1;
student1被吵醒后,負責再吵醒休眠的線程student2。
12.參照例子19,編寫一個Java應用程序,在主線程中再創建3個線程:“運貨司機”、“裝運工”和“倉庫管
以太坊JavaScript庫Ethers.js獲Chainlink社區贈款資助:以太坊JavaScript庫Ethers.js獲Chainlink Community Grant資助,將通過輔助包擴展到其他基于EVM的區塊鏈。Chainlink表示,增加對其他基于EVM的區塊鏈網絡的支持將使Ethers.js能夠進一步簡化Web3應用程序的開發和部署。作為資助的一部分,Ethers.js將創建一個專門用于OKExChain的輔助包,并額外支持Chainlink預言機。此外,Ethers.js還將創建明確的指引文檔,讓外部區塊鏈可以創建自己的輔助包,從而使得Ethers.js可以支持其EVM鏈以方便Web3開發人員開發混合智能合約應用程序。[2021/8/21 22:27:48]
理員”。要求線程“運貨司機”占有CPU資源后立刻聯合線程“裝運工”,也就是讓“運貨司機”一直等到“裝
運工”完成工作才能開車,而“裝運工”占有CPU資源后立刻聯合線程“倉庫管理員”,也就是讓“裝運工”
一直等到“倉庫管理員”打開倉庫才能開始搬運貨物。
14.在下列E類中,System.out.println的輸出結果是什么?
importjava.awt.event.*;
publicclassEimplementsRunnable{
StringBufferbuffer=newStringBuffer();
Threadt1,t2;
E(){
t1=newThread(this);
t2=newThread(this);
publicsynchronizedvoidaddChar(charc){
if(Thread.currentThread()==t1){
while(buffer.length()==0){
try{wait();
catch(Exceptione){}
buffer.append(c);
if(Thread.currentThread()==t2){
notifyAll();
publicstaticvoidmain(Strings){
Ehello=newE();
hello.t1.start();
hello.t2.start();
while(hello.t1.isAlive()||hello.t2.isAlive()){}
System.out.println(hello.buffer);
publicvoidrun(){
if(Thread.currentThread()==t1)
addChar('A');
if(Thread.currentThread()==t2)
addChar('B');
習題13
1.URL對象調用哪個方法可以返回一個指向該URL對象所包含的資源的輸入流。
2.什么叫socket?怎樣建立socket連接?
3.ServerSocket對象調用accept方法返回一個什么類型的對象?
4.InetAddress對象使用怎樣的格式來表示自己封裝的地址信息?
5.參照例子6,使用套接字連接編寫網絡程序,客戶輸入三角形的三邊并發送給服務器,服務器把計算出的三
角形的面積返回給客戶。
6.參照13.6.2節中的示例代碼,使用RMI技術讓客戶調用遠程對象讀取服務器上的一個文本文件。
習題14
1.為了操作Derby數據庫,需要把Java安裝目錄目錄db/lib下的那些jar文件復制到Java運行環境的擴展
中?
2.參照例子2,編寫一個應用程序來查詢Derby數據庫,用戶可以從鍵盤輸入數據庫名、表名。
3.使用預處理語句的好處是什么?
4.什么叫事務,事務處理步驟是怎樣的?
習題解答
習題一
1.JamesGosling
2.需3個步驟:
用文本編輯器編寫源文件。
使用javac編譯源文件,得到字節碼文件。
使用解釋器運行程序。
3.setclasspath=D:\jdk\jre\lib\rt.jar;.;
4.B
5.Java源文件的擴展名是.java,Java字節碼的擴展名是.class。
6.D。
習題二
.
Teacher.java
publicclassTeacher{
doubleadd(doublea,doubleb){
doublesub(doublea,doubleb){
returna-b;
Student.java
publicclassStudent{
publicvoidspeak(){
System.out.println("老師好");
MainClass.java
publicclassMainClass{
Teacherzhang=newTeacher();
System.out.println(zhang.add(12,236));
System.out.println(zhang.add(234,120));
Studentjiang=newStudent();
jiang.speak();
3.如果源文件中有多個類,但沒有public類,那么源文件的名字只要和某個類的名字相同,并且擴展名是.java就可以了,如果有一個類是public類,那么源文件的名字必須與這個類的名字完全相同,擴展名是.java。
4.行尾風格。
習題三
用來標識類名、變量名、方法名、類型名、數組名、文件名的有效字符序列稱為標識符。標識符由字母、下劃線、美元符號和數字組成,第一個字符不能是數字。true不是標識符。
關鍵字就是Java語言中已經被賦予特定意義的一些單詞,不可以把關鍵字作為名字來用。不是關鍵字。classimplementsinterfaceenumextendsabstract。
boolean,char,byte,short,int,long,float,double。
4.屬于操作題,解答略。
5
6.
charcStart='A',cEnd='Z';
for(charc=cStart;c<=cEnd;c++)
System.out.print(""+c);
7.不可以。
習題四
110。不規范。
.新親親斤!!。
publicclassJudgeAward{
voidgiveMess(intnumber){
if(number==9||number==131||number==12){
System.out.println(number+"是三等獎");
elseif(number==209||number==596||number==27){
System.out.println(number+"是二等獎");
elseif(number==875||number==316||number==59){
System.out.println(number+"是一等獎");
else{
System.out.println("未中獎");
importjava.util.Scanner;
publicclassComputer{
Scannerreader=newScanner(System.in);
doubleamount=0;//存放電量
doubleprice=0;//用戶需要交納的電費
System.out.print("輸入電量:");
amount=reader.nextDouble();
if(amount<=90&&amount>=1){
price=amount*0.6;//計算price的值
elseif(amount<=150&&amount>=91){
price=90*0.6+(amount-90)*1.1;//計算price的值
elseif(amount>150){
price=90*0.6+(150-90)*1.1+(amount-150)*1.7;//計算price的值
System.out.println("輸入電量:"+amount+"不合理");
System.out.printf("電費:%5.2f",price);
System.out.printf("%2c",c);
System.out.println();
System.out.printf("%2c",(c+32));
publicclassXiti5{
intsum=0,i,j;
for(i=1;i<=1000;i++){
for(j=1,sum=0;j<i;j++){
if(i%j==0)
sum=sum+j;
if(sum==i)
System.out.println("完數:"+i);
intn=1,i=1,jiecheng=1;
longsum=0;
while(true){
jiecheng=1;
for(i=1;i<=n;i++){
jiecheng=jiecheng*i;
sum=sum+jiecheng;
if(sum>9876)
n++;
System.out.println("滿足條件的最大整數:"+(n-1));
習題五
用類創建對象時。
一個類中可以有多個方法具有相同的名字,但這些方法的參數必須不同,即或者是參數的個數不同,或者是參數的類型不同。可以。
可以。不可以。
.不可以。
.一個類通過使用new運算符可以創建多個不同的對象,不同的對象的實例變量將被分配不同的內存空間。所有對象的類變量都分配給相同的一處內存,對象共享類變量。
.CD。
.。
8.sum=-100。
9.27。
10.100和20.0。
習題六
.如果子類和父類在同一個包中,那么,子類自然地繼承了其父類中不是private的成員變量作為自己的成員變量,并且也自然地繼承了父類中不是private的方法作為自己的方法,繼承的成員或方法的訪問權限保持不變。當子類和父類不在同一個包中時,父類中的private和友好訪問權限的成員變量不會被子類繼承,也就是說,子類只繼承父類中的protected和public訪問權限的成員變量作為子類的成員變量;同樣,子類只繼承父類中的protected和public訪問權限的方法作為子類的方法。如果所聲明的成員的變量的名字和從父類繼承來的成員變量的名字相同(聲明的類型可以不同),在這種情況下,子類就會隱藏掉所繼承的成員變量。
動態 | 以太坊Java客戶端Ethereum(J)宣布放棄開發 原因未知:以太坊Java客戶端Ethereum(J)的代碼庫在11月15日更新,標記該以太坊客戶端版本已經停止支持,原因未知。該項目代碼庫的最后一次版本更新是 2019 年4月9日,將客戶端升級到1.12和1.13版本,隨后在11月15日宣布停止支持,該項目遭廢棄。查詢并未在開發者 Gitter 上發現放棄支持的原因。(區塊律動)[2019/11/26]
.不可以。
.abstract類。
.A類是B類的父類,當用子類創建一個對象b,并把這個對象b的引用放到父類的對象a中時,稱a是b的上轉型對象。
.AD。
.15.0
8.0。
.98.0
12。
習題七
.不能。
.不能。
.可以把實現某一接口的類創建的對象的引用賦給該接口聲明的接口變量中。那么該接口變量就可以調用被類實現的接口中的方法。
15.0
8。
18
15。
習題八
.有效。
.可以。
.不可以。
.大家好,祝工作順利!
習題九
.ABD。
.Love:Game。
.15
abc我們。
.13579。
.9javaHello。
6.publicclassE{
Strings1,s2,t1="ABCDabcd";
s1=t1.toUpperCase();
s2=t1.toLowerCase();
System.out.println(s1);
System.out.println(s2);
Strings3=s1.concat(s2);
System.out.println(s3);
7.publicclassE{
Strings="ABCDabcd";
charcStart=s.charAt(0);
charcEnd=s.charAt(s.length()-1);
System.out.println(cStart);
System.out.println(cEnd);
8.
Scannerread=newScanner(System.in);
CalendarBeancb=newCalendarBean();
intyear=2000,month=1;
System.out.println("輸入年:");
year=read.nextInt();
System.out.println("輸入月:");
month=read.nextInt();
cb.setYear(year);
cb.setMonth(month);
Stringa=cb.getCalendar();//返回號碼的一維數組
charstr="日一二三四五六".toCharArray();
for(charc:str){
System.out.printf("%3c",c);
for(inti=0;i<a.length;i++){//輸出數組a
if(i%7==0)
System.out.println("");//換行
System.out.printf("%4s",a);
classCalendarBean{
Stringday;
intyear=0,month=0;
publicvoidsetYear(intyear){
this.year=year;
publicvoidsetMonth(intmonth){
this.month=month;
publicStringgetCalendar(){
Stringa=newString;
Calendarrili=Calendar.getInstance();
rili.set(year,month-1,1);
intweekDay=rili.get(Calendar.DAY_OF_WEEK)-1;//計算出1號的星期
intday=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
day=31;
if(month==4||month==6||month==9||month==11)
day=30;
if(month==2){
if(((year%4==0)&&(year%100!=0))||(year%400==0))
day=29;
day=28;
for(inti=0;i<weekDay;i++)
a="";
for(inti=weekDay,n=1;i<weekDay+day;i++){
a=String.valueOf(n);
for(inti=weekDay+day;i<a.length;i++)
returna;
importjava.util.*;
intyear1,month1,day1,year2,month2,day2;
System.out.println("輸入第一個日期的年、月、日(用空格或回車分隔):");
year1=read.nextInt();
month1=read.nextInt();
day1=read.nextInt();
System.out.println("輸入第二個日期的年月日(用空格或回車分隔):");
year2=read.nextInt();
month2=read.nextInt();
day2=read.nextInt();
Calendarcalendar=Calendar.getInstance();
calendar.set(year1,month1-1,day1);
longtimeYear1=calendar.getTimeInMillis();
calendar.set(year2,month2-1,day2);
longtimeYear2=calendar.getTimeInMillis();
long相隔天數=Math.abs((timeYear1-timeYear2)/(1000*60*60*24));
System.out.println(""+year1+"年"+month1+"月"+day1+"日和"+
year2+"年"+month2+"月"+day2+"日相隔"+相隔天數+"天");
10.
doublea=0,b=0,c=0;
a=12;
b=24;
c=Math.asin(0.56);
System.out.println(c);
c=Math.cos(3.14);
c=Math.exp(1);
c=Math.log(8);
11.publicclassE{
Stringstr="ab123you你是誰?";
Stringregex="\\D+";
str=str.replaceAll(regex,"");
System.out.println(str);
12.importjava.util.*;
Stringcost="數學87分,物理76分,英語96分";
Scannerscanner=newScanner(cost);
scanner.useDelimiter("+");
doublesum=0;
intcount=0;
while(scanner.hasNext()){
try{doublescore=scanner.nextDouble();
count++;
sum=sum+score;
System.out.println(score);
catch(InputMismatchExceptionexp){
Stringt=scanner.next();
System.out.println("總分:"+sum+"分");
System.out.println("平均分:"+sum/count+"分");
習題十
.使用FileInputStream。
.FileInputStream按字節讀取文件,FileReader按字符讀取文件。
.不可以。
.使用對象流寫入或讀入對象時,要保證對象是序列化的。
.使用對象流很容易得獲取一個序列化對象的克隆,只需將該對象寫入到對象輸出流,那么用對象輸入流讀回的對象一定是原對象的一個克隆。
6.
Filef=newFile("E.java");;
try{RandomAccessFilerandom=newRandomAccessFile(f,"rw");
random.seek(0);
longm=random.length();
while(m>=0){
m=m-1;
random.seek(m);
intc=random.readByte();
if(c<=255&&c>=0)
System.out.print((char)c);
else{
m=m-1;
random.seek(m);
bytecc=newbyte;
random.readFully(cc);
System.out.print(newString(cc));
}
}
}
catch(Exceptionexp){}
}
}
7.
importjava.io.*;
publicclassE{
publicstaticvoidmain(Stringargs){
Filefile=newFile("E.java");
FiletempFile=newFile("temp.txt");
try{FileReaderinOne=newFileReader(file);
BufferedReaderinTwo=newBufferedReader(inOne);
FileWritertofile=newFileWriter(tempFile);
BufferedWriterout=newBufferedWriter(tofile);
Strings=null;
動態 | 公鏈和交易所錢包使用的某知名第三方java庫存在被劫持攻擊風險:經Beosin成都鏈安安全技術團隊驗證:供公鏈和交易所錢包使用的某知名第三方java庫,存在被劫持攻擊的風險。尤其,在秘鑰生成過程中容易被劫持。
Beosin成都鏈安在此提醒廣大用戶在使用錢包時一定要從官方指定的地址下載,不要輕易從第三方下載錢包應用,避免造成不必要的資產損失。同時,建議各公鏈和交易所錢包方提高警惕并重視安全防范,使用第三方開源SDK時務必要注意安全性。[2019/9/30]
inti=0;
s=inTwo.readLine();
while(s!=null){
i++;
out.write(i+""+s);
out.newLine();
s=inTwo.readLine();
}
inOne.close();
inTwo.close();
out.flush();
out.close();
tofile.close();
}
catch(IOExceptione){}
}
}
8.屬于上機操作題,解答略。
9.importjava.io.*;
importjava.util.*;
publicclassE{
publicstaticvoidmain(Stringargs){
Filefile=newFile("a.txt");
Scannersc=null;
doublesum=0;
intcount=0;
try{sc=newScanner(file);
sc.useDelimiter("+");
while(sc.hasNext()){
try{doubleprice=sc.nextDouble();
count++;
sum=sum+price;
System.out.println(price);
}
catch(InputMismatchExceptionexp){
Stringt=sc.next();
}
}
System.out.println("平均價格:"+sum/count);
}
catch(Exceptionexp){
System.out.println(exp);
}
}
}
習題十一
1.Frame容器的默認布局是BorderLayout布局。
2.不可以。
3.
importjava.awt.*;
importjavax.swing.event.*;
importjavax.swing.*;
importjava.awt.event.*;
publicclassE{
publicstaticvoidmain(Stringargs){
Computerfr=newComputer();
}
}
classComputerextendsJFrameimplementsDocumentListener{
JTextAreatext1,text2;
intcount=1;
doublesum=0,aver=0;
Computer(){
setLayout(newFlowLayout());
text1=newJTextArea(6,20);
text2=newJTextArea(6,20);
add(newJScrollPane(text1));
add(newJScrollPane(text2));
text2.setEditable(false);
(text1.getDocument()).addDocumentListener(this);
setSize(300,320);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
publicvoidchangedUpdate(DocumentEvente){
Strings=text1.getText();
Stringa=s.split("+");
sum=0;
aver=0;
for(inti=0;i<a.length;i++){
try{sum=sum+Double.parseDouble(a);
}
catch(Exceptionee){}
}
aver=sum/count;
text2.setText(null);
text2.append("\n和:"+sum);
text2.append("\n平均值:"+aver);
}
publicvoidremoveUpdate(DocumentEvente){
changedUpdate(e);
}
publicvoidinsertUpdate(DocumentEvente){
changedUpdate(e);
}
}
4.
importjava.awt.*;
importjavax.swing.event.*;
importjavax.swing.*;
importjava.awt.event.*;
publicclassE{
publicstaticvoidmain(Stringargs){
ComputerFramefr=newComputerFrame();
}
}
classComputerFrameextendsJFrameimplementsActionListener{
JTextFieldtext1,text2,text3;
JButtonbuttonAdd,buttonSub,buttonMul,buttonDiv;
JLabellabel;
publicComputerFrame(){
setLayout(newFlowLayout());
text1=newJTextField(10);
text2=newJTextField(10);
text3=newJTextField(10);
label=newJLabel("",JLabel.CENTER);
label.setBackground(Color.green);
add(text1);
add(label);
add(text2);
add(text3);
buttonAdd=newJButton("加");
buttonSub=newJButton("減");
buttonMul=newJButton("乘");
buttonDiv=newJButton("除");
add(buttonAdd);
add(buttonSub);
add(buttonMul);
add(buttonDiv);
buttonAdd.addActionListener(this);
buttonSub.addActionListener(this);
buttonMul.addActionListener(this);
buttonDiv.addActionListener(this);
setSize(300,320);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
publicvoidactionPerformed(ActionEvente){
doublen;
if(e.getSource()==buttonAdd){
doublen1,n2;
try{n1=Double.parseDouble(text1.getText());
n2=Double.parseDouble(text2.getText());
n=n1+n2;
text3.setText(String.valueOf(n));
label.setText("+");
}
catch(NumberFormatExceptionee)
{text3.setText("請輸入數字字符");
}
}
elseif(e.getSource()==buttonSub){
doublen1,n2;
try{n1=Double.parseDouble(text1.getText());
n2=Double.parseDouble(text2.getText());
n=n1-n2;
text3.setText(String.valueOf(n));
label.setText("-");
}
catch(NumberFormatExceptionee)
{text3.setText("請輸入數字字符");
}
}
elseif(e.getSource()==buttonMul)
{doublen1,n2;
try{n1=Double.parseDouble(text1.getText());
n2=Double.parseDouble(text2.getText());
n=n1*n2;
text3.setText(String.valueOf(n));
label.setText("*");
}
catch(NumberFormatExceptionee)
{text3.setText("請輸入數字字符");
}
}
elseif(e.getSource()==buttonDiv)
{doublen1,n2;
try{n1=Double.parseDouble(text1.getText());
n2=Double.parseDouble(text2.getText());
n=n1/n2;
text3.setText(String.valueOf(n));
label.setText("/");
動態 | 黑客入侵JavaScript庫以竊取加密貨幣:據ZDnet消息,一名黑客獲得了JavaScript庫的權限,并注入了惡意代碼,竊取BitPay的Copay錢包應用程序中存儲的比特幣和比特幣現金資金。包含惡意代碼的庫名為Event-Stream,是用于處理Node.js流數據的JavaScript npm包。GitHub上有用戶投訴稱,名為right9ctrl的JavaScript庫的新管理員是惡意代碼的始作俑者。據悉開發人員使用惡意軟件更新了模塊,然后修補了問題以避免被檢測到,但是已經安裝它的眾多軟件仍然受到影響。[2018/11/27]
}
catch(NumberFormatExceptionee)
{text3.setText("請輸入數字字符");
}
}
validate();
}
}
5.importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassE{
publicstaticvoidmain(Stringargs){
Windowwin=newWindow();
win.setTitle("使用MVC結構");
win.setBounds(100,100,420,260);
}
}
classWindowextendsJFrameimplementsActionListener{
Laderlader;//模型
JTextFieldtextAbove,textBottom,textHeight;//視圖
JTextAreashowArea;//視圖
JButtoncontrolButton;//控制器
Window(){
init();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
voidinit(){
lader=newLader();
textAbove=newJTextField(5);
textBottom=newJTextField(5);
textHeight=newJTextField(5);
showArea=newJTextArea();
controlButton=newJButton("計算面積");
JPanelpNorth=newJPanel();
pNorth.add(newJLabel("上底:"));
pNorth.add(textAbove);
pNorth.add(newJLabel("下底:"));
pNorth.add(textBottom);
pNorth.add(newJLabel("高:"));
pNorth.add(textHeight);
pNorth.add(controlButton);
controlButton.addActionListener(this);
add(pNorth,BorderLayout.NORTH);
add(newJScrollPane(showArea),BorderLayout.CENTER);
}
publicvoidactionPerformed(ActionEvente){
try{
doubleabove=Double.parseDouble(textAbove.getText().trim());
doublebottom=Double.parseDouble(textBottom.getText().trim());
doubleheight=Double.parseDouble(textHeight.getText().trim());
lader.setAbove(above);
lader.setBottom(bottom);
lader.setHeight(height);
doublearea=lader.getArea();
showArea.append("面積:"+area+"\n");
}
catch(Exceptionex){
showArea.append("\n"+ex+"\n");
}
}
}
classLader{
doubleabove,bottom,height;
publicdoublegetArea(){
doublearea=(above+bottom)*height/2.0;
returnarea;
}
publicvoidsetAbove(doublea){
above=a;
}
publicvoidsetBottom(doubleb){
bottom=b;
}
publicvoidsetHeight(doublec){
height=c;
}
}
習題十二
1.4種狀態:新建、運行、中斷和死亡。
2.有4種原因的中斷:JVM將CPU資源從當前線程切換給其他線程,使本線程讓出CPU的使用權處于中斷狀態。線程使用CPU資源期間,執行了sleep(intmillsecond)方法,使當前線程進入休眠狀態。線程使用CPU資源期間,執行了wait()方法,使得當前線程進入等待狀態。線程使用CPU資源期間,執行某個操作進入阻塞狀態,比如執行讀/寫操作引起阻塞。
3.死亡狀態,不能再調用start()方法。
4.新建和死亡狀態。
5.兩種方法:用Thread類或其子類。
6.使用setPrority(intgrade)方法。
7.Java使我們可以創建多個線程,在處理多線程問題時,我們必須注意這樣一個問題:當兩個或多個線程同時訪問同一個變量,并且一個線程需要修改這個變量。我們應對這樣的問題作出處理,否則可能發生混亂。
8.當一個線程使用的同步方法中用到某個變量,而此變量又需要其它線程修改后才能符合本線程的需要,那么可以在同步方法中使用wait()方法。使用wait方法可以中斷方法的執行,使本線程等待,暫時讓出CPU的使用權,并允許其它線程使用這個同步方法。其它線程如果在使用這個同步方法時不需要等待,那么它使用完這個同步方法的同時,應當用notifyAll()方法通知所有的由于使用這個同步方法而處于等待的線程結束等待。
9.不合理。
10.“吵醒”休眠的線程。一個占有CPU資源的線程可以讓休眠的線程調用interrupt方法“吵醒”自己,即導致休眠的線程發生InterruptedException異常,從而結束休眠,重新排隊等待CPU資源。
11.publicclassE{
publicstaticvoidmain(Stringargs){
Cinemaa=newCinema();
a.zhang.start();
a.sun.start();
a.zhao.start();
}
}
classTicketSeller//負責賣票的類。
{intfiveNumber=3,tenNumber=0,twentyNumber=0;
publicsynchronizedvoidsellTicket(intreceiveMoney)
{if(receiveMoney==5)
{fiveNumber=fiveNumber+1;
System.out.println(Thread.currentThread().getName()+
"給我5元錢,這是您的1張入場卷");
}
elseif(receiveMoney==10)
{while(fiveNumber<1)
{try{System.out.println(Thread.currentThread().getName()+"靠邊等");
wait();
System.out.println(Thread.currentThread().getName()+"結束等待");
}
catch(InterruptedExceptione){}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber+1;
System.out.println(Thread.currentThread().getName()+
"給我10元錢,找您5元,這是您的1張入場卷");
}
elseif(receiveMoney==20)
{while(fiveNumber<1||tenNumber<1)
{try{System.out.println(Thread.currentThread().getName()+"靠邊等");
wait();
System.out.println(Thread.currentThread().getName()+"結束等待");
}
catch(InterruptedExceptione){}
}
fiveNumber=fiveNumber-1;
tenNumber=tenNumber-1;
twentyNumber=twentyNumber+1;
System.out.println(Thread.currentThread().getName()+
"給20元錢,找您一張5元和一張10元,這是您的1張入場卷");
}
notifyAll();
}
}
classCinemaimplementsRunnable
{Threadzhang,sun,zhao;
TicketSellerseller;
Cinema()
{zhang=newThread(this);
sun=newThread(this);
zhao=newThread(this);
zhang.setName("張小有");
sun.setName("孫大名");
zhao.setName("趙中堂");
seller=newTicketSeller();
}
publicvoidrun()
{if(Thread.currentThread()==zhang)
{seller.sellTicket(20);
}
elseif(Thread.currentThread()==sun)
{seller.sellTicket(10);
}
elseif(Thread.currentThread()==zhao)
{seller.sellTicket(5);
}
}
}
12.
publicclassE{
publicstaticvoidmain(Stringargs){
ClassRoomroom6501=newClassRoom();
room6501.student1.start();
room6501.student2.start();
try{Thread.sleep(1000);
}
catch(Exceptionexp){}
room6501.teacher.start();
}
}
classClassRoomimplementsRunnable{
Threadstudent1,student2,teacher;
ClassRoom(){
teacher=newThread(this);
student1=newThread(this);
student2=newThread(this);
teacher.setName("王教授");
student1.setName("張三");
student2.setName("李四");
}
publicvoidrun(){
if(Thread.currentThread()==student1){
try{System.out.println(student1.getName()+"正在睡覺,不聽課");
Thread.sleep(1000*60*10);
}
catch(InterruptedExceptione){
System.out.println(student1.getName()+"被老師叫醒了");
}
System.out.println(student1.getName()+"開始聽課");
student2.interrupt();//吵醒student2
}
elseif(Thread.currentThread()==student2){
try{System.out.println(student2.getName()+"正在睡覺,不聽課");
Thread.sleep(1000*60*60);
}
catch(InterruptedExceptione){
System.out.println(student2.getName()+"被張三叫醒了");
}
System.out.println(student2.getName()+"開始聽課");
}
elseif(Thread.currentThread()==teacher){
for(inti=1;i<=3;i++){
System.out.println("上課!");
try{Thread.sleep(500);
}
catch(InterruptedExceptione){}
}
student1.interrupt();//吵醒student1
}
}
}
13.
publicclassE{
publicstaticvoidmain(Stringargs){
JoinWorkwork=newJoinWork();
work.司機.start();
}
}
classJoinWorkimplementsRunnable{
Thread司機;
Thread裝運工;
Thread管理員;
JoinWork(){
司機=newThread(this);
裝運工=newThread(this);
管理員=newThread(this);
}
publicvoidrun(){
if(Thread.currentThread()==司機){
System.out.println("司機等待裝運工裝車");
try{
裝運工.start();
裝運工.join();
}
catch(InterruptedExceptione){}
System.out.println("司機開車走了");
}
elseif(Thread.currentThread()==裝運工){
System.out.println("裝運工等待管理員");
try{
管理員.start();
管理員.join();
}
catch(InterruptedExceptione){}
System.out.println("裝運工把車裝載完畢");
}
elseif(Thread.currentThread()==管理員){
System.out.println("管理員把裝車手續辦好,打開倉庫大門");
}
}
}
14.BA
習題十三
1.URL對象調用InputStreamopenStream()方法可以返回一個輸入流,該輸入流指向URL對象所包含的資源。通過該輸入流可以將服務器上的資源信息讀入到客戶端。
2.客戶端的套接字和服務器端的套接字通過輸入、輸出流互相連接后進行通信。
3.使用方法accept(),accept()會返回一個和客戶端Socket對象相連接的Socket對象。accept方法會堵塞線程的繼續執行,直到接收到客戶的呼叫。。
4.域名/IP。
5.客戶端
importjava.net.*;
importjava.io.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassClient
{publicstaticvoidmain(Stringargs)
{newComputerClient();
}
}
classComputerClientextendsFrameimplementsRunnable,ActionListener
{Buttonconnection,send;
TextFieldinputText,showResult;
Socketsocket=null;
DataInputStreamin=null;
DataOutputStreamout=null;
Threadthread;
ComputerClient()
{socket=newSocket();
setLayout(newFlowLayout());
Boxbox=Box.createVerticalBox();
connection=newButton("連接服務器");
send=newButton("發送");
send.setEnabled(false);
inputText=newTextField(12);
showResult=newTextField(12);
box.add(connection);
box.add(newLabel("輸入三角形三邊的長度,用逗號或空格分隔:"));
box.add(inputText);
box.add(send);
box.add(newLabel("收到的結果:"));
box.add(showResult);
connection.addActionListener(this);
send.addActionListener(this);
thread=newThread(this);
add(box);
setBounds(10,30,300,400);
setVisible(true);
validate();
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});
}
publicvoidactionPerformed(ActionEvente)
{if(e.getSource()==connection)
{try//請求和服務器建立套接字連接:
{if(socket.isConnected())
{}
else
{InetAddressaddress=InetAddress.getByName("127.0.0.1");
InetSocketAddresssocketAddress=newInetSocketAddress(address,4331);
socket.connect(socketAddress);
in=newDataInputStream(socket.getInputStream());
out=newDataOutputStream(socket.getOutputStream());
send.setEnabled(true);
thread.start();
}
}
catch(IOExceptionee){}
}
if(e.getSource()==send)
{Strings=inputText.getText();
if(s!=null)
{try{out.writeUTF(s);
}
catch(IOExceptione1){}
}
}
}
publicvoidrun()
{Strings=null;
while(true)
{try{s=in.readUTF();
showResult.setText(s);
}
catch(IOExceptione)
{showResult.setText("與服務器已斷開");
break;
}
}
}
}
服務器端
importjava.io.*;
importjava.net.*;
importjava.util.*;
publicclassServer
{publicstaticvoidmain(Stringargs)
{ServerSocketserver=null;
Server_threadthread;
Socketyou=null;
while(true)
{try{server=newServerSocket(4331);
}
catch(IOExceptione1)
{System.out.println("正在監聽");//ServerSocket對象不能重復創建
}
try{System.out.println("等待客戶呼叫");
you=server.accept();
System.out.println("客戶的地址:"+you.getInetAddress());
}
catch(IOExceptione)
{System.out.println("正在等待客戶");
}
if(you!=null)
{newServer_thread(you).start();//為每個客戶啟動一個專門的線程
}
}
}
}
classServer_threadextendsThread
{Socketsocket;
DataOutputStreamout=null;
DataInputStreamin=null;
Strings=null;
booleanquesion=false;
Server_thread(Sockett)
{socket=t;
try{out=newDataOutputStream(socket.getOutputStream());
in=newDataInputStream(socket.getInputStream());
}
catch(IOExceptione)
{}
}
publicvoidrun()
{while(true)
{doublea=newdouble;
inti=0;
try{s=in.readUTF();//堵塞狀態,除非讀取到信息
quesion=false;
StringTokenizerfenxi=newStringTokenizer(s,",");
while(fenxi.hasMoreTokens())
{Stringtemp=fenxi.nextToken();
try{a=Double.valueOf(temp).doubleValue();i++;
}
catch(NumberFormatExceptione)
{out.writeUTF("請輸入數字字符");
quesion=true;
}
}
if(quesion==false)
{doublep=(a+a+a)/2.0;
out.writeUTF(""+Math.sqrt(p*(p-a)*(p-a)*(p-a)));
}
}
catch(IOExceptione)
{System.out.println("客戶離開");
return;
}
}
}
}
6.解答略
習題十四
1.添加數據源,選擇驅動程序,命名數據源名稱。
2.importjava.sql.*;
importjava.util.*;
publicclassE{
publicstaticvoidmain(Stringargs){
Queryquery=newQuery();
StringdataSource="myData";
StringtableName="goods";
Scannerread=newScanner(System.in);
System.out.print("輸入數據源名:");
dataSource=read.nextLine();
System.out.print("輸入表名:");
tableName=read.nextLine();
query.setDatasourceName(dataSource);
query.setTableName(tableName);
query.setSQL("SELECT*FROM"+tableName);
query.inputQueryResult();
}
}
classQuery{
StringdatasourceName="";//數據源名
StringtableName="";//表名
StringSQL;//SQL語句
publicQuery(){
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundExceptione){
System.out.print(e);
}
}
publicvoidsetDatasourceName(Strings){
datasourceName=s.trim();
}
publicvoidsetTableName(Strings){
tableName=s.trim();
}
publicvoidsetSQL(StringSQL){
this.SQL=SQL.trim();
}
publicvoidinputQueryResult(){
Connectioncon;
Statementsql;
ResultSetrs;
try{
Stringuri="jdbc:odbc:"+datasourceName;
Stringid="";
Stringpassword="";
con=DriverManager.getConnection(uri,id,password);
DatabaseMetaDatametadata=con.getMetaData();
ResultSetrs1=metadata.getColumns(null,null,tableName,null);
int字段個數=0;
while(rs1.next()){
字段個數++;
}
sql=con.createStatement();
rs=sql.executeQuery(SQL);
while(rs.next()){
for(intk=1;k<=字段個數;k++){
System.out.print(""+rs.getString(k)+"");
}
System.out.println("");
}
con.close();
}
catch(SQLExceptione){
System.out.println("請輸入正確的表名"+e);
}
}
}
3.importjava.sql.*;
importjava.util.*;
publicclassE{
publicstaticvoidmain(Stringargs){
Queryquery=newQuery();
StringdataSource="myData";
StringtableName="goods";
query.setDatasourceName(dataSource);
query.setTableName(tableName);
Stringname="";
Scannerread=newScanner(System.in);
System.out.print("商品名:");
name=read.nextLine();
Stringstr="'%%'";
StringSQL="SELECT*FROM"+tableName+"WHEREnameLIKE"+str;
query.setSQL(SQL);
System.out.println(tableName+"表中商品名是"+name+"的記錄");
query.inputQueryResult();
}
}
classQuery{
StringdatasourceName="";//數據源名
StringtableName="";//表名
StringSQL;//SQL語句
publicQuery(){
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundExceptione){
System.out.print(e);
}
}
publicvoidsetDatasourceName(Strings){
datasourceName=s.trim();
}
publicvoidsetTableName(Strings){
tableName=s.trim();
}
publicvoidsetSQL(StringSQL){
this.SQL=SQL.trim();
}
publicvoidinputQueryResult(){
Connectioncon;
Statementsql;
ResultSetrs;
try{
Stringuri="jdbc:odbc:"+datasourceName;
Stringid="";
Stringpassword="";
con=DriverManager.getConnection(uri,id,password);
DatabaseMetaDatametadata=con.getMetaData();
ResultSetrs1=metadata.getColumns(null,null,tableName,null);
int字段個數=0;
while(rs1.next()){
字段個數++;
}
sql=con.createStatement();
rs=sql.executeQuery(SQL);
while(rs.next()){
for(intk=1;k<=字段個數;k++){
System.out.print(""+rs.getString(k)+"");
}
System.out.println("");
}
con.close();
}
catch(SQLExceptione){
System.out.println("請輸入正確的表名"+e);
}
}
}
4.將例子5中的代碼:
StringSQL="SELECT*FROM"+tableName+"ORDERBYname";
更改為:
StringSQL="SELECT*FROM"+tableName+"ORDERBYmadeTime";
可達題目要求。
5.使用預處理語句不僅減輕了數據庫的負擔,而且也提高了訪問數據庫的速度。
6.事務由一組SQL語句組成,所謂事務處理是指:應用程序保證事務中的SQL語句要么全部都執行,要么一個都不執行。步驟:
(1)使用setAutoCommit(booleanautoCommit)方法con對象首先調用setAutoCommit(booleanautoCommit)方法,將參數autoCommit取值false來關閉默認設置:
con.setAutoCommit(false);
(2)使用commit()方法。con調用commit()方法就是讓事務中的SQL語句全部生效。
(3)使用rollback()方法。con調用rollback()方法撤消事務中成功執行過的SQL語句對數據庫數據所做的更新、插入或刪除操作,即撤消引起數據發生變化的SQL語句操作,將數據庫中的數據恢復到commi()方法執行之前的狀態。
7.解答略。
要聞預告: Cosmos生態跨鏈穩定幣協議HarborProtocol將于12月5日發放代幣空投央行將于12月5日下調金融機構存款準備金率0.
1900/1/1 0:00:00根據Aave價格分析,多頭處于領先地位今天價格已上漲至62.79美元58.41美元的支撐明顯強勁Aave價格分析表明今天有強勁的看漲趨勢,因為該代幣在交易時段開始時暴跌后飆升.
1900/1/1 0:00:00圖片來源@視覺中國 文|盒飯財經,作者|畢安娣,編輯|趙晉杰加密貨幣行業寒冬之中,死亡也不請自來。當地時間11月28日,俄羅斯駐巴黎大使館證實了維亞切斯拉夫·塔蘭的死訊.
1900/1/1 0:00:00天目新聞記者何泠瑤 近日,在“2022年香港金融科技周”上,央行相關負責人公開回應數字人民幣的最新動向,包括“匿名可控”的安全性,以及多國之間的跨境支付“貨幣橋”.
1900/1/1 0:00:00來源:21世紀經濟報道 作者丨李強 今年雙十一,燒錢燒得最狠的是幣圈。 11月11日,全球前五大加密貨幣交易所FTX宣布申請破產,三年時間做到320億美元估值的造富神話,只用了不到十天歸.
1900/1/1 0:00:00關于鐘表,之前我們在文章《開宗立派:第一個鐘擺是誰發明的?為何路易十四風格的鐘表讓人難忘》《她與伏爾泰、莫里哀等人一起被人們永遠懷念.
1900/1/1 0:00:00