精华内容
下载资源
问答
  • 吃透了这个项目,你的java基础部分已经非常棒了!!!一 、 项目概述技能要求 使用面向对象设计的思想 合理运用异常处理 使用集合框架存储数据,不使用数据库 使用 I/O 操作实现对文件的读写开发工具JDK 7.0...

    今天给大家一个比较综合的项目:嗖嗖移动业务大厅。项目功能很多,概括的功能也很全面。吃透了这个项目,你的java基础部分已经非常棒了!!!

    一 、 项目概述

    技能要求

     使用面向对象设计的思想

     合理运用异常处理

     使用集合框架存储数据,不使用数据库

     使用 I/O 操作实现对文件的读写

    开发工具

    JDK 7.0、MyEclipse。

    需求概述

    移动、联通、电信是国内三大通信运营商,每个运营商提供了不同的品牌套餐来应对不同的用户群,例如北京移动,主要有全球通、神州行、动感地带三大品牌套餐,每种套餐的内容和资费不同。现嗖嗖移动是一拟定的通信运营商,提供了话唠套餐、网虫套餐、超人套餐,各种套餐所包含的服务内容及资费如表 1 所示。

    6a5a2c956f5531902b0b470d90dfd64f.png

    如实际使用中,超出套餐内包含的通话时长、短信条数或上网流量时,按以下规则计费:

     超出的通话:0.2 元/分钟

     超出的短信:0.1 元/分钟

     超出的上网流量:0.1 元/MB

    本项目嗖嗖移动业务大厅提供了嗖嗖移动用户的日常常用功能,包括新用户注册、本月账单查询、套餐余量查询、打印消费详单、套餐变更、办理退网、话费充值、查看消费记录、查看资费说明功能,另外,还可以模拟用户通话、上网、发短信的场景进行相应的扣费并记录消费信息。各功能介绍如表 2 所示。

    9225db3e77965f9088d53aa44c1b36fb.png

    729c577a239fb4645880fa57b1ae195b.png

    二 、 项目业务流程描述

    1.整体业务流程

    嗖嗖移动项目的各个功能实际都是挂在功能菜单上的,其中主菜单包含 6 个功能,当用户输入 1~5 之间的功能编号后,验证卡号,如果该卡号已注册,执行相应功能后返回主菜单,否则,退出系统。如图 1 所示。

    55b42bcde10007840c06a13e09d08317.png

    图 1 主菜单

    当使用已注册用户登录并通过验证后,即显示二级菜单,包含 5 个功能,如图 2 所示。当输入 1~5 之外的功能编号时,返回主菜单。

    d7208bc948c93b8433a136c42e09160a.png

    图 2 二级菜单

    2. 用户注册

    该功能可以看作是去营业厅办理新卡的过程。主要分成以下几个步骤:

    1) 选择卡号(从随机生成的 9 个以“139”开头的卡号中选择一个,输入序号即可)。

    2) 选择套餐(共 3 类套餐,选择其中一个,输入所对应的序号即可)。

    3) 输入用户名、密码信息(相当于现在各营业厅的实名登录,输入用户名和密码即可)。

    4) 输入预存话费金额:这里需保存预存的金额足以支付一个月的套餐费用,否则给出信息提示“您预存的话费金额不足以支付本月固定套餐资费,请重新充值!”。

    5) 注册新卡

    实现效果如图 3 所示。

    ee9390dc4489edf6deba5b3e6e9825ef.png

    图 3 用户注册

    3. 本月账单查询

    本月账单可以显示以下信息:

     卡号。

     套餐月资费。

     合计(是套餐固定资费和超出套餐使用费用总和)。

     账户余额。

    运行效果如图 4 所示。

    fa4318776af584d94513ddfeae829e82.png

    图 4 本月账单查询

    4. 套餐余量查询

    本功能用来显示该卡所属套餐内所剩余的免费通话时长、短信条数、上网流量,不同品牌套餐所支持的服务不同,因此显示的内容不同。运行效果如图 5 所示。

    13cb79462da5b1728f2e437f1f787f4f.png

    图 5 套餐余量查询

    5. 添加和打印消费清单

    实现向消费记录中添加一条该卡的消费记录(该功能可在使用嗖嗖功能中调用),并实现打印该卡的消费记录,打印前先从消费记录中查找是否存在此卡的消费记录,如存在则提示“已添加一条消费记录。”,将消费记录输出到文本文件中,格式如图 5 所示。如不存在,提示用户相应信息,如图 6 所示。

    69695f50e218b03ee1e578daafef14c7.png

    图 5 消费记录

    1de17b71ac0090625fbcb570c52105f7.png

    图 6 该卡不存在消费记录

    6.使用嗖嗖

    (1)随机进入某个场景

    模拟嗖嗖用户使用卡的过程。选择该功能后,输入当前卡号,通过验证后,可随机进入表 3 所示的 6 个场景(当然还可以再设计其他场景),要求所进入的场景的服务类型是该卡所属套餐所支持的(例如网虫套餐只能进入服务类型为“上网”的场景)。

    b9b6c50d5098fb14babc3f8213fc788f.png

    85a81da5fe039156f16256eae210ad3d.png

    (2)模拟消费

    进入该场景这之后,将按场景的描述要求消耗套餐余量,如套餐余量不足,需按套餐外的资费规则扣费,成功消费后,添加一条消费记录。效果如图 7 所示。

    adb0b6b265312d9f4a5e9a48ce052a3e.png

    图 7 使用嗖嗖成功

    余额不足时,提示信息。如本场景通话时长为 30 分钟,当通话至 10 分钟时余额不足,抛出异常,并提示用户“本次已通话 10 分钟,您的余额不足,请充值后再使用!”如图 8所示

    c5b280a0a77a0d8d43e33ef6fb1861b9.png

    图 8 余额不足的情况

    (3)消费结束,添加消费记录

    消费完毕,在消费列表中添加一条消费记录。并提示用户“已添加一条消费记录!”。按实际消费添加消费记录,除非没有消费。如图 8 的情况,则此条消费记录只需记录实际通话时长 10 分钟。

    7. 办理退网

    本功能可实现将当前卡用户从已注册用户列表中删除,删除后直接退出系统。运行效果如图 9 所示。

    3874869feb189e7bbff52fe91c6821af.png

    图 9 办理退网

    8. 套餐变更

    本功能类似我们去营业厅变量套餐,可以充分体会到使用面向对象后,代码更加灵活,可维护性更强。

    本项目中没有引入对日期的记录和处理,因此,这里默认套餐变更时间为本月的开始,选择变量后的套餐为当前套餐之外的其他类型,否则显示信息提示。如图 10 所示。

    63186ca63272dd7544dd514270f1dcd8.png

    图 10 选择套餐错误

    选择套餐正确之后,还需判断当前余额是否足以支付一个月的套餐资费,如不足,提示错误信息。如图 11 所示。

    8f1a007eb1f4ef119471ba9b900d4652.png

    图 11 变更套餐余额不足

    如上述两个条件都满足时,套餐变量成功,显示相应信息,如图 12 所示。当前卡实际使用数据清零,当前卡所属套餐修改为变量后的套餐类型,当前卡余额减去新套餐月资费,本月消费金额修改为新套餐月资费。

    ba6d3db1b2a2562373cb34bcc6e122dd.png

    图 12 套餐变更成功

    9. 话费充值

    可为指定卡号充值,要求充值金额最少 50 元。充值成功后提示信息。运行效果如图 13所示。

    6c7dbad8aefb9ba96b7823a468113c65.png

    图 13 充值成功

    通过最少充值金额验证后,修改当前卡余额即可。

    10. 查看资费说明

    此功能需实现将文本文件(套餐资费说明.txt)中的信息显示到控制台。本功能需使用 I/O 操作实现文本文件的写入。

    以上是嗖嗖项目的整体需求概述,下面介绍如何搭建嗖嗖项目的框架结构:

    一、 实体类(Entity)

    1ea23355a87b46c785b7e139f440277c.png

    8a80a4b48200c5279153cd072f92d3e8.png

    7091a5481c0398731addac6bb8e4a66e.png

    95382af150e07966eb31075d1f0658cd.png

    二、工具类 (utils)

    1c788e7575d3feb911fd9ce58721aa13.png

    下面是项目的整体代码结构:

    9d7a48c0952ce37d4b88b4fa8b0f6c04.png

    实体类中的其中一个手机卡类:

    1 package cn.soso.entity; 2 /** 3 * 手机卡 4 * 5 */ 6 public class MobileCard { 7 private String cardNumber; //卡号 8 private String userName; //用户名 9 private String passWord; //密码 10 private ServicePackage serPackage; //所属套餐 11 private double consumAmount; //当月消费金额 12 private double money; //账户余额 13 private int realTalkTime; //实际通话时长(分钟) 14 private int realSMSCount; //实际发送短信条数(条) 15 private int realFlow; //实际上网流量 16 17 public MobileCard(){} 18 19 public MobileCard(String userName, String passWord, String cardNumber, 20 ServicePackage serPackage, double consumAmount, double money) { 21 super(); 22 this.userName = userName; 23 this.passWord = passWord; 24 this.cardNumber = cardNumber; 25 this.serPackage = serPackage; 26 this.consumAmount = consumAmount; 27 this.money = money; 28 } 29 30 public String getUserName() { 31 return userName; 32 } 33 34 public void setUserName(String userName) { 35 this.userName = userName; 36 } 37 38 public String getPassWord() { 39 return passWord; 40 } 41 42 public void setPassWord(String passWord) { 43 this.passWord = passWord; 44 } 45 46 public String getCardNumber() { 47 return cardNumber; 48 } 49 50 public void setCardNumber(String cardNumber) { 51 this.cardNumber = cardNumber; 52 } 53 54 public ServicePackage getSerPackage() { 55 return serPackage; 56 } 57 58 public void setSerPackage(ServicePackage serPackage) { 59 this.serPackage = serPackage; 60 } 61 62 public double getConsumAmount() { 63 return consumAmount; 64 } 65 66 public void setConsumAmount(double consumAmount) { 67 this.consumAmount = consumAmount; 68 } 69 70 public double getMoney() { 71 return money; 72 } 73 74 public void setMoney(double money) { 75 this.money = money; 76 } 77 78 public int getRealTalkTime() { 79 return realTalkTime; 80 } 81 82 public void setRealTalkTime(int realTalkTime) { 83 this.realTalkTime = realTalkTime; 84 } 85 86 public int getRealSMSCount() { 87 return realSMSCount; 88 } 89 90 public void setRealSMSCount(int realSMSCount) { 91 this.realSMSCount = realSMSCount; 92 } 93 94 public int getRealFlow() { 95 return realFlow; 96 } 97 98 public void setRealFlow(int realFlow) { 99 this.realFlow = realFlow;100 }101 102 /**103 * 显示卡信息104 */105 public void showMeg(){106 System.out.println("卡号:"+this.cardNumber+" 用户名:"+this.userName+" 当前余额:"+this.money+"元。");107 this.serPackage.showInfo();108 } 109 }

    2eba71fcb2e880c4646f3d78a23029c7.png

    整体业务流程类:

    1 package cn.soso.biz; 2 3 import java.util.Scanner; 4 5 import cn.soso.common.Common; 6 import cn.soso.entity.MobileCard; 7 import cn.soso.entity.ServicePackage; 8 import cn.soso.utils.CardUtil; 9 10 /** 11 * 业务类 12 * 13 * 14 */ 15 public class SosoMgr { 16 Scanner input = new Scanner(System.in); 17 CardUtil utils = new CardUtil(); 18 19 public static void main(String[] args) { 20 SosoMgr soso = new SosoMgr(); 21 soso.mainMenu(); 22 System.out.println("谢谢使用!"); 23 } 24 25 /** 26 * 主流程 27 */ 28 public void mainMenu() { 29 int menuChoose = 0; 30 String mobileNumber= ""; 31 String password = ""; 32 utils.init(); 33 utils.initScenes(); 34 //Common.typesInit(); 35 do { 36 System.out.println("\n*************欢迎使用嗖嗖移动业务大厅***************"); 37 System.out.println("1.用户登录 2.用户注册 3.使用嗖嗖 4.话费充值 5.资费说明 6.退出系统"); 38 System.out.print("请选择:"); 39 menuChoose = input.nextInt(); 40 // 分支语句:根据功能编号执行相应功能 41 switch (menuChoose) { 42 case 1: 43 //用户登录 44 System.out.print("请输入手机卡号:"); 45 mobileNumber = input.next(); 46 System.out.print("请输入密码:"); 47 password = input.next(); 48 if (utils.isExistCard(mobileNumber, password)) { 49 cardMenu(mobileNumber); 50 }else{ 51 System.out.println("对不起,您输入的信息有误,无法登录!"); 52 } 53 continue; 54 case 2: 55 //用户注册 56 registCard(); 57 continue; 58 case 3: 59 60 //使用嗖嗖 61 System.out.print("请输入手机卡号:"); 62 mobileNumber = input.next(); 63 64 if (utils.isExistCard(mobileNumber)) { 65 try { 66 /* System.out.println("****使用之前****"); 67 utils.showRemainDetail(mobileNumber); 68 utils.showAmountDetail(mobileNumber);*/ 69 utils.userSoso(mobileNumber); 70 } catch (Exception e) { 71 System.err.println(e.getMessage()); 72 } 73 }else{ 74 System.out.println("对不起,该卡号未注册,不能使用!"); 75 } 76 77 /*System.out.println("****使用之后****"); 78 utils.showRemainDetail(mobileNumber); 79 utils.showAmountDetail(mobileNumber);*/ 80 continue; 81 case 4: 82 //话费充值 83 System.out.print("请输入充值卡号:"); 84 mobileNumber = input.next(); 85 if (utils.isExistCard(mobileNumber)) { 86 System.out.print("请输入充值金额:"); 87 double money = input.nextDouble(); 88 utils.chargeMoney(mobileNumber, money); 89 }else{ 90 System.out.println("对不起,要充值的卡号未注册,无法充值!"); 91 } 92 continue; 93 case 5: 94 System.out.println("\n*****资费说明******"); 95 utils.showDescription(); 96 continue; 97 case 6: 98 //退出系统 99 break;100 default:101 //选择其他数字退出系统102 break;103 }104 break;105 } while (true);106 }107 108 /**109 * 手机卡功能菜单110 * 111 * @param number112 * @return113 */114 public int cardMenu(String mobileNumber) {115 int menuChoose = 0;116 do {117 System.out.println("\n*****嗖嗖移动用户菜单*****");118 System.out.println("1.本月账单查询");119 System.out.println("2.套餐余量查询");120 System.out.println("3.打印消费详单");121 System.out.println("4.套餐变更");122 System.out.println("5.办理退网");123 System.out.print("请选择(输入1~5选择功能,其他键返回上一级):");124 menuChoose = input.nextInt();125 switch (menuChoose) {126 case 1:127 System.out.println("\n*****本月账单查询******");128 utils.showAmountDetail(mobileNumber);129 continue;130 case 2:131 System.out.println("\n*****套餐余量查询******");132 utils.showRemainDetail(mobileNumber);133 continue;134 case 3:135 System.out.println("\n*****消费详单查询******");136 utils.printConsumInfo(mobileNumber);137 continue;138 case 4:139 System.out.println("\n*****套餐变更******");140 System.out.print("1.话唠套餐 2.网虫套餐 3.超人套餐 请选择(序号):"); 141 utils.changingPack(mobileNumber, input.next());142 continue;143 case 5:144 System.out.println("\n*****办理退网******");145 utils.delCard(mobileNumber);146 System.out.println("谢谢使用!");147 System.exit(1); //办理退网后退出系统 148 149 }150 151 break;152 } while (true);153 return menuChoose;154 }155 156 /**157 * 注册新卡流程158 */159 public void registCard(){160 String[] newNumbers = utils.getNewNumbers(9);161 //显示可供选择的手机号列表162 System.out.println("*****可选择的卡号*****");163 164 for(int i=0;i<9;i++){165 System.out.print((i+1)+"."+newNumbers[i]+"\t\t");166 if((i+1)%3==0){167 System.out.println();168 }169 }170 //选择手机号171 System.out.print("请选择卡号(输入1~9的序号):"); 172 String number = newNumbers[input.nextInt()-1];173 174 //选择套餐类型175 System.out.print("1.话唠套餐 2.网虫套餐 3.超人套餐, ");176 System.out.print("请选择套餐(输入序号):");177 //utils.getPackList();178 //获取套餐对象 179 ServicePackage pack = utils.createPack(input.nextInt());180 181 //输入用户名182 System.out.print("请输入姓名:");183 String name = input.next();184 185 //输入密码186 System.out.print("请输入密码:");187 String password = input.next();188 189 //输入预存话费金额190 double money = 0;191 System.out.print("请输入预存话费金额:");192 money = input.nextDouble();193 while(money

    展开全文
  • 简述java异常处理机制 : java提供了两种处理异常的机制:一是捕获异常,二是声明抛出异常. 在java运行过程中系统得到一个异常对象时,它会沿着方法的调用栈逐层回溯,寻找处理这个异常的代码,,找到后,系统把当前异常...

    线程和进程的区别:

    (1)进程是运行中的程序,拥有自己独立的内存空间和资源;

    (2)一个进程可以有一个或多个线程组成,且至少有一个线程称为主线程; (3)线程是最小的处理单位,多个线程共享一块内存和资源;

    (4)当一个线程改变了所属进程的变量时,其它线程下次访问该变量时得到这种改变。 简述什么是多线程。

    线程的最主要功能是多任务处理,即多线程。多线程也就是在主线程中有多个线程在运行,多个线程的执行是并发的,在逻辑上“同时”,而不管是不是物理上的“同时”。

    多线程和传统上的单线程在程序设计上的区别在于: 由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度、同步等问题是需要重点留意的。

    引入线程的优点:

    1 充分利用CPU资源。 2简化编程模型。

    3简化异步事件处理。4使GUI更有效率。5节约成本 线程状态:

    Thread和Runnable区别:

    (1)Thread是类,具有线程的所有方法,其对象就是一个线程对象。但继承Thread,就不能再继承其他的类(Java只支持单一继承)。

    (2)Runnable是接口,只提供run()方法。实现该接口的类还可以继承其他类,但其对象不是线程对象,不能直接运行,必须通过Thread将其启动。 通过Runnable接口创建线程的步骤如下:

    1、实例化实现Runnable接口的类;

    2、建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法;

    3、通过Thread类的start()方法建立线程。 线程优先级:

    (1)线程的优先级代表该线程的重要程度。

    (2)当有多个线程同时处于可执行状态并等待获得CPU时间时,线程调度系统根据各个线程的优先级来决定CPU分配时间。

    (3)优先级高的线程有更大的机会获得CPU时间。

    (4)线程的默认优先级值:Thread.NORM_PRIORITY,值为5。每个新线程均继承创建线程的优先级。setPriority()设置线程优先级。

    值为MIN_PRIORITY(1)和MAX_PRIORITY(10)之间的值。getPriority() 获取线程的优先级值。 线程通信:

    (1)线程通信的方法:wait()、notify()和notifyAll() (2)调用notify()方法时可以随机选择一个在该对象调用wait()方法的线程,解除它的阻

    1 塞。

    (3)调用notifyAll()方法可以唤醒等待该对象的所有线程。但唤醒时无法控制唤醒哪个线程,唤醒过程完全由系统来控制。

    (4)notify()方法和notifyAll()方法只能在同步方法或同步块内部使用。 产生死锁的原因主要是:

    所谓死锁,是指两个或多个线程都在等待对方释放对象资源而进入的一种不可“调节”的状态。

    1、因为系统资源不足;

    2、进程运行推进的顺序不合适;

    3、资源分配不当等。

    如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 wait()方法区别于sleep()方法的是:

    (1)wait()方法调用时会释放对象锁,而sleep()方法不会 (2)sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用 (3)sleep()是Thread类的Static(静态)的方法; (4)wait()方法是Object类里的方法;wait()使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中的线程。

    (5)wait()必须放在synchronized block中,否则会在运行时扔出”java.lang.IllegalMonitorStateException“异常。

    通信协议指网络中传递、管理信息的一些规范。TCP/IP协议,IPX/SPX协议,NetBEUI协议等。

    TCP/IP协议

    IP协议:网络层协议,保证计算机之间发送和接收数据,能适应各种网络硬件。 无连接,不可靠的协议。

    TCP协议:端对端的协议,端与端之间建立连接、发送、接收数据以及终止连接。 利用重发技术和拥塞控制机制,向应用程序提供可靠通信连接。

    区别与联系:IP协议只保证计算机能发送和接受分组数据,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。两个协议统称为TCP/IP协议。

    A类地址:0-126,默认掩码:255.0.0.0。B类地址:128-191,默认掩码:255.255。C类地址:192-223,默认掩码:255.255.255.0。D类地址:广播地址,E类地址保留。

    常用端口以及对应的服务 7:Echo服务端口

    21:FTP服务端口

    23:Telnet服务端口 25:SMTP服务端口 80:HTTP服务端口 网络API:

    (1)Java中有关网络方面的功能都定义在java.net包中。 (2)使用InetAddress类封装IP地址和域名

    (3)URL由四部分组成。协议名:指明获取资源所使用的传输协议。主机名:指定获取资源的域名。端口:指定服务的端口。文件路径:指定访问的文件名以及路径。 URLConnection类:

    (1)通过URL的方法openStream()只能从网络上读取数据,如果如要输出数据,就要用到URLConnection类。

    2 (2)URLConnection是个抽象类,代表与URL指定的数据源的动态连接。

    (3)URLConnection类提供比URL类更强的服务器交互控制,允许用Post或者Put和其他HTTP请求方法将数据送回服务器。 Socket的工作步骤:

    1根据指定的地址和端口创建一个Socket对象。

    2调用getInputStream()方法或getOutputStream()方法打开连接到Socket的输入/输出流。 3客户端与服务器根据一定的协议交互,直到关闭连接。 4关闭客户端的Socket。 ServerSocket的工作步骤:

    1根据指定端口创建一个新的ServerSocket对象。

    2调用ServerSocket的accept()方法,在指定的端口监听到来的连接。Accpet()一直处于阻塞状态,知道有客户端试图建立连接。这时accpet()方法返回连接客户端与服务器的Socket对象。

    3调用getInputStream()方法或getOutputStream()方法打开连接到Socket的输入/输出流。

    4服务器与客户端根据一定的协议交互,直到关闭连接。

    5关闭服务器端的Socket。6回到第2步,继续监听下一次的连接。 多线程Socket通信实现:

    服务器总是在指定的端口监听是否有客户端请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应客户请求,而服务器本身在启动完线程之后马上有进入监听状态,等待下一个客户的到来。 synchronized两种使用方式:

    1.修饰方法,使调用该方法的线程均能获得该对象的锁。 2.放在代码块中,修饰对象,当前代码获得对象的锁。。。锁定的是对象,而不是方法或代码块。

    Swing的结构:

    (1)Swing组件位于javax.swing包中,javax是一个Java扩展包。 (2)在javax.swing包中,定义了两种类型的组件:

    顶层容器(不包含在其他容器中的容器,JFrame,JApplet,JDialog和Jwindow 4个)和轻量级组件。

    Swing组件都是AWT的Container类的直接子类和间接子类。 布局:

    (1)用来管理组件在容器中的布局格式。

    (2)FlowLayout, BorderLayout, GridLayout和CardLayout四种。位于java.awt包中。 (3)FlowLayout流布局一般用来安排面板中的按钮。它使得按钮呈水平放置,直到同一条线上再也没有适合的按钮。线的对齐方式由align属性确定。 (4)BorderLayout边界布局,JFrame的默认布局。

    (5)GridLayout网格布局,类似于表格,按照行列排列所有组件,每个单元格大小一样。添加组件使,按照从左至右,自上而下的顺序加入。

    (6)CardLayout卡片布局,将加入到容器的组件看作一叠卡片,只能看到最上面的组件 常用的事件类:

    java.awt.event包中常用的事件类:

    ActionEvent, AdjustmentEvent, ItemEvent, FocusEvent, KeyEvent, MouseEvent, WindowEvent。

    3 java.awt.event包中常用的监听接口:

    ActionListener,AdjustmentListener, ItemListener, FocusListener, KeyListener, MouseListener, WindowListener。 适配器:

    (1)扩展监听接口时,有些事件处理方法是不需要的,但必须重写。

    (2)出于简化代码的目的,java.awt.event包中提供了一个抽象适配器类,分别实现每个具有多个事件处理方法的监听接口。

    (3)继承适配器后,可以仅重写需要的事件处理方法。 事件处理的步骤:

    1创建监听类,监听类中,事件处理方法中编写事件处理代码 2创建监听对像。

    3利用组件的addXXXListener()方法将监听对象注册到组件上 3者区别联系:

    监听类:是一个扩展监听接口的类,可以扩展一个或多个监听接口。

    事件处理方法:是监听接口中已经定义好的相应的事件处理方法,要重写。 监听对象:是监听类的一个实例对象,具有监听功能。

    事件用于实现用户界面的交互,是GUI编程的重要组成部分。 Java最新的事件处理方法是基于委派事件模型的。

    事件包含3个组件:事件对象、事件源和事件处理程序。

    事件是一个描述事件源状态改变的对象,不是通过new 创建的,而是由用户操作触发的。 一个事件源可能会生成不同类型的事件。 可以将一个事件发送到多个监听器对象。

    监听类是实现监听接口的类,监听对象是监听类的实例化对象 在组件中注册监听器的方法是:addXxxxListener()。 适配器是实现相关监听接口的类,目的是简化程序代码 创建菜单的步骤:

    1创建一个JMenuBar菜单栏对象,将其设置到窗体中。

    2创建若干个JMenu菜单对象,将其放置到JMenuBar对象中,或按要求放到其他JMenu对象中。

    3创建若干个JMenuItem菜单项对中,将其放置到对应的JMenu对象中。 JPopupMenu:弹出式菜单 位置不固定、无标题

    (JDialog类)模式对话框:必须首先对该对话框进行响应(单击“确定”或“取消”)后,才能对对话框以外的应用程序进行操时;

    无模式对话框:可以不响应对话框,对其以外的程序进行操作。 JTable类--表格模型 TableModel:

    TableModel本身是个接口,若要实现此接口建立表格非常复杂,因此Java提供了两个类实现了TableModel接口: (1)AbstractTableModel:抽象类,实现了大部分的TableModel方法。AbstractTableModel 类 对 TableModel 接口中大部分方法提供部分实现,它关注监听器的管理,并生成TableModeEvents 事件,以及把他们发送到监听器提供方便。

    (2)DefaultTableModel:继承AbstractTableModel,是默认的表格模型类。

    (3)要创建一个TableModel,可以简单扩展AbstractTableModel类并且至少实现下列三

    4 个方法 public int getRowCount()、public int getColumnCount()、public Object getValueAt(int row,int column) 使用JDBC访问数据库的基本步骤:

    1加载JDBC驱动程序(Class.forName(“oracle.jdbc.driver.OracleDriver”); )。2建立数据库连接(Class.forName(“oracle.jdbc.driver.OracleDriver”); Connection conn = DriverManager.getConnection(

    “jdbc:oracle:thin:@localhost:1521:orcl”,

    “scott”, “tiger”);)。3创建Statement对象 4执行SQL语句。5 处理返回结果。6 关闭创建的对象 Statement中3个执行方法的不同:

    (1)execute():用于执行返回多个结果集、多个更新计数或二者的混合。 (2)executeUpdate():用于执行insert、update、delete语句及SQl DDL语句。插、更、删效果是修改表中的行或列,返回值一个整数,即影响行数。对于建立、删除返回值为0。 (3)executeQuery():用于产生单个结果集的语句,例如select语句。 事务的ACID特性:

    数据库中的操作通常是一个独立单元,事务是构成单一逻辑单位的操作集合。 已提交事务是指成功执行完毕的事务,未能成功完成的事务成为中止事务,对中止事务造成的变更需要进行撤销处理,成为事务回滚。 原子性(Atomicity )、一致性( Consistency )、隔离性( Isolation)、持久性(Durabilily)。

    保存点: 集元数据: 集元数据 Meta Data,是有关数据库和表格结构的信息,如数据库的表、表的列、表的索引、数据类型、对SQL的支持程度等信息。 DatabaseMetaData接口

    (1)主要用来得到数据库的信息,如:数据库中所有表格的列表、系统函数、关键字、数据库产品名和数据库支持的JDBC驱动名。

    (2)通过Connection.getMetaData()方法创建。 (3)主要提供了两大类方法:

    1.返回类型boolean的,用于检查数据库或驱动器是否支持某项功能。 2.用于获取数据库或驱动器本身的某些特征值。

    通过Statement实现静态SQL查询

    使用PreparedStatement实现动态SQL查询 使用CallableStatement实现存储过程的调用

    DatabaseMetaData接口用于得到关于数据库的信息 ResultSetMetaData接口主要用来获取结果集的结构 JDBC默认的事务提交模式是自动提交

    通过setAutoCommit()方法控制自动提交模式,使用rollback()方法实现事务回滚 开发RMI--步骤:

    1 定义远程接口。2 实现远程接口。3 编写和实现远程服务类。4 编写客户端程序 RMI机制原理:

    2个独立程序。服务器端、客户端 服务器端:

    5 (1)创建多个远程对象,

    (2)调用注册服务程序使得名字与远程对象关联,使得这些远程对象能够被引用, (3)等待客户端调用这些远程对象的方法。 客户端:

    (1)在服务器上的注册服务程序中用远程对象名称查找一个或者多个远程对象的引用, (2)调用远程对象的方法。

    JOptionPane类中四种对话框的静态方法

    1消息对话框(showmessagedialog)2输入对话框(input) 3确认对话框(Option)4选项对话框(Confirm) Locale常用定义:

    Locale类是用来标识本地化消息的重要工具类。该类包含对主要地理区域的地域化特征的封装。通过设定Locale为特定的国家或地区,提供符合当地文化习惯的字体、图标和表达格式。

    简述java异常处理机制 :

    java提供了两种处理异常的机制:一是捕获异常,二是声明抛出异常. 在java运行过程中系统得到一个异常对象时,它会沿着方法的调用栈逐层回溯,寻找处理这个异常的代码,,找到后,系统把当前异常对象教给这个方法处理,这就是捕获异常.如果方法中不知道如何处理所出现的异常,则可在定义方法时,声明抛出异常.

    使用JDBC查询Scott用户的emp表中的所有信息? String sql="select * from emp"; PreparedStatement stmt =conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); int columnCount = rs.getMetaData().getColumnCount(); //这地方补充了一下 while (rs.next()) { for (int i = 1; i <= columnCount; i++) { System.out.println( md.getColumnName(i) + " -- " + rs.getObject(i) ); } } JDBC API的三个组成部分: 1 JDBC驱动程序管理器 2 JDBC驱动程序测试包 3 JDBC-OCBC桥

    加载JDBC驱动程序中加载驱动程序的一种简单方法是使用Class.forName方法显示加载: Class.forName(“DriverName”); 对于JDBC/ODBC桥,加载JDBC-ODBC数据库驱动程序的方法为: Class.forName(“sun.jdnc.odbc.JdbcOdbcDriver”);

    6 而对于Oracle数据库,加载数据库驱动程序的方法为: Class.forName(“oracle.jdbc.driver.OracleDriver”); 对于Oracle驱动连接的是URL是:

    Jdbc:oracle:thin:@serverName:port:instance 通过Oracle驱动获得数据库连接的实力语句:

    Class.forName(“oracle.jdbc.driver.OracleDriver”); Connection conn = DriverManager.getConnection( “jdbc:oracle:thin:@localhost:1521:orcl”,”scott”,”tiger”);

    多线程Socket通信中多个while循环是用来监听的。

    TableModel本身是一个借口,若是要直接实现此接口来建立表格是非常复杂的,因此java中还提供了AbstractTableModel和DefaultTableModel这两个类分别实现TableModel接口。 ListSelecyionModel接口中的常量:

    static final int SINGLE_SELECTION 单一选择模式 static final int SINGLE_INTERVAL_SELECTION 连续区间选择模式 static final int MULTIPLE_INTERVAL_SELECTION 多重选择模式

    简述实现一个自定义的对话框的步骤?

    (1)继承JDialog类,在构造方法中传入参数 (2)在对话框中添加用户界面组件 (3)添加事件处理 (4)设置对话框大小

    什么是检查型异常,非检查型异常

    检查型异常:指编译器要求必须处置的异常,是程序运行时由于外界因素造成的一般性异常 非检查型异常:指编译器不要求强制处理的异常,该异常是因设计或实现方式不当导致的,可以避免这种异常的发生. 简述一下使用泛型有什么优点?

    答:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

    2.简要描述ArrayList,Vector,LinkedList的存储性能和特性? 答:ArrayList支持可随需要而调整的动态数组。其内部封装了一个动态再分配的Object[]数组。每个ArrayList对象有一个capacity,表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity自动增加。在向一个ArrayList对象添加大量元素的程序中,可使用ensureCapacity()方法增加Capacity,此法可以减少或增加重分配的数量。Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进 行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 3.简述Collection和Collections的区别。

    答:java.util.Collection 是一个集合接口集合接口集合接口集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。 java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态静态静态静态多

    7 态方法多态方法多态方法多态方法。此类不能实例化不能实例化不能实例化不能实例化,就像一个工具类个工具类个工具类个工具类,服务于Java的Collection框架。 Java代码 。

    4、List、Map和Set三个接口,存取元素时,各有什么特点? 答:List 以特定次序来持有元素,可有重复元素。 Set 无法拥有重复元素,内部排序。 Map 保存key-value值,value可多值。

    5、描述HashMap和Hashtable的区别。 答:Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。 最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。

    6、简述序列化和反序列化概念?

    对象的序列化就是把对象写入到一个输出流中,对象的反序列化是指从一个输入流中读取一个对象。

    7、简述适配器与监听接口的区别?

    区别:适配器只需要重写需要的事件处理方法,而监听接口需要实现全部的方法。

    监听接口中定义了抽象的事件处理方法,这些方法针对不同的操作进行不同的处理。在程序中,通常使用监听类实现监听接口中的事件处理方法。监听接口定义在java.awt.event包中,该包中提供了不同事件的监听接口,这些接口中定义了不同的抽象的事件处理方法。 扩展监听接口时,有些事件处理方法是不需要的,但必须重写。

    处于简化代码的目的,java.awt.event包中有提供了一套抽象适配器类,分别实现每个具有多个事件处理方法的监听接口。这样继承适配器后,可以仅重写需要的事件处理方法。

    8

    建议开发较大规模的java应用程序都考虑使用mvc模式

    首先考虑系统架构,学习使用第三方成熟的jar包,并import到自己的项目中

    1、 开发时考虑包的规划,model,view层

    2、 应用结对编程原理进行开发,随时保证程序的可运行性。(针对接口的编程)

    3、 编译调试代码,注意异常问题的处理

    4、 注意javadoc文档的编写应该和代码的编写同步进行

    5、 Log4j日志的记录,Junit单元测试工具的使用

    6、 代码编写完毕,将其使用jar打包成可执行的jar文件

    7、 使用Ant自动化编译测试打包部署工具完成代码的最终发布

    线程和进程的区别:

    (1)进程是运行中的程序,拥有自己独立的内存空间和资源;

    (2)一个进程可以有一个或多个线程组成,且至少有一个线程称为主线程; (3)线程是最小的处理单位,多个线程共享一块内存和资源;

    (4)当一个线程改变了所属进程的变量时,其它线程下次访问该变量时得到这种改变。 简述什么是多线程。

    线程的最主要功能是多任务处理,即多线程。多线程也就是在主线程中有多个线程在运行,多个线程的执行是并发的,在逻辑上“同时”,而不管是不是物理上的“同时”。

    多线程和传统上的单线程在程序设计上的区别在于: 由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度、同步等问题是需要重点留意的。

    引入线程的优点:

    1 充分利用CPU资源。 2简化编程模型。

    3简化异步事件处理。4使GUI更有效率。5节约成本 线程状态:

    Thread和Runnable区别:

    (1)Thread是类,具有线程的所有方法,其对象就是一个线程对象。但继承Thread,就不能再继承其他的类(Java只支持单一继承)。

    (2)Runnable是接口,只提供run()方法。实现该接口的类还可以继承其他类,但其对象不是线程对象,不能直接运行,必须通过Thread将其启动。 通过Runnable接口创建线程的步骤如下:

    1、实例化实现Runnable接口的类;

    2、建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法;

    3、通过Thread类的start()方法建立线程。 线程优先级:

    (1)线程的优先级代表该线程的重要程度。

    (2)当有多个线程同时处于可执行状态并等待获得CPU时间时,线程调度系统根据各个线程的优先级来决定CPU分配时间。

    (3)优先级高的线程有更大的机会获得CPU时间。

    (4)线程的默认优先级值:Thread.NORM_PRIORITY,值为5。每个新线程均继承创建线程的优先级。setPriority()设置线程优先级。

    值为MIN_PRIORITY(1)和MAX_PRIORITY(10)之间的值。getPriority() 获取线程的优先级值。 线程通信:

    (1)线程通信的方法:wait()、notify()和notifyAll() (2)调用notify()方法时可以随机选择一个在该对象调用wait()方法的线程,解除它的阻

    1 塞。

    (3)调用notifyAll()方法可以唤醒等待该对象的所有线程。但唤醒时无法控制唤醒哪个线程,唤醒过程完全由系统来控制。

    (4)notify()方法和notifyAll()方法只能在同步方法或同步块内部使用。 产生死锁的原因主要是:

    所谓死锁,是指两个或多个线程都在等待对方释放对象资源而进入的一种不可“调节”的状态。

    1、因为系统资源不足;

    2、进程运行推进的顺序不合适;

    3、资源分配不当等。

    如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 wait()方法区别于sleep()方法的是:

    (1)wait()方法调用时会释放对象锁,而sleep()方法不会 (2)sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用 (3)sleep()是Thread类的Static(静态)的方法; (4)wait()方法是Object类里的方法;wait()使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中的线程。

    (5)wait()必须放在synchronized block中,否则会在运行时扔出”java.lang.IllegalMonitorStateException“异常。

    通信协议指网络中传递、管理信息的一些规范。TCP/IP协议,IPX/SPX协议,NetBEUI协议等。

    TCP/IP协议

    IP协议:网络层协议,保证计算机之间发送和接收数据,能适应各种网络硬件。 无连接,不可靠的协议。

    TCP协议:端对端的协议,端与端之间建立连接、发送、接收数据以及终止连接。 利用重发技术和拥塞控制机制,向应用程序提供可靠通信连接。

    区别与联系:IP协议只保证计算机能发送和接受分组数据,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。两个协议统称为TCP/IP协议。

    A类地址:0-126,默认掩码:255.0.0.0。B类地址:128-191,默认掩码:255.255。C类地址:192-223,默认掩码:255.255.255.0。D类地址:广播地址,E类地址保留。

    常用端口以及对应的服务 7:Echo服务端口

    21:FTP服务端口

    23:Telnet服务端口 25:SMTP服务端口 80:HTTP服务端口 网络API:

    (1)Java中有关网络方面的功能都定义在java.net包中。 (2)使用InetAddress类封装IP地址和域名

    (3)URL由四部分组成。协议名:指明获取资源所使用的传输协议。主机名:指定获取资源的域名。端口:指定服务的端口。文件路径:指定访问的文件名以及路径。 URLConnection类:

    (1)通过URL的方法openStream()只能从网络上读取数据,如果如要输出数据,就要用到URLConnection类。

    2 (2)URLConnection是个抽象类,代表与URL指定的数据源的动态连接。

    (3)URLConnection类提供比URL类更强的服务器交互控制,允许用Post或者Put和其他HTTP请求方法将数据送回服务器。 Socket的工作步骤:

    1根据指定的地址和端口创建一个Socket对象。

    2调用getInputStream()方法或getOutputStream()方法打开连接到Socket的输入/输出流。 3客户端与服务器根据一定的协议交互,直到关闭连接。 4关闭客户端的Socket。 ServerSocket的工作步骤:

    1根据指定端口创建一个新的ServerSocket对象。

    2调用ServerSocket的accept()方法,在指定的端口监听到来的连接。Accpet()一直处于阻塞状态,知道有客户端试图建立连接。这时accpet()方法返回连接客户端与服务器的Socket对象。

    3调用getInputStream()方法或getOutputStream()方法打开连接到Socket的输入/输出流。

    4服务器与客户端根据一定的协议交互,直到关闭连接。

    5关闭服务器端的Socket。6回到第2步,继续监听下一次的连接。 多线程Socket通信实现:

    服务器总是在指定的端口监听是否有客户端请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应客户请求,而服务器本身在启动完线程之后马上有进入监听状态,等待下一个客户的到来。 synchronized两种使用方式:

    1.修饰方法,使调用该方法的线程均能获得该对象的锁。 2.放在代码块中,修饰对象,当前代码获得对象的锁。。。锁定的是对象,而不是方法或代码块。

    Swing的结构:

    (1)Swing组件位于javax.swing包中,javax是一个Java扩展包。 (2)在javax.swing包中,定义了两种类型的组件:

    顶层容器(不包含在其他容器中的容器,JFrame,JApplet,JDialog和Jwindow 4个)和轻量级组件。

    Swing组件都是AWT的Container类的直接子类和间接子类。 布局:

    (1)用来管理组件在容器中的布局格式。

    (2)FlowLayout, BorderLayout, GridLayout和CardLayout四种。位于java.awt包中。 (3)FlowLayout流布局一般用来安排面板中的按钮。它使得按钮呈水平放置,直到同一条线上再也没有适合的按钮。线的对齐方式由align属性确定。 (4)BorderLayout边界布局,JFrame的默认布局。

    (5)GridLayout网格布局,类似于表格,按照行列排列所有组件,每个单元格大小一样。添加组件使,按照从左至右,自上而下的顺序加入。

    (6)CardLayout卡片布局,将加入到容器的组件看作一叠卡片,只能看到最上面的组件 常用的事件类:

    java.awt.event包中常用的事件类:

    ActionEvent, AdjustmentEvent, ItemEvent, FocusEvent, KeyEvent, MouseEvent, WindowEvent。

    3 java.awt.event包中常用的监听接口:

    ActionListener,AdjustmentListener, ItemListener, FocusListener, KeyListener, MouseListener, WindowListener。 适配器:

    (1)扩展监听接口时,有些事件处理方法是不需要的,但必须重写。

    (2)出于简化代码的目的,java.awt.event包中提供了一个抽象适配器类,分别实现每个具有多个事件处理方法的监听接口。

    (3)继承适配器后,可以仅重写需要的事件处理方法。 事件处理的步骤:

    1创建监听类,监听类中,事件处理方法中编写事件处理代码 2创建监听对像。

    3利用组件的addXXXListener()方法将监听对象注册到组件上 3者区别联系:

    监听类:是一个扩展监听接口的类,可以扩展一个或多个监听接口。

    事件处理方法:是监听接口中已经定义好的相应的事件处理方法,要重写。 监听对象:是监听类的一个实例对象,具有监听功能。

    事件用于实现用户界面的交互,是GUI编程的重要组成部分。 Java最新的事件处理方法是基于委派事件模型的。

    事件包含3个组件:事件对象、事件源和事件处理程序。

    事件是一个描述事件源状态改变的对象,不是通过new 创建的,而是由用户操作触发的。 一个事件源可能会生成不同类型的事件。 可以将一个事件发送到多个监听器对象。

    监听类是实现监听接口的类,监听对象是监听类的实例化对象 在组件中注册监听器的方法是:addXxxxListener()。 适配器是实现相关监听接口的类,目的是简化程序代码 创建菜单的步骤:

    1创建一个JMenuBar菜单栏对象,将其设置到窗体中。

    2创建若干个JMenu菜单对象,将其放置到JMenuBar对象中,或按要求放到其他JMenu对象中。

    3创建若干个JMenuItem菜单项对中,将其放置到对应的JMenu对象中。 JPopupMenu:弹出式菜单 位置不固定、无标题

    (JDialog类)模式对话框:必须首先对该对话框进行响应(单击“确定”或“取消”)后,才能对对话框以外的应用程序进行操时;

    无模式对话框:可以不响应对话框,对其以外的程序进行操作。 JTable类--表格模型 TableModel:

    TableModel本身是个接口,若要实现此接口建立表格非常复杂,因此Java提供了两个类实现了TableModel接口: (1)AbstractTableModel:抽象类,实现了大部分的TableModel方法。AbstractTableModel 类 对 TableModel 接口中大部分方法提供部分实现,它关注监听器的管理,并生成TableModeEvents 事件,以及把他们发送到监听器提供方便。

    (2)DefaultTableModel:继承AbstractTableModel,是默认的表格模型类。

    (3)要创建一个TableModel,可以简单扩展AbstractTableModel类并且至少实现下列三

    4 个方法 public int getRowCount()、public int getColumnCount()、public Object getValueAt(int row,int column) 使用JDBC访问数据库的基本步骤:

    1加载JDBC驱动程序(Class.forName(“oracle.jdbc.driver.OracleDriver”); )。2建立数据库连接(Class.forName(“oracle.jdbc.driver.OracleDriver”); Connection conn = DriverManager.getConnection(

    “jdbc:oracle:thin:@localhost:1521:orcl”,

    “scott”, “tiger”);)。3创建Statement对象 4执行SQL语句。5 处理返回结果。6 关闭创建的对象 Statement中3个执行方法的不同:

    (1)execute():用于执行返回多个结果集、多个更新计数或二者的混合。 (2)executeUpdate():用于执行insert、update、delete语句及SQl DDL语句。插、更、删效果是修改表中的行或列,返回值一个整数,即影响行数。对于建立、删除返回值为0。 (3)executeQuery():用于产生单个结果集的语句,例如select语句。 事务的ACID特性:

    数据库中的操作通常是一个独立单元,事务是构成单一逻辑单位的操作集合。 已提交事务是指成功执行完毕的事务,未能成功完成的事务成为中止事务,对中止事务造成的变更需要进行撤销处理,成为事务回滚。 原子性(Atomicity )、一致性( Consistency )、隔离性( Isolation)、持久性(Durabilily)。

    保存点: 集元数据: 集元数据 Meta Data,是有关数据库和表格结构的信息,如数据库的表、表的列、表的索引、数据类型、对SQL的支持程度等信息。 DatabaseMetaData接口

    (1)主要用来得到数据库的信息,如:数据库中所有表格的列表、系统函数、关键字、数据库产品名和数据库支持的JDBC驱动名。

    (2)通过Connection.getMetaData()方法创建。 (3)主要提供了两大类方法:

    1.返回类型boolean的,用于检查数据库或驱动器是否支持某项功能。 2.用于获取数据库或驱动器本身的某些特征值。

    通过Statement实现静态SQL查询

    使用PreparedStatement实现动态SQL查询 使用CallableStatement实现存储过程的调用

    DatabaseMetaData接口用于得到关于数据库的信息 ResultSetMetaData接口主要用来获取结果集的结构 JDBC默认的事务提交模式是自动提交

    通过setAutoCommit()方法控制自动提交模式,使用rollback()方法实现事务回滚 开发RMI--步骤:

    1 定义远程接口。2 实现远程接口。3 编写和实现远程服务类。4 编写客户端程序 RMI机制原理:

    2个独立程序。服务器端、客户端 服务器端:

    5 (1)创建多个远程对象,

    (2)调用注册服务程序使得名字与远程对象关联,使得这些远程对象能够被引用, (3)等待客户端调用这些远程对象的方法。 客户端:

    (1)在服务器上的注册服务程序中用远程对象名称查找一个或者多个远程对象的引用, (2)调用远程对象的方法。

    JOptionPane类中四种对话框的静态方法

    1消息对话框(showmessagedialog)2输入对话框(input) 3确认对话框(Option)4选项对话框(Confirm) Locale常用定义:

    Locale类是用来标识本地化消息的重要工具类。该类包含对主要地理区域的地域化特征的封装。通过设定Locale为特定的国家或地区,提供符合当地文化习惯的字体、图标和表达格式。

    简述java异常处理机制 :

    java提供了两种处理异常的机制:一是捕获异常,二是声明抛出异常. 在java运行过程中系统得到一个异常对象时,它会沿着方法的调用栈逐层回溯,寻找处理这个异常的代码,,找到后,系统把当前异常对象教给这个方法处理,这就是捕获异常.如果方法中不知道如何处理所出现的异常,则可在定义方法时,声明抛出异常.

    使用JDBC查询Scott用户的emp表中的所有信息? String sql="select * from emp"; PreparedStatement stmt =conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); int columnCount = rs.getMetaData().getColumnCount(); //这地方补充了一下 while (rs.next()) { for (int i = 1; i <= columnCount; i++) { System.out.println( md.getColumnName(i) + " -- " + rs.getObject(i) ); } } JDBC API的三个组成部分: 1 JDBC驱动程序管理器 2 JDBC驱动程序测试包 3 JDBC-OCBC桥

    加载JDBC驱动程序中加载驱动程序的一种简单方法是使用Class.forName方法显示加载: Class.forName(“DriverName”); 对于JDBC/ODBC桥,加载JDBC-ODBC数据库驱动程序的方法为: Class.forName(“sun.jdnc.odbc.JdbcOdbcDriver”);

    6 而对于Oracle数据库,加载数据库驱动程序的方法为: Class.forName(“oracle.jdbc.driver.OracleDriver”); 对于Oracle驱动连接的是URL是:

    Jdbc:oracle:thin:@serverName:port:instance 通过Oracle驱动获得数据库连接的实力语句:

    Class.forName(“oracle.jdbc.driver.OracleDriver”); Connection conn = DriverManager.getConnection( “jdbc:oracle:thin:@localhost:1521:orcl”,”scott”,”tiger”);

    多线程Socket通信中多个while循环是用来监听的。

    TableModel本身是一个借口,若是要直接实现此接口来建立表格是非常复杂的,因此java中还提供了AbstractTableModel和DefaultTableModel这两个类分别实现TableModel接口。 ListSelecyionModel接口中的常量:

    static final int SINGLE_SELECTION 单一选择模式 static final int SINGLE_INTERVAL_SELECTION 连续区间选择模式 static final int MULTIPLE_INTERVAL_SELECTION 多重选择模式

    简述实现一个自定义的对话框的步骤?

    (1)继承JDialog类,在构造方法中传入参数 (2)在对话框中添加用户界面组件 (3)添加事件处理 (4)设置对话框大小

    什么是检查型异常,非检查型异常

    检查型异常:指编译器要求必须处置的异常,是程序运行时由于外界因素造成的一般性异常 非检查型异常:指编译器不要求强制处理的异常,该异常是因设计或实现方式不当导致的,可以避免这种异常的发生. 简述一下使用泛型有什么优点?

    答:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

    2.简要描述ArrayList,Vector,LinkedList的存储性能和特性? 答:ArrayList支持可随需要而调整的动态数组。其内部封装了一个动态再分配的Object[]数组。每个ArrayList对象有一个capacity,表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity自动增加。在向一个ArrayList对象添加大量元素的程序中,可使用ensureCapacity()方法增加Capacity,此法可以减少或增加重分配的数量。Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进 行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 3.简述Collection和Collections的区别。

    答:java.util.Collection 是一个集合接口集合接口集合接口集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。 java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态静态静态静态多

    7 态方法多态方法多态方法多态方法。此类不能实例化不能实例化不能实例化不能实例化,就像一个工具类个工具类个工具类个工具类,服务于Java的Collection框架。 Java代码 。

    4、List、Map和Set三个接口,存取元素时,各有什么特点? 答:List 以特定次序来持有元素,可有重复元素。 Set 无法拥有重复元素,内部排序。 Map 保存key-value值,value可多值。

    5、描述HashMap和Hashtable的区别。 答:Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。 最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。

    6、简述序列化和反序列化概念?

    对象的序列化就是把对象写入到一个输出流中,对象的反序列化是指从一个输入流中读取一个对象。

    7、简述适配器与监听接口的区别?

    区别:适配器只需要重写需要的事件处理方法,而监听接口需要实现全部的方法。

    监听接口中定义了抽象的事件处理方法,这些方法针对不同的操作进行不同的处理。在程序中,通常使用监听类实现监听接口中的事件处理方法。监听接口定义在java.awt.event包中,该包中提供了不同事件的监听接口,这些接口中定义了不同的抽象的事件处理方法。 扩展监听接口时,有些事件处理方法是不需要的,但必须重写。

    处于简化代码的目的,java.awt.event包中有提供了一套抽象适配器类,分别实现每个具有多个事件处理方法的监听接口。这样继承适配器后,可以仅重写需要的事件处理方法。

    8

    大家必须掌握每种类型的1-3题。

    题号考点要求

    48、 将两个两位数的整数合并成一个整数

    65、 两个正整数合并成一个整数

    71、 两个正整数合并成一个整数

    77、 两个正整数合并成一个整数

    81、 两个正整数合并成一个整数

    84、 两个正整数合并成一个整数

    87、 两个正整数合并成一个整数

    91、 两个正整数合并成一个整数

    8、 s=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+.....+n)

    9、 p=m!/(n!*(m-n)!)

    26、 连加

    68、 s=1+1/1!+1/2!+1/3!+........

    70、 s=1/(1*2)+1/(2*3)+...+1/(n*(n+1))

    76、 s=1+0.5*x+(0.5*(0.5-1)*x*x/2!+......

    86、 连加

    90、 连加

    92、 连加

    93、 连加

    97、 连加

    100、 连加

    (

    2、)

    类似素数或者闰年算法

    2、 求出1到1000之间能被7或11整除、但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。

    58、 求n以内同时能被3与7整除的所有自然数之和的平方根s

    3、 求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。

    27、 求出1到m之间能被7或11整除的整数,放在数组中,通过n返回这些数的个数

    63、 求n的所有因子(不包括1与自身)

    98、 计算n以内能被5或9整除的所有自然数的倒数之和

    15、 w是大于10的无符号整数,若w是n(n>=2)位的整数,则函数求出w的后n-1位的数作为函数值返回。

    24、 将数字字符串转化为一个整数

    16、 对变量中的值保留两位小数,对第三位四舍五入

    (

    3、)

    1、 一维数组中,将低于平均分的人数作为函数值返回,低于平均分的分数放在below所指的数组中。

    82、 计算一维数组中n门课程的平均分

    96、 一维数组中每相邻元素之平均值的平方根之和

    28、 找出一维数组中最大的值和它所在的下标,两者通过形参返回

    7、 求出数组的最大元素在数组中下标并存放在k所指的存贮单元中。

    43、 从num个字符串中找出最长的一个字符串,并通过形参指针传回

    39、 移动数组中的内容,前p个数移动到数组后面

    40、 移动数组中的内容,前m个字符移动到后面

    5、 将大于整数m且紧靠m的k个素数存入xx所指的数组中。

    20、 求出小于变量m的所有素数并放在一个数组中

    51、 将大于1小于m的非素数存入xx所指数组中,个数通过形参返回

    99、 计算3到n之间所有素数的平方根之和

    29、 将字符串中下标为奇数位置上的字母转化为大写

    47、 字符串中所有下标为奇数的字母转为大写

    31、 将字符串中除了下标为偶数、同时ASCII码也为偶数的字符外,其余的全都删除;串中剩余字符放在t字符串中

    32、 除了下标为奇数、同时ASCII码也为奇数的字符外,其余的全都删除;串中剩余字符放在t字符串中

    49、 将字符串中下标为偶数且ASCII码为奇数的字符删除

    19、 从字符串中删除指定字符

    64、 将字符串中ASCII值为奇数的字符删除,剩余字符放在t所指字符串中

    72、 将字符串中下标为偶数的字符删除

    78、 字符串中ASCII为偶数的字符删除

    35、 删除字符串中所有空格

    6、 删除一个字符串中指定下标的字符。

    60、 删去一维有序数组中所有相同的数,使之只剩一个

    33、 删除字符串中尾部*号,使不超过n个

    36、 把字符串中的前导*号全部移到字符串尾部

    45、 删除字符串中前导和尾部的*号

    56、 字符串中,除了尾部*号外,字符串中其余*号全部删除

    73、 删除字符串中除了前导和尾部*号外的所有*号

    83、 字符串中尾部*号删除

    88、 字符串中除了前导*外,删除其余*号

    94、 字符串中,前导*号全部删除

    95、 字符串中前导*号不得多于n个

    66、 删除字符串中所有*号

    (

    4、)

    17、 字符串内容逆置

    23、 判断字符串是否为回文

    25、 比较两个字符串的长度(不能用strlen)

    52、 实现两个字符串连接

    59、 将字符串数组中的字符串依次合并到一个字符串中

    21、 字符串中字符按降序排列(选择法排序)

    4、 统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。

    38、 求出字符串中指定字符的个数

    44、 统计长度为2的字符串在另一个字符串出现的次数

    62、 统计一行字符串中单词个数

    11、 二维数组构成矩阵,使数组左下半三角元素中的值全部置成0

    42、 二维数组,将右上半角元素中的值乘以m

    80、 二维数组中左下半三角中元素中的值乘以3

    12、 求出数组周边元素的平均值

    14、 求出二维数组周边元素之和

    18、 矩阵行列互换

    53、 矩阵B=A+A1

    30、 求出二维数组中最大元素的值,此值返回给调用函数

    55、 M行N列的二维数组中的数据,按行的顺序依次放到一维数组中

    41、 将二维数组中的字符,按列的顺序依次放到一个字符串中

    75、 二维数组中数按列的顺序放到一维数组中

    13、 求出二维数组每列中最小元素,并依次放在pp所指一维数组中

    37、 结构体数组(学号、8门成绩、平均成绩),求出每个学生的平均成绩

    34、 把结构体数组(学号、成绩)中分数最高的学生放到h数组中,函数返回人数

    74、 把结构体数组(学号、成绩)中分数最低的学生数据放在h所指数组中

    50、 结构体数组(学号、成绩),找出成绩最高的学生记录,通过形参返回

    54、 结构体数组(学号、成绩),低于平均分的学生数据放在b所指数组中

    89、 结构体数组(学号、成绩),高于等于平均分的学生人数通过形参返回

    57、 结构体数组(学号、姓名),把指定范围内的学生数据放在所指数组中

    67、 结构体数组(学号、成绩)返回指定学号的学生数据(查找)

    46、 结构体数组(学号、成绩),按分数降序排列(选择法排序)

    22、 链表结构中,找出数值最大的结点,并由函数值返回

    85、 链表中,求出平均成绩

    10、 迭代法求方程的实根

    61、 统计各年龄段人数(建议采用if else)

    69、 递归函数

    MATLAB 编程题总结

    LY 1.输出x,y两个中值较大的一个值。

    x=input('x='); y=input('y='); if x>y x else y end 2.输入x,计算y的值。计算函数的值yx1,x0

    2x1,x0x=input('x='); if x<0 y=x+1 else y=2*x-1 End 3.输入一学生成绩,评定其等级。方法是:90~100分为“优秀”,80~89分为“良好”,70~79分为“中等”,60~69分为“及格”,60分以为“不合格”

    x=input('x='); if x>100 | x<0 y='输入错误' elseif x>=90 y='优秀' elseif x>=80 y='良好' elseif x>=70 y='中等'

    elseif x>=60 y='及格' else

    y='不合格' end

    4.某购物超市节日期间举办购物打折扣的促销活动,优惠办法是:每位顾客当天一次性购物在100元以上者,按九五折优惠;在200元以上者,按九折优惠;在300元以上者,按八五折优惠;在500元以上者,按八折优惠。则可以根据顾客购物款数计算出优惠价。

    x=input('x='); if x>=500

    y=x*0.8 elseif x>=300 y=x*0.85 elseif x>=200 y=x*0.9 else

    y=x*0.95 end

    5.编程计算:S=1+2+3+„+100

    sum=0;

    for i=1:100 sum=sum+i; end sum

    6.计算1~100的奇数和.

    sum=0;

    for i=1:2:100 sum=sum+i; end Sum 或

    sum=0;

    for i=1:100

    if mod(i,2)==1 sum=sum+i; end

    end sum

    7.百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。

    设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:

    x+y+z=100 3x+2y+0.5z=100

    三个未知数,两个方程,此题有若干个解。

    for x=1:33

    for y=1:50

    for z=1:200

    if x+y+z==100 & 3*x+2*y+0.5*z==100 [x,y,z] end end end end

    8.我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。分析:解此问题两种方法,可根据公式:26=13*(1+0.008)n

    LiYang

    第 1 页 / 共 6 页

    MATLAB 编程题总结

    LY n=1;m=13; while m<26 m=m*(1+0.008); n=n+1; end n 9.求水仙花数,水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)(求出1000以内)

    for i=100:999 a(1)=fix(i/100); a(2)=fix((i-a(1)*100)/10); a(3)=i-a(1)*100-a(2)*10; if a(1)^3+a(2)^3+a(3)^3==i i end end 10.鸡兔同笼问题:鸡和兔子关在一个笼子里,已知共有头36个,脚100个,求笼内关了多少只兔子和多少只鸡?

    for i=1:50 for j=1:36 if i+j==36&i*2+j*4==100 [i,j] end end end 1.用matlab编程求算式xyz+yzz=532中x, y, z的值(其中xyz和yzz分别表

    示一个三位数)。

    for x=1:9

    for y=1:9 for z=1:9

    i=100*x+10*y+z+100*y+10*z+z;

    if i==532 [x,y,z] end end end end

    2. 用matlab编程完成用一元人民币换成一分、两分、五分的所有兑换方案(即输出所有的组合方式)。

    for i=0:20

    for j=0:50

    k=100-i*5-j*2; if(k>=0) [i,j,k] end end end

    3. 有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天后可以卖完,请用matlab编程计算。

    day=0;x1=1020 while(x1)

    x2=x1/2-2; x1=x2;

    day=day+1;

    end day

    4. 有一堆零件(100到200之间),如果分成4个零件一组的,则多2个零件;若分成7个零件一组的,则多3个零件;若分成9个零件一组的,则多5个零件。用matlab编程求这堆零件总数。

    for i=100:200

    if(mod(i-2,4)==0)

    if(mod(i-3,7)==0)

    if(mod(i-5,9)==0) i end end end end

    5. 编写程序,求1000至9999之间的回文数.回文数是指正读与反读都一样的数,如1221.

    for i=1000:1000:9999 for j=0:9

    n=i+j*100+j*10+i/1000 end 6.作函数

    yend sin(x),x[0,2]的图象,用蓝色五角星表示点。

    x=0:pi/10:2pi; y=sin(x);

    plot(x,y,’b-p’);

    LiYang

    第 2 页 / 共 6 页

    MATLAB 编程题总结

    LY 1: 编写M函数 32fx2xx6.3, x20.05x3.14计算f(1)f(2)f2(3)

    function y= fun1(x) y=(x^36.3)/(x^2 + 0.05*x - 3.14); fun1(1)*fun1(2)+fun1(3)*fun1(3) ans = -12.6023 2:编写M函数x1,x2f(x)3x,2x84x5,8x20,

    cosxsinx,x20计算f(0.1),f(1),f(9),f(22),f(2)

    function y=fff(x) if x<2 y=x+1; elseif x>=2 & x<=8 y=3*x; elseif x>8 & x<=20 y=4*x-5; else y=cos(x)+sin(x); end 3:根据pi*pi/6=1/1^2+1/2^2+1/3^2+„„+1/n^2,求pi的近似值。当n分别取100,1000,10000时,结果是多少?

    y=0;n=100;

    for i=1:n y=y+1/i/i; end y y =

    1.6350 pi=sqrt(6*y) pi =

    3.1321 y=0;n=1000; for i=1:n y=y+1/i/i; end y y =

    1.6439 pi=sqrt(6*y) pi =

    3.1406 y=0;n=10000; for i=1:n y=y+1/i/i; end y y =

    1.6448 pi=sqrt(6*y) pi =

    3.1415 (2)y=0; n=8;

    y=1./2*n-1; y y=

    4:编程求[100,200]之间第一个能被21整除的整数。

    for n=100:200 if rem(n,21)~=0 continue end break end

    n

    5:编写函数文件求半径为r的圆的面积和周长。

    function [s,p]=fcircle(r) s=pi*r*r; p=2*pi*r;

    6:根据y=1+11,求: 3152n-1(1)y<3时的最大n值。(2)与(1)的n值对应的y值。

    y=1;n=1; while(y<3) n=n+2; y=y+1/n;

    end

    y=y-1/n n=(n+1)/2 运行结果: y =

    2.9944

    n =

    LiYang

    第 3 页 / 共 6 页

    MATLAB 编程题总结

    LY 57 7: 已知f11,n1f20,n2f31,n3

    fnfn12fn2fn3,n3求f中:

    1~f100最大值、最小值、各数之和。

    f(1)=1; f(2)=0; f(3)=1; for i=4:100

    f(i)=f(i-1)-2*f(i-2)+f(i-3); end max(f) min(f) sum(f)

    1. 编程计算3+33+333+3333+„..前10项之和。

    m=3;n=0;s=0; for i=1:10 n=10*n+m; s=s+n; end s

    2. 编程求

    1-1/2+1/3-1/4+.......+1/99-1/100的值。

    s=0;

    for i=1:100

    s=s+(-1)^(i-1)*1/i; end

    s3. 编写程序,求 1-3+5-7+„-99+101的值。

    s=0;j=1;

    for i=1:2:101

    s=s+(-1)^(j-1)*i; j=j+1; end

    s4. 编写程序,输出从公元1000年至2000年所有闰年的年号。判断公元年是否为闰年的条件是:

    (1) 公元年数如能被4整除,而不能被100

    整除,则是闰年;

    (2) 公元年数能被400整除也是闰年。

    for year=1000:2000

    if(mod(year,4)==0&mod(year,100

    )~=0)|mod(year,400)==0 year end end

    5.将10个整数输入到一个数组中,然后再将

    其按输入顺序的逆序进行排列并输出。

    for i=1:10

    a(i)=input('x='); end

    for i=10:-1:

    1 a(i)end

    6.一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?

    Sn=100;Hn=Sn/2; for n=0:10

    Sn=Sn+2*Hn; Hn=Hn/2; end Sn Hn

    7.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,见只剩一个桃子了。求第一天共摘多少桃子。

    day=9;x=1; while(day>0) x=(x+1)*2; day=day-1; end x

    LiYang

    第 4 页 / 共 6 页

    MATLAB 编程题总结

    LY 附:

    matlab期中试卷及答案

    一、计算题

    1.已知A=[1 2 3; 4 5 6; 7 8 9],B=[1 5 0;1 0 3; 0 3 4],试写出下列指令运行的结果: A<=2=

    ,A*B=

    ,A(1, :)*A(:, 3)=

    2.设a= [1,-2,3; 4,5,9; 6,3,-8], b= [2,6,1; -3,2,7; 4,8,-1]。

    (1)求a.*b

    (2)求a.^2

    (3)求 2-a

    (4)求a(1:2,2:3)

    (5)求min(a(:))

    二、计算下列程序运行的结果

    1、mysum=0; i=1;

    while (i<100)

    mysum=mysum+i ;

    i=i+1 ;

    end

    mysum

    2、A=[1,2,3;4,5,6;7,8,9];

    C=[A;[10,11,12]];

    D=C(1:3,[2 3]);

    E=C(1:3,:)

    写出C、D、E的结果

    3、x=[0,1,0,10,1,0,1];

    for i=1:7 if x(i)==0

    x(i)=1;

    else

    500≤price<1000

    5%折扣

    x(i)=0;

    1000≤price<2500

    8%折扣

    end

    2500≤price<5000

    10%折扣

    end 5000≤price

    14%折扣

    x

    输入所售商品的价格,求其实际销售价格。

    4、c=6;d=[4,0,6;0,8,0]; (3)fibonccci数组的元素满足fibonacci规则:

    x=d & c ak+2=ak+ak+1,(k=1,2,…);且a1=a2=1。现要求求出该数组中

    y=d|c 第一个大于10000的元素。

    z=~d

    (4)计算1!+2!+3!+4!+5!+6!+„+n!值的程

    写出x、y、z的结果

    序。(n可以自由输入)

    三、(1) 建立M函数完成下列运算(函数名为

    五、分析下面程序运行后s1,n1,s2,n2,m的值.

    jygxfun)

    s1=0;s2=0;n1=0;n2=0

    f(x,y,z)ze(xy)xyzsin(xy3z)x=[1,-4,-8,3,10,-9,7,-3,10, 8,-5,-2,2,0 ];

    m=length(x); (2)若x=1,y=2,z=3,采取调用jygxfun方式计算

    for i=1:m f值, 试编程.

    if x(i)<0

    四、(1)编程计算下面问题, x值由键盘输入

    s1=s1+x(i); 2n1=n1+1;

    yx1,x1else x2,1x

    1s2=s2+x(i);

    n2=n2+1;

    (input语句).

    x21,x1 end

    end

    (2)某商场对顾客所购买的商品实行打折销

    s1,n1,s2,n2,m 售,标准如下(商品价格用price来表示):

    2.(1)

    price<200

    没有折扣

    2 -12

    200≤price<500

    3%折扣

    a.*b= -12 10

    63 24

    24

    LiYang

    第 5 页 / 共 6 页

    MATLAB 编程题总结

    LY (2) 1

    9 a.^2= 16 25 81 36 9

    64 (3) 2-a= 1

    4 -1 -2

    -3

    –7 (4) -4

    -1

    10 -2

    3 a(1:2,2:3)= 5

    9

    (5) min(a(:)) =-8 二

    1、4950

    2、C =1

    9 10

    12 D =

    9 E = 1

    3、x =1

    0

    0

    0

    4、x = 1

    0

    0

    0

    y = 1

    1 z = 0

    0

    0

    三、解:(1)

    function [f]=jygxfun(x,y,z)

    f=z*exp(-(x+y))+sqrt(x+y+z)*sin(x+y+3*z); (2)

    x=1;y=2;z=3; f= jygxfun(x,y,z)

    四、(1)解: x=input('x=?');

    if x>=1

    y=x^2+1; else if x

    y

    (2)price=input('请输入商品价格'); switch fix(price/100)

    0 case {0,1}

    %价格小于200 rate=0;

    case {2,3,4} %价格大于等于200但小于500

    rate=3/100;

    case num2cell(5:9) %价格大于等于500但小于1000

    rate=5/100;

    case num2cell(10:24) %价格大于等于1000但小于2500

    rate=8/100;

    case num2cell(25:49) %价格大于等于2500但小于5000

    rate=10/100;

    otherwise %价格大于等于5000 rate=14/100; end

    price=price*(1-rate) %输出商品实际销售价格 (3)

    (4)n=input('n=')

    s=0

    for i=1:n

    m=1

    for j=1:i

    m=m*j;

    end

    s=s+m; end s

    五、s1= -31;n1=6;s2=41;n2= 8;m= 14

    LiYang

    第 6 页 / 共 6 页

    展开全文
  • 判断用户输入的是否至少含有N位小数。1.当用户输入的是非数字时抛出异常,返回false。2.当用户输入数字是,判断其数字是否至少含有N位小数,如果不含有,返回false。3.当用户输入的数字的小数位数大于等于N时,返回...

    正版疯狂java讲义第5版编程教材

    95元

    (需用券)

    去购买 >

    f4b77da9706ea9e34099f9e4eb49ef8a.png

    判断用户输入的是否至少含有N位小数。

    1.当用户输入的是非数字时抛出异常,返回false。

    2.当用户输入数字是,判断其数字是否至少含有N位小数,如果不含有,返回false。

    3.当用户输入的数字的小数位数大于等于N时,返回true。

    public class ddouble {

    public static void main(String args[]) {

    String str = " .1124 ";

    boolean sfdouble = doubleyn(str,4);

    System.out.println(sfdouble);

    }

    public static boolean doubleyn(String str,int dousize){

    try {

    double num=Double.valueOf(str);//把字符串强制转换为数字

    if(str.trim().indexOf(".") == -1){

    return false;

    }

    int fourplace = str.trim().length() - str.trim().indexOf(".") - 1;

    if(fourplace

    return false;

    }else{

    return true;

    }

    } catch (Exception e) {

    return false;//如果抛出异常,返回False

    }

    }

    }

    原文链接:http://www.cnblogs.com/liebagefly/p/8083336.html

    原文链接:http://www.cnblogs.com/liebagefly/p/8083336.html

    实用现代javascript模块化系列

    68.08元

    (需用券)

    去购买 >

    9e420e584f75c3ae5a9b7c1434d171dc.png

    展开全文
  • java判断用户输入的是否至少含有N位小数的实例判断用户输入的是否至少含有N位小数。1.当用户输入的是非数字时抛出异常,返回false。2.当用户输入数字是,判断其数字是否至少含有N位小数,如果不含有,返回false。3....

    java判断用户输入的是否至少含有N位小数的实例

    判断用户输入的是否至少含有N位小数。

    1.当用户输入的是非数字时抛出异常,返回false。

    2.当用户输入数字是,判断其数字是否至少含有N位小数,如果不含有,返回false。

    3.当用户输入的数字的小数位数大于等于N时,返回true。

    public class ddouble {

    public static void main(String args[]) {

    String str = " .1124 ";

    boolean sfdouble = doubleyn(str,4);

    System.out.println(sfdouble);

    }

    public static boolean doubleyn(String str,int dousize){

    try {

    double num=Double.valueOf(str);//把字符串强制转换为数字

    if(str.trim().indexOf(".") == -1){

    return false;

    }

    int fourplace = str.trim().length() - str.trim().indexOf(".") - 1;

    if(fourplace

    return false;

    }else{

    return true;

    }

    } catch (Exception e) {

    return false;//如果抛出异常,返回False

    }

    }

    }

    以上这篇java判断用户输入的是否至少含有N位小数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

    时间: 2017-12-21

    本文列举了几个方法: 1. 使用java.math.BigDecimal 2. 使用java.text.DecimalFormat 3. 使用java.text.NumberFormat 4. 使用java.util.Formatter 5. 使用String.format 文章末尾给大家分享了更多的拓展知识,另外可以自己实现或者借用封装好的类库来实现,在这篇文章中就不一一列举了. 下面来看看详细的介绍. 一.使用BigDecimal,保留小数点后两位 public static String

    本文实例针对java保留两位小数问题为大家进行解答,供大家参考,具体内容如下 方式一: 四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); 方式一这个类很好的解决了方式三所带来的问题. 保留两位小数 方式二: DecimalFormat df =new DecimalFormat("#.00

    1.代码: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class format { double f = 111231.5585; public void m1() { BigDecimal bg = new BigDecimal(f); double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP)

    方式一:四舍五入double   f   =   111231.5585;四舍五入 保留两位小数,可以用String的format函数,方法如下: 复制代码 代码如下: System.out.println(String.format("%.2f", x1));System.out.println(String.format("%.2f", x2)); DecimalFormat转换最简便 复制代码 代码如下: public void m2() {       De

    Shell执行/调用Java/Jar程序例子的实例详解 前言: 最近要写一个独立的Java程序去监控Hadoop和Oozie,通过Shell去调用.写代码到现在也4年多了,貌似就从来没在生产环境中写过一个独立的Java程序,不是部署到Tomcat就是直接丢给Hadoop.于是参考Hadoop等开源环境,自己写了一个demo,并且可以通过Ant打包生成可运行的程序.所以这里有三步:Java程序,Shell,Ant      1.首先建立Java程序,由于是例子,所以这里很简单,只是输出传入参数的个

    本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 public class ThreadTest { public static void main(String[] args) { Account account = new Account("123456", 1000); DrawMoneyRunnable drawMoneyRunnable = new DrawMoneyRunnable(account, 700); Thr

    ac9ddf6b15128b6ed855764dad773bd9.png

    Interface Segregation Principle,ISP接口隔离原则主张使用多个专门的接口比使用单一的总接口要好. 一个类对另外一个类的依赖性应当是建立在最小的接口上的. 一个接口代表一个角色,不应当将不同的角色都交给一个接口.没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染. "不应该强迫客户依赖于它们不用的方法.接口属于客户,不属于它所在的类层次结构."这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法

    8a306c53c9397d58d10cd9a7f66d3976.png

    Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. 2. 多线程编程的好处是什么? 在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态.多个线程共享堆内存(heap

    410fee9d0bef5147fd30f2f4162bcba4.png

    接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码实现的,下面给大家分享下Java实现的例子. 拿代码扫描上面的图片,然后输出结果.主要思想就是利用Java调用系统任务. 下面是核心代码: package com.zhy.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.i

    ObjectMapper类是Jackson库的主要类.它提供一些功能将转换成Java对象匹配JSON结构,反之亦然.它使用JsonParser和JsonGenerator的实例实现JSON实际的读/写. 类声明 以下是org.codehaus.jackson.map.ObjectMapper类的声明: public class ObjectMapper extends ObjectCodec implements Versioned 嵌套类 S.N. 类 & 描述 1 static class

    摘要 空闲时会抽空学习同在jvm上运行的Groovy和Scala,发现他们对null的处理比早期版本Java慎重很多.在Java8中,Optional为函数式编程的null处理给出了非常优雅的解决方案.本文将说明长久以来Java中对null的蹩脚处理,然后介绍使用Optional来实现Java函数式编程. 那些年困扰着我们的null 在Java江湖流传着这样一个传说:直到真正了解了空指针异常,才能算一名合格的Java开发人员.在我们逼格闪闪的java码字符生涯中,每天都会遇到各种null的处理,

    尽管面临很多挑战,多线程有一些优点使得它一直被使用.这些优点是: 资源利用率更好 程序设计在某些情况下更简单 程序响应更快 资源利用率更好 想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景.比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒.处理两个文件则需要: 5秒读取文件A 2秒处理文件A 5秒读取文件B 2秒处理文件B --------------------- 总共需要14秒 从磁盘中读取文件的时候,大部分的CPU时间用于等待磁盘去读取数据.在这段时间里,CPU非常的

    最近一直整并发这块东西,顺便写点Java并发的例子,给大家做个分享,也强化下自己记忆,如果有什么错误或者不当的地方,欢迎大家斧正. CyclicBarrier是一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线程间的计数等待,但是它的功能比CountDownLatch更加复杂且强大. CyclicBarrier的介绍 CyclicBarrier 的字面意思是可循环(Cyclic)使用的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)

    展开全文
  • importjava.util.Scanner;/**功能:实现接收三个班级的各四名学员的成绩信息,然后计算每个班级学员的平均分*知识点:循环,二重循环。外层循环控制班级数量,内层循环控制每个班级学员数量*/publicclassDemo2{...
  • 有大神知道这里为什么报错吗?我输入整数一点问题都没有,但是每次输入小数都会报这个错误。
  • 小数:android:inputType="numberDecimal" 数字:android:inputType="number
  • 判断用户输入的是否至少含有N位小数。1.当用户输入的是非数字时抛出异常,返回false。2.当用户输入数字是,判断其数字是否至少含有N位小数,如果不含有,返回false。3.当用户输入的数字的小数位数大于等于N时,返回...
  • Java输入浮点数分别输出整数部分和小数部分
  • JAVA 输入一个浮点 分别输出整数部分和小数部分
  • 今天刚学了switch语句,老师用了scanner,然后自己做了一下,发现输入整数没问题,小数就会报错,求解决。代码如下//在控制台上输入1-7,显示对应的星期。import java.util.Scanner;class Kongzhitai{public static ...
  • Java循环输入至文件结尾 今天有写到java保留两位小数得题目,Java不像c语言printf("%.2f",f);这样子输出,于是找了下资料找到以下两种方法 方法一:使用Math.round()函数,此处返回的是数字格式 float f=1.258; ...
  • 判断用户输入的是否至少含有N位小数。1.当用户输入的是非数字时抛出异常,返回false。2.当用户输入数字是,判断其数字是否至少含有N位小数,如果不含有,返回false。3.当用户输入的数字的小数位数大于等于N时,返回...
  • 使用的JFormattedTextField用的NumberFormatter限制小数设置各种RoundingModes限制范围内,设定最小和/或最大值的数另一种方式是使用JSpinner的与SpinnerNumberModel的,但使用的DocumentFilter例如import java.awt....
  • package ... import java.awt.Toolkit; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; /** * 限制输入框只能
  • java小数相关

    2018-03-16 18:51:32
    小数保留后k位方法 import java.util.Scanner;//输入 import java.math.BigInteger;//大整数类 import java.math.BigDecimal;//大浮点数类 public class Main { public static void main(String[] args) { ...
  • 下面是一个字符界面的Java Application程序,它接受用户输入的一个浮点数,并将它的整数部分和小数部分分别输出。请勿改动原有代码,在下画线处填人适当语句,将程序补充完整。import java.io.*;public class test...
  • 感谢大家积极回答!目前的解决办法数据库类型设置timestamp类型的length=0页面输入...小数秒(毫微秒)哈哈我说的输入其实就是一个日期控件选择日期,因为需要给用户修改日期。下面是sql:CREATETABLE"public"."tb_aaa...
  • import java.util.Scanner; public class Shuzu { public static void main(String[] args) { Scanner in = new Scanner(System.in); int x [] = new int [10]; System.out.print...
  • package homework; import java.util.Scanner; public class OperatingTheDecimal { ... System.out.print("请输入第一个小数:"); double num01 = sc.nextDouble(); System.out.print("请输入
  • 求整数除法小数点后第n位开始的3位数位数不足的补0,如0.125小数第3位后三位:0.12500→500输入格式:a b n,空格分开,a是被除数,b是除数,n是小数后的位置输出格式:3位数字,a÷b小数后第n位开始的3位数字样例:输入:1 8 1...
  • 有时需要在输入框加入输入数据的小数点位数控制,比如我们只希望用户输入保留一位小数的数据,那么就可以用这个函数来判断输入的数据小数点后位数,当大于1时,弹出提示框 public int checkNum(String str){ if...
  • import java.util.Scanner; public class rui{ static public void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("涂涂喊你输入分数:"); double score = Double.value...
  • java 小数分数转换

    2020-05-05 23:12:33
    从标准输入输入一个小数,编写程序将其转换成相应的分数显示,即转换为几又几分之几。 要求: 1、输入小数包括整数部分、小数点和小数部分;整数部分和小数部分最多有7位数字;整数部分可以为0,若整数部分大于...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼晕,怎么那么简洁import java.util.*;public class DoubleTo {private static int high,low;private static void read(){Scanner in=new Scanner(System.in);System.out....
  • package 判断整数或小数; import java.util.Scanner; public class 判断整数或小数 { public static void main(String[] args... System.out.println("请输入一个数用于判断整数或小数"); double n = scanner.ne
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼晕,怎么那么简洁import java.util.*;public class DoubleTo {private static int high,low;private static void read(){Scanner in=new Scanner(System.in);System.out....
  • 我有一个方法返回输入的阶乘.它适用于整数,但我无法弄清楚如何使它与十进制数一起工作.这是我目前的方法:public static double factorial(double d){if (d == 0.0){return 1.0;}double abs = Math.abs(d);double ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,598
精华内容 639
关键字:

java输入小数

java 订阅