深刻理解Java编程的7个例子



   先上一个异常处理的例子,这个例子还挺全面的:

 
 
[java] view plain copy
  1. package cn.edu.uibe.exp;  
  2.   
  3. class MyExp extends Exception{  
  4.   
  5.     private static final long serialVersionUID = 1L;  
  6.       
  7.     MyExp(){  
  8.         super("自定义异常");  
  9.     }  
  10.       
  11. }  
  12. public class Exp2 {  
  13.   
  14.     public void f1(int n) {  
  15.         System.out.println("f1前面");  
  16.         f2(n);  
  17.         System.out.println("f1后面");  
  18.   
  19.     }  
  20.   
  21.     public void f2(int n) {  
  22.         System.out.println("f2前面");  
  23.         try{  
  24.            System.out.println("try的前面");  
  25.            f3(n);  
  26.            System.out.println("try的后面"); //发生异常时不会输出  
  27.         }catch(MyExp e){  
  28.             System.err.println(e.getMessage());  
  29.         }finally{  
  30.             System.out.println("无论是否发生异常");  
  31.         }  
  32.         System.out.println("f2后面");  
  33.     }  
  34.   
  35.     public void f3(int n) throws MyExp{  
  36.         System.out.println("f3前面");  
  37.         f4(n);  
  38.         System.out.println("f3后面"); //发生异常时不会输出  
  39.     }  
  40.   
  41.     public void f4(int n) throws MyExp{  
  42.         System.out.println("f4前面");  
  43.         if(n<0){  
  44.             throw new MyExp();  
  45.         }  
  46.         System.out.println(n); //发生异常时不会输出  
  47.         System.out.println("f4后面"); //发生异常时不会输出  
  48.     }  
  49.   
  50.     public static void main(String[] args) {  
  51.           
  52.         Exp2 exp = new Exp2();  
  53.         exp.f1(-4);  
  54.   
  55.     }  
  56.   
  57. }  
 
 
 




 

深刻理解Java编程的7个例子

分类: Java语言   5634人阅读  评论(52)  收藏  举报

深刻理解Java编程的7个例子   佟强 2009年11月7日 http://blog.csdn.net/microtong

 1. 阅读下列代码回答问题(第一个Java程序,理解PATH和CLASSPATH,学会使用javac和java命令)

[java]  view plain copy
  1. package cn.edu.uibe;  
  2. public class HelloWorld {  
  3.     public static void main(String[] args) {  
  4.         System.out.println("Hello World!");  
  5.     }  
  6. }  

问:

(1)上面代码所在的源文件的文件名是_______________?
(2)在DOS提示符下,当前目录为该源文件所在的目录,PATH环境变量已包含编译程序所在的路径,编译目标路径为“D:/classes”,编译命令行是_____________?
(3)为了让Java解释器能够找到编译后的类文件,需要如何设置环境变量___________?
(4)在正确设置了相关的环境变量之后,运行HelloWorld类的命令行是____________?


答案:

(1)HelloWorld.java,公共类必须定义在和类名同名的文件中,文件名区分大小写。

(2)javac -d D:/classes HelloWorld.java ,-d给出输出目录,javac会在D:/classes创建包的目录层次结构cn/edu/uibe/HelloWorld.class

(3)set CLASSPATH=.;D:/classses,CLASSSPATH给出Java寻找.class文件的多个路径,路径之间用分号分隔,“.”表示当前路径。

(4)java cn.edu.uibe.HelloWorld,注意需要给出包名,类名后面不要加“.class”。

 

2. 阅读下列代码回答问题(关于private的理解)

[java]  view plain copy
  1. public class Light {  
  2.     private int brightness = 5;  
  3.     public void brighten(Light another){  
  4.         another.brightness++;  
  5.     }  
  6.     public static void main(String[] args) {  
  7.         Light light1 = new Light();  
  8.         Light light2 = new Light();  
  9.         light1.brighten(light2);  
  10.     }  
  11. }  

 

问:上面代码Java编译器是否会给出错误提示?为什么?

答案:不会出现错误提示,private限制了私有变量只能被同一个类访问,但是没有限制同一个类的不同对象之间互相访问私有变量。实际上,private是在编译时进行检查,如果想限制同类对象之间互相访问,需要在动态运行时实现,开销较大,而且没有必要。

 

3. 阅读下列代码回答问题(关于多态性的理解)

[java]  view plain copy
  1. class Base {  
  2.     int i=1;  
  3.     void f(){  
  4.         System.out.println("Base.f()");  
  5.     }  
  6.     void g(){  
  7.     f(); //会调用上面的f()方法吗?  
  8.     }  
  9. }  
  10. public class Derived extends Base { //继承了Base类  
  11.     int i=2//Derived类的对象有1个i还是2个i呢? 答:2个  
  12.     void f(){ //覆盖override了f()方法  
  13.         System.out.println("Derived.f()");  
  14.     }  
  15.     public static void main(String[] args) {  
  16.         Derived d = new Derived(); //创建子类对象  
  17.         Base b = d; //没有创建对象,仅仅是父类引用指向了子类对象  
  18.         d.f(); //将会输出Derived.f()  
  19.         b.f(); //也会输出Derived.f(),方法具有多态性  
  20.         System.out.println(d.i); //输出的是2,d.i访问子类中定义的变量i  
  21.         System.out.println(b.i); //输出的是1,b.i访问的是父类中定义的变量i,成员变量是不会动态绑定而表现出多态性的。        
  22.         d.g(); //输出Derived.f()  
  23.         b.g(); //也输出Derived.f(),从父类中调用被覆盖的方法f(),也将调用到子类中更具体的方法。  
  24.     }  
  25. }  

问: 写出上面代码的输出?

答案:参见代码注释,子类和父类中定义同名的变量时,仅仅是隐藏了,变量没有多态性;而对于覆盖的方法,Java表现出多态性,

会调用更具体的子类里面的方法,无论从哪里调用,无论使用什么引用类型调用。

 

4.阅读下列代码回答问题(关于匿名内部类的理解)

[java]  view plain copy
  1. interface A {  
  2.     void f();  
  3. }  
  4. public class B {  
  5.     public void f(A a) {  
  6.     }  
  7.     public static void main(String[] args) {  
  8.         B b= new B();  
  9.         b.f(new A() {  
  10.             public void f() {  
  11.             }  
  12.         });  
  13.     }  
  14. }  

问:请解释语句
b.f(new A() {
    public void f() {
    }
});
的含义与作用。

 

答案:

   这个语句在参数表中定义了一个匿名内部类,这个匿名内部类实现了接口A,实例化了一个匿名内部类的对象,并将这个对象传递给了接收接口A作为参数的方法f(A a)。需要注意的是接口A中的方法f()和类B中的方法f(A a)没有任何关系,是不同的方法。


5. 阅读下列代码回答问题(关于static的理解)

[java]  view plain copy
  1. public class Static {  
  2.     static int i = 0;  
  3.     int j=0;  
  4.     public static void main(String[] args) {  
  5.         Static s1 = new Static();  
  6.         Static s2 = new Static();  
  7.         s1.i++;  
  8.         s2.i++;  
  9.         s1.j++;  
  10.         s2.j++;  
  11.         System.out.println(s1.i);  
  12.         System.out.println(s1.j);  
  13.         System.out.println(s2.i);  
  14.         System.out.println(s2.j);  
  15. }  
  16. }  

 

问:写出上面代码的输出。

答案: 2 1 2 1,i是静态变量,类的所有实例共享同一个i,通常我们不通过引用变量访问静态变量,而是通过类名访问Static.i,注意Static是我们自己定义的类名,而小写的static是关键字,表示静态的,为类的所有实例共享的变量或方法。j是实例变量,每个对象具有不同的,属于其自身的一个变量j。

 

6. 阅读下列代码回答问题(关于引用变量的理解)

[java]  view plain copy
  1. class Counter{  
  2.     int i=0;  
  3. }  
  4. public class Reference {  
  5.     public void plus(int i){  
  6.         i++; //不会改变传递进来的参数的值,Java传递基本类型时进行了值的拷贝  
  7.     }  
  8.     public void plus(Counter c){  
  9.         c.i++; //会改变,因为c是一个引用变量,相当于指针  
  10.     }  
  11.     public void create(Counter c){  
  12.         c = new Counter();   
  13.                   c.i++; //不会改变,因为c执行了另外一个新建的对象  
  14.     }     
  15.     public static void main(String[] args) {  
  16.         int i = 0;  
  17.         Reference r = new Reference();  
  18.         Counter c1 = new Counter();  
  19.         Counter c2 = new Counter();       
  20.         r.plus(i);  
  21.         r.plus(c1);  
  22.         r.create(c2);         
  23.         System.out.println(i);  
  24.         System.out.println(c1.i);  
  25.         System.out.println(c2.i);  
  26.     }  
  27. }  

问:上面代码输出是?

答案:参考代码注释,输出应该是:0 1 0

 

 

7. 阅读下列代码回答问题(关于异常的理解)

 

[java]  view plain copy
  1. class MyException extends Exception{  
  2.     public MyException(String message){  
  3.         super(message);  
  4.     }  
  5. }  
  6. public class ExceptionDemo{  
  7.     public void f(int num) throws MyException {  
  8.         if(num<0){  
  9.             throw new MyException("参数不能为负数!");  
  10.         }  
  11.         System.out.println(num);  
  12.         }  
  13.     public void g(){  
  14.         try{  
  15.             f(1);  
  16.             f(3);  
  17.             f(0);  
  18.             f(-1);  
  19.             f(2);  
  20.             f(-5);  
  21.         }catch(MyException e){  
  22.             System.err.println(e.getMessage());  
  23.             return;//会立即返回吗?答:不会!  
  24.         }finally{  
  25.            System.out.println("无论什么时候!");     
  26.         }  
  27.     }  
  28.     public static void main(String[] args) {  
  29.         ExceptionDemo demo = new ExceptionDemo();  
  30.         demo.g();  
  31.     }  
  32. }  

问:上面代码输出是?

答案:输出是:1 3 0 参数不能为负数! 无论什么时候!

try语句块里面的一行代码抛出了异常,后续代码就不再执行了,而是转到catch开始匹配异常类型。finally语句块里面的代码始终会被执行,即使在catch语句块里面有行return语句也不会立即返回,Java确保finally语句块执行完函数才会返回。

  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑运算符 14 实例8 位运算符 15 实例9 移位运算符 16 实例10 转型运算符 17 2.3 其他形式 18 实例11 常量与变量 18 实例12 各种进制的转换 19 实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17 如何列出素数 29 实例18 Java中的递归 31 实例19 男生女生各多少人 32 实例20 求水仙花数 34 实例21 求任意一个正数的阶乘 35 实例22 求n的n次方 35 实例23 利用for循环输出几何图形 36 实例24 杨辉三角 38 3.3 while语句 39 实例25 求1到100之间的和 39 实例26 存上100元需要多少天 40 实例27 输出100之间的所有偶数 41 实例28 如何判断回文数字 42 3.4 do…while语句 43 实例29 输出100之间的所有奇数 44 实例30 求最大的随机数 44 3.5 switch语句 45 实例31 判断字母分类 46 实例32 优良及差 47 实例33 打印任意一年日历 48 实例34 一年四季的划分 51 第2篇 Java数据处理 第4章 异常处理(教学视频:62分钟) 54 4.1 编译时异常 54 实例35 除0发生的算术异常(ArithmeticException) 54 实例36 数组下标越界异常(ArrayIndexOutOfBoundsException) 55 实例37 数组元素类型不匹配异常(ArrayStoreException) 56 实例38 强制类型转换异常(ClassCastException) 56 实例39 索引越界异常(IndexOutOfBoundsException) 57 实例40 空指针异常(NullPointerException) 58 实例41 数字格式转换异常(NumberFornatException) 59 实例42 字符串索引越界异常(StringIndexOutBounds) 60 实例43 操作错误(UnsupportedOperationException) 60 4.2 运行时异常 61 实例44 找不到指定类时发生的异常(ClassNotFoundException) 62 实例45 请求的方法不存在(NoSuchMethodException) 63 4.3 try…catch捕获异常 65 实例46 try…catch捕获异常的实例 66 实例47 try…catch…finally捕获异常的实例 67 实例48 try…catch嵌套捕获异常的实例 68 4.4 throws声明异常 69 实例49 throws声明异常实例一 69 实例50 throws声明异常实例二 70 4.5 throw抛出异常 72 实例51 throw抛出异常实例一 72 实例52 throw抛出异常实例二 73 4.6 自定义异常 74 实例53 自定义异常实例一 74 实例54 自定义异常实例二 75 第5章 数组(教学视频:98分钟) 78 5.1 一维数组 78 实例55 一维数组的创建与使用 78 实例56 按相反的顺序输出 79 实例57 奇偶分组 80 实例58 找宝 81 实例59 寻找最小数 82 实例60 我的位置在哪里 83 实例61 复制数组 85 实例62 插入新元素 86 实例63 数组的合并 87 实例64 去除重复元素 88 实例65 数组求和计算 90 实例66 求最大值、最小值和平均值 91 5.2 二维数组 92 实例67 二维数组的创建与使用 92 实例68 矩阵转置 93 实例69 奇数阶幻方 94 实例70 求方阵对角线之和 96 实例71 矩阵的加法 97 实例72 矩阵的减法 98 实例73 快递报价单 99 5.3 数组的排序 101 实例74 冒泡排序法 102 实例75 数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值