java基础训练
更新时间:2024-05-24 19:41:01 阅读量: 综合文库 文档下载
一、编程题:Java多线程简单应用 编写一个程序,在不同时段进行多线程消息显示。创建3 个线程,每个线程都显示一个消息,指出它即将进入睡眠状态,线程的睡眠时间为0~5秒之间的随机数,随后进入睡眠状态。当一个线程被唤醒,首先显示该线程的名称,并指出它已经完成睡眠,然后线程终止并进入死亡状态。
程序运行结果如下: 第一次运行: 线程开始
线程1进入睡眠时间2427 线程2进入睡眠时间1828 线程开始,main方法结束
线程3进入睡眠时间4803 线程2正在睡眠... 线程1正在睡眠... 线程3正在睡眠... 第二次运行: 线程开始
线程1进入睡眠时间1010 线程开始,main方法结束
线程2进入睡眠时间225 线程3进入睡眠时间3338 线程2正在睡眠... 线程1正在睡眠... 线程3正在睡眠...
实验步骤:
1、用MyEclipse或记事本工具按照Java编码规范创建Java程序,输入程序代码后,进行编译和运行。
2、用JDK工具(javac.exe、java.exe)、MyEclipse或其他工具对上述程序进行编译和运行。
代码如下:
import java.util.Random;
class MyThread implements Runnable{ private String name; private int time; public MyThread(String name,int time){ this.name=name; this.time=time; } public MyThread(){} public void run(){ System.out.println(this.name+\进入睡眠时间\+this.time); try{ Thread.sleep(this.time); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println(this.name+\正在睡眠...\); }
public void info(){ System.out.println(\线程开始,main方法结束\); System.out.println(\); } }
public class Demo1 { public static void main(String[] args) { System.out.println(\线程开始\); Random r=new Random(); int a=r.nextInt(5000); int b=r.nextInt(5000); int c=r.nextInt(5000); MyThread my1=new MyThread(\线程1\,a); MyThread my2=new MyThread(\线程2\,b); MyThread my3=new MyThread(\线程3\,c); new Thread(my1).start(); new Thread(my2).start(); new Thread(my3).start(); MyThread my=new MyThread(); my.info(); } }
一、编程题:
编写一个程序,完成在银行的取款和存款操作。在定义银行类时,若取钱数大于余额,则做异常处理。控制台输出如下: ? 你当前的余额为:4000
? 请选择你要办理的业务种类(输入1或者2):1、取款,2、存款 ? 1
? 请输入金额(精确到元): ? 2000
? 对不起你的余额不足……
代码如下:
import java.util.Scanner; public class BankMoney { public static void main(String[] args) { Scanner scan1=new Scanner(System.in); System.out.println(\您当前的金额为:\); float mon1=scan1.nextFloat();
System.out.println(\您当前的金额为:\+mon1);
System.out.println(\请输入你要办理的业务种类(输入1或者2):1、取款,2、存款\);
Scanner scan2=new Scanner(System.in); int a=scan2.nextInt();
System.out.println(\请输入金额:\);
Scanner scan3=new Scanner(System.in); float mon2=scan3.nextFloat(); if(a==1){
if(mon2>mon1){ try{ throw new Exception(\对不起你的余额不足!\); }catch(Exception e){
System.out.println(e); }
}else{ System.out.println(\你所剩余额为:\+(mon1-mon2)); } }
if(a==2){ System.out.println(\你所剩余额为:\+(mon1+mon2)); } } }
显示结果一:
您当前的金额为: 4000
您当前的金额为:4000.0
请输入你要办理的业务种类(输入1或者2):1、取款,2、存款 1
请输入金额: 2000
你所剩余额为:2000.0
显示结果二:
您当前的金额为: 4000
您当前的金额为:4000.0
请输入你要办理的业务种类(输入1或者2):1、取款,2、存款 1
请输入金额: 5000
java.lang.Exception: 对不起你的余额不足!
显示结果三: 您当前的金额为: 4000
您当前的金额为:4000.0
请输入你要办理的业务种类(输入1或者2):1、取款,2、存款 2
请输入金额: 2000
你所剩余额为:6000.0
二、编程题:Java异常处理简单应用
通过图形界面从键盘输入两个数,进行相除,显示商。当输入串中含有非数字时或除数为0时,通过异常处理机制,使程序能正确运行。
public class ExceptionDemo1 { public static void main(String[] args) {
String str1=javax.swing.JOptionPane.showInputDialog(\请输入被除数\);
String str2=javax.swing.JOptionPane.showInputDialog(\请输入除数\); int a=0; try{ int s1=Integer.parseInt(str1); int s2=Integer.parseInt(str2); a=s1/s2;
}catch(ArithmeticException e){ javax.swing.JOptionPane.showMessageDialog(null,\算数异常:\+e); }catch(NumberFormatException e){ javax.swing.JOptionPane.showMessageDialog(null,\数字转换异常:\+e); }catch(Exception e){ javax.swing.JOptionPane.showMessageDialog(null,\其他异常:\+e); }
javax.swing.JOptionPane.showMessageDialog(null,\计算结果是:\+a ); } }
显示结果: 结果一:
结果二:
结果三:
一、列出指定属性
public class Demo3 { public static void main(String[] args) { //System.getProperties().list(System.out); //列出系统的全部属性 System.out.println(\系统版本为:
\+System.getProperty(\)+System.getProperty(\)+System.getProperty(\)); System.out.println(\系统给用户为:\+System.getProperty(\)); System.out.println(\当前用户目录:\+System.getProperty(\)); System.out.println(\当前用户工作目录:\+System.getProperty(\)); long startTime=System.currentTimeMillis(); int sum=0; for(int i=0;i<30000000;i++){ sum+=i; } long endTime=System.currentTimeMillis(); System.out.println(\计算所花费的时间:\+(endTime-startTime)+\毫秒。\); } }
显示结果:
系统版本为:Windows Vista6.1x86 系统给用户为:lenovo
当前用户目录:C:\\Users\\lenovo
当前用户工作目录:E:\\实验\\Java实验\\seven\\seven 计算所花费的时间:80毫秒。
二、观察对象释放
class Person{ private String name; private int age; public Person(String name,int age){ this.name=name; this.age=age; } public String toString(){ return \姓名:\+this.name+\,年龄:\+this.age; } public void finalize() throws Throwable{ System.out.println(\对象被释放——>\+this); } }
public class Demo4 { public static void main(String[] args) { Person per=new Person(\张三\,20); per=null; System.gc(); } }
显示结果:
对象被释放——>姓名:张三,年龄:20
三、编程题:
某超市门口为顾客准备了100辆手推车,每位顾客在购物时需一辆推车,在购物后把推车还回去。编写一个多线程程序,模拟超市购物。 运行结果:
超市模拟购物开始
第1001号顾客进入等车购物 第1001号顾客正在购物
第1002号顾客进入等车购物 第1001号顾客把推车还回去 第1002号顾客正在购物
第1002号顾客把推车还回去
例中假设就2辆小车,处理特殊情况,当小车不够时;如果小车多时只将sum的只修改一下即可。
class Car{ public static int sum=2; public synchronized void getCar(){ if(sum==0){ try{ super.wait(); }catch(InterruptedException e){ e.printStackTrace(); } } if(sum>0&&sum<=2){ try{ System.out.println(Thread.currentThread().getName()+\顾客正在购物\); Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } sum--; } } public synchronized void sedCar(){ if(sum>=0&&sum<2){ try{ System.out.println(Thread.currentThread().getName()+\顾客把推车还回去\); Thread.sleep(1000); }catch(InterruptedException e){
e.printStackTrace(); } sum++; super.notify(); } } }
class Buy implements Runnable{ private Car c; public Buy(Car c){ this.c=c; } public void setC(Car c){ this.c=c; } public Car getC(){ return c; } public void run(){ System.out.println(Thread.currentThread().getName()+\顾客进入等车购物\); c.getCar(); c.sedCar(); } }
public class Two { public static void main(String[] args) { System.out.println(\超市模拟购物开始\); Car c=new Car(); Buy b1=new Buy(c); Buy b2=new Buy(c); Buy b3=new Buy(c); new Thread(b1,\第1001号\).start(); new Thread(b2,\第1002号\).start(); new Thread(b3,\第1003号\).start(); } }
其中一个显示结果:
超市模拟购物开始
第1001号顾客进入等车购物 第1001号顾客正在购物 第1002号顾客进入等车购物 第1003号顾客进入等车购物 第1001号顾客把推车还回去 第1003号顾客正在购物 第1002号顾客正在购物 第1002号顾客把推车还回去 第1003号顾客把推车还回去
四、设计一个生产电脑和搬运电脑类,要求生产出一台电脑就搬走一台电脑,如果没有新的电脑生产出来,则搬运工要等待新电脑产出;如果生产出的电脑没有搬走,则要等待电脑搬走之后再生产,并统计出生产的电脑数量.
class Computer{ int num=0;
boolean flag=false; public synchronized void set(){ if(flag){ //不能生产,等待取走 try{ super.wait(); }catch(InterruptedException e){ e.printStackTrace(); } } try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } num++; System.out.println(\生产了第\+num+\台电脑。\); flag=true; super.notify(); } public synchronized void get(){ if(!flag){ //不能取走,等待生产 try{ super.wait(); }catch(InterruptedException e){ e.printStackTrace(); } } try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println(\取走了第\+num+\台电脑。\); flag=false; super.notify(); } }
class Customer implements Runnable{ private Computer com; public void setCompu(Computer compu){ this.com=compu; } public Computer getCompu(){ return this.com; } public Customer(Computer com){ this.com=com; } public void run(){ for(int i=0;i<10;i++){ com.set(); com.get(); } } }
public class Four { public static void main(String[] args) { Computer a=new Computer(); Customer cus=new Customer(a); new Thread(cus).start(); } }
显示结果:
生产了第1台电脑。 取走了第1台电脑。 生产了第2台电脑。 取走了第2台电脑。 生产了第3台电脑。 取走了第3台电脑。 生产了第4台电脑。 取走了第4台电脑。 生产了第5台电脑。 取走了第5台电脑。 生产了第6台电脑。 取走了第6台电脑。 生产了第7台电脑。 取走了第7台电脑。 生产了第8台电脑。 取走了第8台电脑。 生产了第9台电脑。 取走了第9台电脑。 生产了第10台电脑。 取走了第10台电脑。
一、线程的休眠
class MyThread2 implements Runnable{ public void run(){ for(int i=0;i<5;i++){ try{ Thread.sleep(500); }catch(Exception e){} System.out.println(Thread.currentThread().getName()+\运行——>\+i); } } }
public class ThreadSheepDemo { public static void main(String[] args) { MyThread2 mt=new MyThread2(); Thread t=new Thread(mt,\线程\); t.start(); } }
//以上程序在执行时,每次的输出都会间隔500ms,达到了延迟操作的效果
结果如下:
线程运行——>0 线程运行——>1 线程运行——>2 线程运行——>3 线程运行——>4
二、中断线程
class MyThread3 implements Runnable{ public void run(){ System.out.println(\、进入run方法\); try{ Thread.sleep(10000); System.out.println(\、已经完成休眠\); }catch(Exception e){ System.out.println(\、休眠被终止\); return; //让程序返回被调用处 } System.out.println(\、run 方法正常结束\); } }
public class ThreadInterruptDemo { public static void main(String[] args) { MyThread3 mt=new MyThread3(); Thread t=new Thread(mt,\线程\); t.start(); try{ Thread.sleep(2000);//稍微停2s在进行中断 }catch(Exception e){} t.interrupt(); } }
显示结果:
1、进入run方法 3、休眠被终止
三、后台线程。
//在线程MyThread中,尽管run()方法是死循环的方式,但是程序依然可以执行完,因为方法中死循环的线程操作已经设置成后台运行了
class MyThread4 implements Runnable{ public void run(){ while(true){ System.out.println(Thread.currentThread().getName()+\在运行。\); } } }
public class ThreadDaemonDemo { public static void main(String[] args) { MyThread4 mt=new MyThread4(); Thread t=new Thread(mt,\线程1\);
t.setDaemon(true); //此线程在后台运行 t.start(); //启动线程 } }
四、线程A,休眠1秒;线程B,休眠3秒;线程C,休眠4秒,继承Thread类
class MyThread5 extends Thread{ private int time; public MyThread5(String name,int time){ super(name); this.time=time; } public void run(){ try{ Thread.sleep(this.time); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+\线程,休眠\+this.time+\毫秒。\); } }
public class ExecDemo { public static void main(String[] args) { MyThread5 mt1=new MyThread5(\线程A\,1000); MyThread5 mt2=new MyThread5(\线程B\,3000); MyThread5 mt3=new MyThread5(\线程C\,4000); mt1.start(); mt2.start(); mt3.start(); } }
五、如果使用Runnable接口实现多线程,则不像Thread类那样可以直接使用Thread类中的name属性,需要在类中单独定义一个name是想以保存线程名称
class MyThread6 implements Runnable{ private String name; private int time; public MyThread6(String name,int time){ this.name=name; this.time=time; } public void run(){ try{ Thread.sleep(this.time); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+\线程,休眠\+this.time+\毫秒。\); } }
public class ExecDemo1 { public static void main(String[] args) { MyThread6 mt1=new MyThread6(\线程A\,1000);
}
}
MyThread6 mt2=new MyThread6(\线程B\,3000); MyThread6 mt3=new MyThread6(\线程C\,4000); new Thread(mt1).start(); new Thread(mt2).start(); new Thread(mt3).start();
六、解除死锁代码。
class Zhangsan{ public void say(){ System.out.println(\张三对李四说:“你给我画,我就把书给你!”\); } public void get(){ System.out.println(\张三得到画了。\); } }
class Lisi{ public void say(){ System.out.println(\李四对张三说:“你给我书,我就把画给你!”\); } public void get(){ System.out.println(\李四得到书了。\); } }
public class DeadLock implements Runnable{ private static Zhangsan zs=new Zhangsan(); private static Lisi ls=new Lisi(); private boolean flag=false; public void run(){ if(flag){ synchronized (zs){ zs.say(); try{ Thread.sleep(500); }catch(InterruptedException e){ e.printStackTrace(); } synchronized(ls){ zs.get(); } } }else{ synchronized (zs){ ls.say(); try{ Thread.sleep(500); }catch(InterruptedException e){ e.printStackTrace(); } synchronized(ls){ ls.get(); } } } } public static void main(String[] args){
DeadLock t1=new DeadLock(); DeadLock t2=new DeadLock(); t1.flag=true; t2.flag=false; Thread thA=new Thread(t1); Thread thB=new Thread(t2); thA.start(); thB.start(); } }
显示结果:
张三对李四说:“你给我画,我就把书给你!” 张三得到画了。
李四对张三说:“你给我书,我就把画给你!” 李四得到书了。
一、实现Runnable接口可以资源共享
class MyThread implements Runnable{ private int ticket=5; public void run(){ for(int i=0;i<100;i++){ if(ticket>0){ System.out.println(\卖票:ticket=\+ticket--); } } } }
public class RunnableDemo1 { public static void main(String[] args) { MyThread my=new MyThread(); new Thread(my).start(); new Thread(my).start(); new Thread(my).start(); } }
结果显示不止下列三个:
卖票:ticket=5 卖票:ticket=3 卖票:ticket=4 卖票:ticket=1 卖票:ticket=2 卖票:ticket=3 卖票:ticket=4 卖票:ticket=1 卖票:ticket=2 卖票:ticket=5 卖票:ticket=3 卖票:ticket=2 卖票:ticket=1 卖票:ticket=4 卖票:ticket=5
二、观察程序的输出
class MyThread1 implements Runnable{ }
public class CurrentThreadDemo1 { }
//在java中所有的线程都是同时启动的,哪个线程先抢到CPU资源,哪个线程就先运行,所以显示结果不唯一
public static void main(String[] args) { }
MyThread1 my =new MyThread1(); new Thread(my,\线程\).start(); public void run(){ }
for(int i=0;i<3;i++){ }
System.out.println(Thread.currentThread().getName()+\运行,
i=\+i);
my.run();
三、线程的强制执行,用join()方法,线程强制执行期间,其他线
程无法运行,必须等到线程完成之后才可以继续执行。
class MyThread1 implements Runnable{ }
public class ThreadJoinDemo {
public static void main(String[] args) {
MyThread1 mt=new MyThread1(); Thread t=new Thread(mt,\线程\); public void run(){ }
for(int i=0;i<8;i++){ }
System.out.println(Thread.currentThread().getName()+\运行
——>\+i);
t.start();
for(int i=0;i<8;i++){ if(i>4){ }
try{
t.join();
}catch(Exception e){}
System.out.println(\线程运行——>\+i); } }
}
显示结果如下:(结果不唯一,不止以下结果,仅复制此三个作说明)
四、判断线程是否启动
class MyThread implements Runnable{ }
public class ThreadAliveDemo {
public static void main(String[] args) { }
MyThread mt=new MyThread(); Thread t=new Thread(mt,\线程\);
System.out.println(\线程执行之前——>\+t.isAlive()); t.start();
System.out.println(\线程执行之后——>\+t.isAlive()); for(int i=0;i<3;i++){ }
System.out.println(\代码执行之后——>\+t.isAlive());
System.out.println(\运行——>\+i);
public void run(){ }
for(int i=0;i<3;i++){ }
System.out.println(Thread.currentThread().getName()+\运行
——>\+i);
}
显示结果如下(结果不知此几个):
一、 设计一个宠物商店,宠物商店中可以有多种(有用户决定数量)宠物,试表示出
此种关系,并要求可以根据宠物的关键字查询到相应的宠物信息。所需宠物信息自行设
计。具体分析如下:
(1) 本要求中提示宠物信息可以自行设计,所以此时简单设计出名字、颜色、年龄3
个属性。
(2) 宠物的种类很多,如猫、狗等都属于宠物,所以宠物应当是一个标准。 (3) 在宠物商店中,只要是符合此宠物标准的就应该可以放进宠物商店中。
(4) 宠物商店要保存多种宠物,则肯定应该是宠物的对象数组,如果宠物个数由用
户决定,则应该创建宠物商店时,就分配好所能保存的宠物个数。
代码如下:
interface Pet{ }
class Cat implements Pet{
private String name; private String color; private int age;
public Cat(String name,String color,int age){ }
public String getName(){ }
public String getColor(){ }
return this.color; return this.name; this.setName(name); this.setColor(color); public String getName(); public String getColor(); public int getAge();
this.setAge(age);
}
public int getAge(){ }
public void setName(String name){ }
public void setColor(String color){ }
public void setAge(int age){ }
this.age=age; this.color=color; this.name=name; return this.age;
class Dog implements Pet{ }
class PetShop{
private Pet[] pets; private int foot; private String name;
private String color; private int age;
public Dog(String name,String color,int age){ }
public String getName(){ }
public String getColor(){ }
public int getAge(){ }
public void setName(String name){ }
public void setColor(String color){ }
public void setAge(int age){ }
this.age=age; this.color=color; this.name=name; return this.age; return this.color; return this.name; this.setName(name); this.setColor(color);
this.setAge(age);
}
public PetShop(int len){ }
public boolean add(Pet pet){ }
public Pet[] search(String keyWord){ //关键字查找
Pet p[]=null; int count=0;
//确认开辟的空间大小,看有多少个宠物符合查询条件 for(int i=0;i if(this.pets[i]!=null){ if(this.foot this.pets[this.foot]=pet; this.foot++; return true; return false; if(len>0){ } this.pets=new Pet[len]; this.pets=new Pet[1]; //至少开辟一个空间 }else{ }else{ if(this.pets[i].getName().indexOf(keyWord)!=-1||this.pets[i].getC } p=new Pet[count]; int f=0;//设置增加的位置标记 for(int i=0;i if(this.pets[i]!=null){ } } count++; //符合条件的宠物个数 olor().indexOf(keyWord)!=-1){ if(this.pets[i].getName().indexOf(keyWord)!=-1||this.pets[i].getC } } return p; } } p[f]=this.pets[i];//将符合查询条件的宠物信息保存 f++; olor().indexOf(keyWord)!=-1){ public class PetShopDemo { public static void main(String[] args) { PetShop ps=new PetShop(5); ps.add(new Cat(\白猫\,\白色的\,2));//增加宠物,成功 ps.add(new Cat(\黑猫\,\黑色的\,3));//增加宠物,成功 ps.add(new Cat(\花猫\,\花色的\,3));//增加宠物,成功 ps.add(new Dog(\拉布拉多\,\黄色的\,3));//增加宠物,成功 ps.add(new Dog(\金毛\,\金色的\,3));//增加宠物,成功 ps.add(new Dog(\黄狗\,\黄色的\,3));//增加宠物,失败 print(ps.search(\黄\)); } } public static void print(Pet p[]){ for(int i=0;i if(p[i]!=null){ System.out.print(p[i].getName()+\+p[i].getAge()+\+p[i].getAge } } } ()); 显示结果: 拉布拉多,3,3 二、 对象的比较 Object类提供的equals()方法默认是比较地址的,并不能对内容进行比较。 class Persona{ private String name; private int age; public Persona(String name,int age){ } public boolean equals(Object obj){//覆写Object类中的equals()方法 if(this==obj){ //如果两个而对象的地址相等,则肯定是同一个 } if(!(obj instanceof Persona)){//判断传进来的对象是否是Person的实例 return true; this.name=name; this.age=age; 对象 } } } return false; //如果不是,则直接返回false Persona per=(Persona)obj;//将传进来的对象向下转型 if(per.name.equals(this.name)&&per.age==this.age){ } return true; return false; }else{ public String toString(){ } return \姓名:\+this.name+\年龄:\+this.age; public class ObjectDemo1 { } public static void main(String[] args) { } Persona per1=new Persona(\小明\,20); Persona per2=new Persona(\小强\,22); Persona per3=new Persona(\小强\,22); System.out.println(per1.equals(per2)?\是同一个人!\:\不是同一个人!System.out.println(per2.equals(per3)?\是同一个人!\:\不是同一个人!System.out.println(per1.equals(\)?\是同一个人!\:\不是同一个 \); \); 人!\); 显示结果: 不是同一个人! 是同一个人! 不是同一个人! 一、使用面向对象的概念表示出下面的生活场景: 小明去超市买东西,所有买到的东西都放在了购物车之中,最后到收银台一起结账。 class Customer{ private String name; public Customer(String name){ this.name=name; System.out.println(\顾客姓名:\+name); } } class Goods{ private String gname; private double price; } private static float countPrice; private static int countGoods; public Goods(String gname,double price ){ } public String getGname(){ } public double getPrice(){ } public void getGood(){ } public String getCount(){ } return \商品总数:\+countGoods+\商品总额:\+countPrice+\元\; System.out.println(\商品名称:\+gname+\商品价格\+price+\元\); return price; return gname; this.gname=gname; this.price=price; countPrice+=price; countGoods++; class Cart{ } public class Buy { public static void main(String[] args) { Customer cus=new Customer(\小明\); private Goods good; public Cart(Goods good){ } public void getInfo(){ System.out.println(good.getCount()); } this.good=good; Goods good1=new Goods(\面包\,2.00); good1.getGood(); Goods good2=new Goods(\苹果\,4.20); good2.getGood(); Goods good3=new Goods(\可乐\,3.00); good3.getGood(); Cart cart=new Cart(good3); cart.getInfo(); } } 显示结果: 顾客姓名:小明 商品名称:面包,商品价格2.0元 商品名称:苹果,商品价格4.2元 商品名称:可乐,商品价格3.0元 商品总数:3, 商品总额:9.2元 1. 异常处理。 public class Exception { } public static void main(String args[]){ } System.out.println(\计算开始****\); int i=0; int j=0; try{ } catch(ArithmeticException e){ } catch(NumberFormatException e){ } catch(ArrayIndexOutOfBoundsException e){ } finally{ System.out.println(\不管是否出现异常,此句都将执行!\); } System.out.println(\数组越界异常:\+e); System.out.println(\数字装转换异常:\+e); System.out.println(\算数异常:\+e); String str1=args[0]; String str2=args[1]; i=Integer.parseInt(str1); j=Integer.parseInt(str2); int temp=i/j; System.out.println(\两个数字相处的结果是:\+temp); System.out.println(\); 2. throws 关键字 处理异常。使用throws 声明的方法表示此方法不处理异常, 而交给方法的调用处进行处理。 class Math{ } public class Exception1 { public static void main(String[] args) { Math m=new Math(); try{ //因为有throws ,不管是否有异常,都必须处理 System.out.println(\除法操作:\+m.div(10, 2)); } public int div(int i,int j)throws Exception{ //此方法中不处理异常 int temp=i/j; } return temp; catch(Exception e){ e.printStackTrace(); //打印异常 } } 显示结果: } 除法操作:5 《二》 class Math2{ } public class Exception2 { } 显示结果: 除法操作:5 public static void main(String[] args )throws Exception { } Math2 m=new Math2(); System.out.println(\除法操作:\+m.div(10, 2)); public int div(int i,int j)throws Exception{ } int temp=i/j; return temp; 3. throw 关键字抛出一个异常,抛出时直接抛出异常类的实例化对象即可。 public class Exception3 { } public static void main(String[] args) { } try{ throw new Exception(\自己抛出的异常!\); }catch(Exception e){ } System.out.println(e); 显示结果: java.lang.Exception: 自己抛出的异常! 4. 范例——throw class Math3{ public int div(int i,int j) throws Exception{ System.out.println(\计算开始****\); int temp =0; try{ } return temp; temp=i/j; throw e; //把异常交给被调用处 System.out.println(\计算结束****\); }catch(Exception e){ }finally{ 与throws的应用。 } } public class Exception4 { } public static void main(String[] args) { } Math3 m=new Math3(); try{ } System.out.println(\除法操作:\+m.div(10,0)); System.out.println(\异常处理:\+e); }catch(Exception e){ 显示结果: ****计算开始**** ****计算结束**** 异常处理:java.lang.ArithmeticException: / by zero 一、 对象的向下转型。 例: class A{ } class B extends A{ } public class Passdown { public static void main(String[] args) { A a=new B(); B b=(B)a; b.fun1(); public void fun1(){ } public void fun3(){ } System.out.println(\); System.out.println(\); public void fun1(){ } public void fun2(){ } public void fun(){ } this.fun1(); System.out.println(\); System.out.println(\); } b.fun2(); b.fun3(); b.fun(); } 显示结果: B→public void fun1(){} A→public void fun2(){} B→public void fun3(){} B→public void fun1(){} 解释:fun1()已经被子类覆写,则此时调用的方法是被子类覆写过的方法。 二、 抽象类的实际应用。 例: abstract class Person{ } class Student extends Person{ private float score; public float getScore(){ } public void setScore(float score){ } public Student(String name,int age,float score){ } public String getContent(){ super(name,age); this.setScore(score); this.score=score; return score; private String name; private int age; public Person(String name,int age){ } public String getName(){ } public int getAge(){ } public void say(){ System.out.println(this.getContent()); } public abstract String getContent(); return age; return name; this.name=name; this.age=age; } } return \学生信息:姓名:\+super.getName()+\,年龄:\+super.getAge()+\ 分数:\+this.getScore(); class Worker extends Person{ } public class Pattern { } 显示结果: 学生信息:姓名:张三,年龄:19,分数:99.0 学生信息:姓名:李斯,年龄:20,工资:5000.0 public static void main(String[] args) { } Person per1=new Student(\张三\,19,99); Person per2=null; per2=new Worker(\李斯\,20,5000.00f); per1.say(); per2.say(); private float salary; public Worker(String name,int age,float salary){ } public String getContent(){ } return \学生信息:姓名:\+super.getName()+\,年龄:\+super.getAge()+\super(name,age); this.salary=salary; 工资:\+this.salary; 一、 接口的实际应用——制定标准。 例如:U盘和打印机都可以插在计算机上,是因为二者均实现了USB的接口,对于计 算机来说,只要是符合了USB接口标准设备的就都可以插进来。 接口就是规定了一个标准,计算机认得只是接口,而对于具体的设备计算机本身并不关心。代码如下: interface USB{ //定义usb接口 public void start(); //usb 设备开始工作 public void stop(); //usb 设备结束工作 } class Computer{ public static void plugin(USB usb){ //只要是USB的设备就都可以插入 usb.start(); //让USB设备开始工作 System.out.println(\设备工作*****\); usb.stop(); //让USB设备停止工作 } } class Flash implements USB{ //U盘 public void start(){ } class Print implements USB{ //打印机 } public class Upan { } 显示结果: U盘开始工作。 *****USB设备工作***** U盘停止工作。 打印机开始工作。 *****USB设备工作***** 打印机停止工作。 二、使用Object接收接口实例 interface A1{ } class B1 implements A1{ } public class ObjectDemo { public static void main(String[] args) { A1 a=new B1();//为接口实例化 public String getInfo(){ } return \; public String getInfo();//定义抽象方法 public static void main(String[] args) { } Computer.plugin(new Flash()); //插入U盘 Computer.plugin(new Print()); //插入打印机 public void start(){ System.out.println(\打印机开始工作。\); } public void stop(){ } System.out.println(\打印机停止工作。\); } public void stop(){ System.out.println(\盘停止工作。\); } System.out.println(\盘开始工作。\); } Object obj=a;//对象向上转型 A1 x=(A1)obj;//对象向下转型 System.out.println(x.getInfo()); } 显示结果: Hello World!
正在阅读:
java基础训练05-24
芜湖市电子垃圾处理厂工程可行性研究报告12-15
参考文献(Bibliography)格式的具体说明08-27
人教版高中英语必修1内容全解03-09
电极材料在电火花加工中对加工速度的影响08-17
2018年东城高三一模试题(参考答案)11-23
一次痛苦的表演作文500字07-11
驱动桥检修教学设计07-11
日光温室茬口安排05-18
20 企业社会责任教案01-21
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 训练
- 基础
- java
- 常州市新北区薛家镇总体规划说明书
- 苏教版四年级上册数学教案
- 第1节 身边的生物科学(教案) - 图文
- 煤制甲醇项目可行性研究报告
- 2017-2022年中国智能炒菜机行业市场前瞻与未来投资战略分析报告
- 1988年考研英语试题及答案-end
- STAAD常见问题解答
- 19.2-3家庭电路中电流过大的原因(导学案)
- 东 北 大 学 继 续 教 育 学 院
- 兰渝铁路某标突发性事故事件应急救援预案 - 图文
- 浅谈我院护理操作培训与考核中存在的问题及对策
- 步步高售后工具帮助文档
- 100句话七千单词
- 中心学校2014年春季学期三年级综合实践活动计划
- 2014年国家公务员考试行测技巧:片段阅读能力培养
- win7下装原版苹果mac操作系统详细图教程经典版
- 水供一次相当于念诵阿弥陀佛心咒100万遍 - 图文
- 27.2 相似三角形 检测题1(优质)
- 2019届高考物理二轮复习板块一专题突破复习专题七热学学案19
- 情商结题报告