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

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

package cn.edu.uibe; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }

问:

(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的理解)

public class Light { private int brightness = 5; public void brighten(Light another){ another.brightness++; } public static void main(String[] args) { Light light1 = new Light(); Light light2 = new Light(); light1.brighten(light2); } }

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

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

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

class Base { int i=1; void f(){ System.out.println("Base.f()"); } void g(){ f(); //会调用上面的f()方法吗? } } public class Derived extends Base { //继承了Base类 int i=2; //Derived类的对象有1个i还是2个i呢? 答:2个 void f(){ //覆盖override了f()方法 System.out.println("Derived.f()"); } public static void main(String[] args) { Derived d = new Derived(); //创建子类对象 Base b = d; //没有创建对象,仅仅是父类引用指向了子类对象 d.f(); //将会输出Derived.f() b.f(); //也会输出Derived.f(),方法具有多态性 System.out.println(d.i); //输出的是2,d.i访问子类中定义的变量i System.out.println(b.i); //输出的是1,b.i访问的是父类中定义的变量i,成员变量是不会动态绑定而表现出多态性的。 d.g(); //输出Derived.f() b.g(); //也输出Derived.f(),从父类中调用被覆盖的方法f(),也将调用到子类中更具体的方法。 } }

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

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

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

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

interface A { void f(); } public class B { public void f(A a) { } public static void main(String[] args) { B b= new B(); b.f(new A() { public void f() { } }); } }

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

答案:

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

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

public class Static { static int i = 0; int j=0; public static void main(String[] args) { Static s1 = new Static(); Static s2 = new Static(); s1.i++; s2.i++; s1.j++; s2.j++; System.out.println(s1.i); System.out.println(s1.j); System.out.println(s2.i); System.out.println(s2.j); } }

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

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

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

class Counter{ int i=0; } public class Reference { public void plus(int i){ i++; //不会改变传递进来的参数的值,Java传递基本类型时进行了值的拷贝 } public void plus(Counter c){ c.i++; //会改变,因为c是一个引用变量,相当于指针 } public void create(Counter c){ c = new Counter(); c.i++; //不会改变,因为c执行了另外一个新建的对象 } public static void main(String[] args) { int i = 0; Reference r = new Reference(); Counter c1 = new Counter(); Counter c2 = new Counter(); r.plus(i); r.plus(c1); r.create(c2); System.out.println(i); System.out.println(c1.i); System.out.println(c2.i); } }

问:上面代码输出是?

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

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

class MyException extends Exception{ public MyException(String message){ super(message); } } public class ExceptionDemo{ public void f(int num) throws MyException { if(num<0){ throw new MyException("参数不能为负数!"); } System.out.println(num); } public void g(){ try{ f(1); f(3); f(0); f(-1); f(2); f(-5); }catch(MyException e){ System.err.println(e.getMessage()); return;//会立即返回吗?答:不会! }finally{ System.out.println("无论什么时候!"); } } public static void main(String[] args) { ExceptionDemo demo = new ExceptionDemo(); demo.g(); } }

问:上面代码输出是?

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

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

《Java程序设计课件》 http://sit.uibe.edu.cn/java

深刻理解Java编程的7个例子相关推荐

  1. 【CSDN博客精品文章,佟强】深刻理解Java编程的7个例子

    深刻理解Java编程的7个例子 http://blog.csdn.net/microtong/archive/2009/11/07/4782093.aspx

  2. java对象实例_深入理解Java对象实例生成的例子!(转)

    深入理解Java对象实例生成的例子!(转)[@more@]代码如下: class A { public int Avar; public A() { System.out.println(" ...

  3. 这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析

    前言 package com.jvm.classloader;class Father2{public static String strFather="HelloJVM_Father&qu ...

  4. java继承封装英语怎么说,英语翻译深刻理解JAVA OOP编程,熟练于封装、继承、多态、抽象等JAVA面向对象特征的使用,对常用集合有较深理解,以...

    共回答了16个问题采纳率:87.5% Deep understanding of Java Object Oriented Programming. Able to use encapsulation ...

  5. java闭包矩阵_深刻理解Java闭包概念

    闭包又称词法闭包java 闭包最先定义为一种包含和的实体.闭包 解释一:闭包是引用了自由变量的函数,这个被引用的变量将和这个函数一同存在.函数 解释二:闭包是函数和相关引用环境组成的实体.spa 注: ...

  6. 深刻理解Java多态

    ①多态是同一个行为具有多个不同的表现形式或形态的能力: ②多态就是同一个接口使用不同的实例而执行不同操作: ③多态性是对象多种表现形式的体现. 变量看左边: 方法看右边: 静态看左边. 多态涉及到的方 ...

  7. TCP的socket编程中“全双工的字节流”含义的深刻理解

    本人从事TCP的socket编程多年,趟过很多坑,对于TCP是"全双工的字节流"这几个字的含义有深刻理解.这几个字,文字虽少,但字字精辟.如果没有深刻理解,编程中可能知其然不知其所 ...

  8. java编程思想_基于jdk1.8

    第一章 对象的概念 "我们没有意识到惯用语言的结构有多大的力量.可以毫不夸张地说,它通过语义反应机制奴役我们.语言表现出来并在无意识中给我们留下深刻印象的结构会自动投射到我们周围的世界.&q ...

  9. 《Java编程的逻辑》终于上市了!,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

最新文章

  1. iOS使用Security.framework进行RSA 加密解密签名和验证签名
  2. xcopy 跳过已经存在的_《天官赐福》舍不得跳过的片头片尾,无别,不散唱出花城心声...
  3. LOJ#6281. 数列分块入门 5
  4. nginx ------反向代理和负载均衡
  5. 2015-10-15 css3
  6. 六、pink老师学习笔记——CSS三角形之美 margin负值之美文字围绕浮动元素行内块元素布局的巧妙运用
  7. java按钮退出_java – 如何在此程序中添加退出按钮?怎么样“清楚”?
  8. 数百万戴尔设备遭 BIOSConnect 代码执行漏洞影响
  9. JSP——九大内置对象和其四大作用域
  10. eda多功能数字钟课程设计_eda多功能数字钟设计_相关文章专题_写写帮文库
  11. 手机刷入面具_【手机改造计划】搞机助手 - 小白刷机必备工具,搞机一条龙:解锁、root、刷面具、刷xposed框架、模块下载安装、自动救砖...
  12. 微信支付接口详细步骤
  13. Windows CMD常用命令大全(所见即所得)
  14. elasticsearch 版本区别
  15. windows/linux远程开关机原理及实现
  16. linux下无法删除文件夹,解决linux上无法删除文件的方法(疑难文件)
  17. 想开发一套多人交友app必须知道的
  18. recycleview横向展开_android 横向recyclerView 数据居中,从中间往两边展开显示
  19. 开发者的如何优雅的使用OSX
  20. 计算机内存主要技术参数,一分钟读懂计算机内存SDR、DDR的技术规格

热门文章

  1. 近两个月的自律小总结杂记-送给最光荣的劳动人民
  2. java 32位可用内存_JVM内存不要超过32G
  3. 【LINGO】最小二乘法计算产品属性的效用函数
  4. Css中常用中文字体的Unicode编码对照
  5. 星网视易开机显示服务器负载,一种服务器均衡负载的方法及系统
  6. 软工个人作业 1 - 阅读与提问
  7. Excel学习笔记:P35-Excel怪盗现身。这些网页资料我全部都要了
  8. 八年级下计算机教师工作总结,有关于下学期初二数学教师工作总结
  9. eclipse for Java还是java ee
  10. 前端gis开发以及2D地图和3D地图开发策略