习题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提出EIP-3540:EOF v1:4月7日消息,以太坊 JavaScript 库 Ethers.js 提出 EIP-3540:EVM Object Format (EOF) v1,目前正在审查中。EIP-3540 为 EVM 字节码引入了一种容器格式,使分离代码和数据更加干净;允许根据平台规则在部署时验证字节码;支持更轻松引入新的突破性更改功能。[2022/4/7 14:09:51]
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发布v5.4.0 添加EIP-1559支持:官方消息,以太坊JavaScript库Ethers.js发布v5.4.0,添加EIP-1559支持。TransactionResponse.gasPrice现在可以为空,因此某些应用程序可能需要添加空检查。
据悉,以太坊两个最常用JavaScript库是Ethers.js和Web3.js。[2021/6/27 0:09:59]
理员”。要求线程“运货司机”占有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访问权限的方法作为子类的方法。如果所声明的成员的变量的名字和从父类继承来的成员变量的名字相同(声明的类型可以不同),在这种情况下,子类就会隐藏掉所继承的成员变量。
.不可以。
.abstract类。
.A类是B类的父类,当用子类创建一个对象b,并把这个对象b的引用放到父类的对象a中时,称a是b的上转型对象。
以太坊基金会JavaScript团队将发布EIP-1559 / 伦敦就绪版本:5月20日消息,以太坊基金会JavaScript团队今日凌晨发推表示,如果没有最新的错误或规范更改,将在下周内发布EIP-1559 / 伦敦就绪版本的EthereumJS Block,Tx,VM和Common库。[2021/5/20 22:23:56]
.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;
inti=0;
s=inTwo.readLine();
while(s!=null){
i++;
out.write(i+""+s);
out.newLine();
动态 | 以太坊钱包Shitcoin Wallet正注入恶意Java代码窃取数据:据Bitcoinist 12月31日消息,安全和反网络钓鱼专家Harry Denley发推文警告称,一个可作为Chrome浏览器扩展程序的以太坊钱包“Shitcoin Wallet”正在注入恶意javascript代码,企图从浏览器窗口抓取数据并发送至远程服务器erc20wallet.tk。[2019/12/31]
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("/");
}
catch(NumberFormatExceptionee)
{text3.setText("请输入数字字符");
}
}
validate();
}
}
5.importjava.awt.*;
创智赢家投资人Robert Herjavec:区块链前景巨大:\t\t\t\t \t\t\t\t《创智赢家》明星投资人、美国Herjavec集团CEO Robert Herjavec做客金融投资媒体The Street访谈节目时表示,长期来看,比特币会“留下来”,数字货币一定会被监管,投资者既应该进场、也应该离场。虽然Herjavec表示自己并不是币圈玩家,但他预测短期内比特币价格仍将上涨,甚至超过一月份20000美元的高位:“我把话放在这儿了,它会涨得更高的。”关于区块链,Herjavec认为,其会在十年内彻底显出巨大前景。[2018/2/19]
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.解答略。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。