Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1830024
  • 博文数量: 283
  • 博客积分: 10141
  • 博客等级: 上将
  • 技术积分: 2931
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-21 14:33
文章分类

全部博文(283)

文章存档

2013年(2)

2012年(2)

2011年(17)

2010年(36)

2009年(17)

2008年(18)

2007年(66)

2006年(105)

2005年(20)

分类: Java

2006-03-20 13:07:53

2006-3
0. 特别感谢老师与耐心的师兄!
1. 点点滴滴
总体感觉:
Java的面对对象的概念更完整,这种感觉对于我长期以来过程化地处理程序的习惯来说,是一种冲击。但同时,我觉得其实程序本身无所谓是面向对象还是面向过程的,只不过是你看到了,抑或是更看重问题的哪个方面罢了。对于本质而言,只是用计算机语言去模拟实际问题,建立不同的模型,通过不同的方法解决问题罢了。
Java的语法并不复杂,比之于需要兼容C的C++,这点上更占优势。而且Java把程序员从malloc/new与free中解脱了出来,这很方便,但同时,是以效率为代价的。
Java的效率差,就点让我不爽。当然,效率差得很有理由,通过JVM解释字节码来屏蔽底层的差异,通过垃圾回收器还保证内存不泄露等等方法,让Java用起来简单,但去不得不接受效率差这个事实。不过对于大多数应用级别的程序,Java确实是好的选择。(不要考虑用Java写驱动:p)
在此,我只想记下觉得比较有意思的点点滴滴,不知道这样的速成学习法会带来什么样令人惊讶还是惊恐的效果。
(1) From Oak to Java
  Sun公司为员工提供产自Java岛的工间咖啡,这就是Java最初的来源。
(2) 将复杂的世界抽象成对象及接口是个不容易的过程,如果你想做得足够好。
(3) 其实,在我手中的,是Reference
  在方法调用时,基本类型使用值传递,而对象,则采用引用传递。
   当我初始化一个对象实例时,我拿着的标识符,不过是到那个对象实例的实际数据的引用罢了,就像我“拿着遥控器来控制电视机的状态”。
(4) 几个有意思的关键字:
this: 指向调用当前方法的对象。其实,就是指当前对象的引用。对于Inner class也不例外。
static: 让数据成员或函数不再局限于所属的类对象上,即使没有产生类对象,也可以通过类名来调用static函数或得到其static data。(一些库函数应该是这样做的,比如System.out.print*,呵呵)
final: 修饰data时,data可以是在编译时就确定的常量,也可以是在执行时初始化一次就不再改变的
修饰object references时,不是指内容不变,而是reference不变,不能再指向别的对象(Java没有让对象内容不变的机制。)。
当final修饰method的时候,可以锁住这个method,让derived class没法改变其意义,即某method在继承过程中不被overridden.
当final修饰class时,别人就不许继承这个class了。
  一个变量是final+static时,这个变量得到一块无法改变的存储空间。
(5) 异常处理:
Java的异常处理机制比较让人羡慕,抛出->捕捉->处理
try{} catch(Exception e) {} 呵呵
(6) expands与implements
  Java中的类不允许从多个不同的父类继承,这样,所有类都是Object类的子类,或者子类的子类……简单地表示,是这个样子的
Class A extends B implements X,Y,Z
(7) 权限访问
   同一个类  同一个包  不同包中的子类

 不同包中的非子类

 private    *      
 default    *    *    
 protected     *    *      *     
 public    *     *     *     *

(8) 构造函数
  当程序员不自己写构造函数的时候,默认有一个无参的构造函数,但当程序员自己写了构造函数时,不会生成默认的无参构造函数。
(9) 一些细节的语法问题我不想记下来了。把运算符优先级抄在这里是没用的。
2. 实践简记
(0) 环境:NetBeans IDE 4.0
    目标:写一个简单的猜数字游戏,规则同文曲星上的猜数字游戏。
(1) 遇到的问题1:“请求处理器中出现异常”
    写代码时死机,reboot了。然后再编译程序时没问题,但运行时候提示栏里会有“请求处理器中出现错误”的字样,跳出个对话框要求选择主类集。选完之后,会不停的循环要求选择,直到死在那儿。我想应该是reset的时候一些信息没保存。但是看相关信息显示是设置了主类了的。Google未找到解决方法。我只好把几个*.java文件copy到了新建的一个项目里后,一切正常。
(2) 产生随机正整数—Random类
    Random rdm = new Random(); //种子
    Int tmp = rdm. nextInt();  //随机整数
其中,nextInt产生的是整数,为了保证是正整数,我做了这样的处理:
    tmp = (rdm.nextInt()%10+10) % 10;
另外,这个类中还有其它函数可以产生随机的小数等。
(3) 从String到int[]
  因为从JTextField里getText()得到的是String,而在产生随机数是int[]存储的。解决的方法不好看,如下:
       (int)inputstring.charAt(index) – 48;
    charAt用于得到String中index位置的char,然后前面直接强制转换成int,再减去48,抹平了数字与字符ASCII之间的差异。
(4) 图形界面方面的一些问题
a. 布局 GridBagLayout是最精准的,但我最终没搞明白那些复杂的设置。这个小程序要的界面控制并不复杂,所以我选择了GridLayout,这个布局会根据要求把整个Panel分为几行几列,然后把组件按顺序填进去。
b. 让对话框出现在屏幕中间的处理方法
    public MainFrame() {
        initComponents();
        this.setSize(400, 200); //设置窗口大小
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = getSize();
        this.setLocation(new Point((screenSize.width - frameSize.width) / 2,
                              (screenSize.height - frameSize.width) / 2));
    }
  其实,就是在构造函数中用getSize()得到屏幕尺寸,然后算出中间位置,再用setLocation()来处理。
c. 界面风格的处理
Java支持不同的界面风格,也可以根据运行环境来选择界面风格。UIManger可以做到。:)
(5) 代码
文件: myNumberGuess.rar
大小: 41KB
下载: 下载
3.路还长,要学的东西还多 -_-b
阅读(1548) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~