java学习总结(1)基础

2010-7-27---2010-8-12
需要总结的内容:
1.继承、多态、重写?

     继承:已经有一个parent父类,子类要调用父类的方法与属性,用extends关键字
      public sonName extends parName {
          //自动具有了parName父类中的方法是与属性
      }
      多态:方法名相同,传入参数不同,内部功能不同
      public Study(){//.....}
      public Study(String name){//.....}
      public Study(String name,int num){//.....}

      重写:在子类中对继承来的方法进行重写,方法定义不变,但方法的实现不同

2.数据类型、值传递和引用传递有什么区别,String是什么传递?
  数据类型没有学,以我自己的理解写:
  bype型(我在c++中没有用过这个类型)1个字节  8bit
  short型 2个字节 
  char型  2个字节
  int型   4个字节
  long型  8个字节
  float型  4个字节  1.234f  2.345F
  double型 8个字节
  Boolean型  true/false
  // String型 8个字节(S要大写)String是一个类不是基本类型
  值传递和引用传递的区别:
    数据为八大基本类型是,数据在调用传递时是( 值传递)
    数据为引用类型即类类型是,通过创建的对象来调用 (引用传递)通过方法可以改变值
    String虽然为一个类,但是遵循值传递的规则

3.Set如何遍历,有哪些子类、List如何遍历,有哪些子类、Map如何遍历,有哪些子类
    Map中是否可以放入null的key或Vlaue?Set,List呢?   
    <--这个我还没学-->
  4.Swing界面相关,Swing组件的继承体系图、事件监听器的继承体系图。

   Swing采用了一种MVC的设计范式,即"模型-视图-控制"(Model-View-  Controller),其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。
  在javax.swing包中,定义了两种类型的组件:顶层容器(JFrame,JApplet,JDialog和JWindow)和轻量级组件。Swing组件都是AWT的Container类的直接子类和间接子类。

java.awt.Component
    -java.awt.Container
       -java.awt.Window
          -java.awt.Frame-javax.swing.JFrame
          -javax.Dialog-javax.swing.JDialog
          -javax.swing.JWindow
       -java.awt.Applet-javax.swing.JApplet
       -javax.swing.Box
       -javax.swing.Jcomponet

swing包是Swing提供的最大包,它包含将近100个类和25个接口,几乎所有的Swing组件都在swing包中,只有JtableHeader和   JtextComponent是例外,它们分别在swing.table和swing.text中。
  swing.border包中定义了事件和事件监听器类,与AWT的event包类似。它们都包括事件类和监听器接口。
  swing.pending包包含了没有完全实现的Swing组件。
  swing.table包中主要包括了表格组建(JTable)的支持类。
  swing.tree同样是JTree的支持类。
  swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf都是用于显示和编辑文档的包。
http://www.itlearner.com/article/549(相当详细)

  5.递归与循环的区别?
    在方法里面在调用自己就是递归。递归可以看做是循环
    循环体里面没有方法本身了。    循环不能看成是递归

  6.I/O流继承体系结构图和分类。文件复制的实现,原始数据类型读写
    <--貌似我现在还没接触过结构体系这样的字眼,惭愧!-->
    文件复制的实现:
   public boolean copyFile(Stirng srcFile,String destFile){
       //创建一个从源文件来的输入流(水站)
       InputStrean ins=new FileInputStream(srcFile);
       //缓冲输出流对象(水缸)
       OutputStream ous=new FileOutputStream(destFile);
       //OutputStream ous=new FileOutputStream(destFile,true);//输出内容附加到已存在                                                                文件后面
       int i=0;
       //从输出流中读取一个字节(但是定义是用的是int)
       while(i=ins.read()!=-1){ 当i=-1时,文件到末尾了 .read()功能为读取下一个字节
       ous.write(i);       
       }
       ins.clouse(); //关闭水站龙头
       ous.flush();  //清空输出流的缓存并关闭(将输水管中的水清掉,并撤掉水管)
       ous.clouse();//关闭水缸水流入口
   
       return true;  //文件复制成功
   }

   http://java.chinaitlab.com/base/782283.html
       
  7.线程:线程有几种创建方式?线程在程序中有几种状态?
     3种创建方式:
      1)重写Thread类实现线程
      2)实现Runnable接口创建线程(没接触)
      3)以内部类的方式创建线程
      4)继承TimerTask类实现线程的定时执行(没接触)
    ●新线程态(New Thread) 
   产生一个Thread对象就生成一个新线程。当线程处于"新线程"状态时,仅仅是一个空线程对象,它还没有分配到系统资源。因此只能启动或终止它。任何其他操作都会引发异常。
  ●可运行态(Runnable) 
    start()方法产生运行线程所必须的资源,调度线程执行,并且调用线程的run()方法。在这时线程处于可运行态。该状态不称为运行态是因为这时的线程并不总是一直占用处理机。特别是对于只有一个处理机的PC而言,任何时刻.只能有一个处于可运行态的线程占用处理 机。Java通过调度来实现多线程对处理机的共享。 
  ●非运行态(Not Runnable) 
  当以下事件发生时,线程进入非运行态。 
  ①suspend()方法被调用; 
  ②sleep()方法被调用; 
  ③线程使用wait()来等待条件变量; 
  ④线程处于I/O等待。 
  ●死亡态(Dead) 
  当run()方法返回,或别的线程调用stop()方法,线程进入死亡态 。通常Applet使用它的stop()方法来终止它产生的所有线程。 


 
  8.static用法与注意事项,==和equals的区别?
     使用static限定的方法称为静态方法或类方法,其调用不必经过创建该类的对象,类的某一个static属性值被改变之后,这个类所有对象的static属性值都会改变(类似于C++中#define num 10),static属性可以在任何方法中调用,但在static方法中只能直接调用static属性,非static属性必须通过创建对象来调用
   ==必须使用的是原始数据 如1==1
  equals 使用时,可以是对象,相等的标准比较灵活,不如 stu1.equals(stu2). equals是一个方法   
  9.完成的项目功能说明和缺陷分析。(画板、五子棋、弹球游戏3选2)
    1)弹球游戏(到目前为止不知道这是啥玩意儿),画出一个球来还不收控制
    2)画板
     初步实现了画直线、椭圆的方法,可以重绘,可以保存并提取文件,实现了对颜色的设置。目前的缺陷很多,多到不知道该怎么说!
     重绘的时候颜色会改变
     不明白为甚么要搞保存和提取,还没有进行深一步的研究
     实现的功能还非常简单。画面设计不够美观
    3)五子棋
     初步实现了棋盘的绘制、棋子的落子,单局输赢判断(人人对战版)
     缺陷:不能进行下一局
           没有难度区分
           没有实现人机对战(弱智的简单人工智能)
           无法设置先手后手
           。。。。。未知问题
  10.自己的学习到的经验?典型的碰到什么难题?如何解决?
     做画板是一直是画一个图形,重绘后图形就发生走样,纠结两天后在查了N次代码后发现是自己粗心将paint()函数内的this.x2=x2写成了this.x2=y2;(找hu总求救,他让我自己再纠结纠结,结果自己本着“失败九十九次,第一百次一定成功”的信念再认真检查后终于找到症结所在了,希望大家也能引以为戒,低级问题一定要自己耐心的去发现)
     最开始把所有代码都写到一个类里面,看着非常没有条理,随着对值传递理解的加深,这才开始慢慢分开写

    
   做五子棋时最纠结的是各种值的调用和监听器的设置,到现在还是比较迷糊(actionListener和mouseLitener)~典型的问题是每次老师给分析完之后自己会做一步,然后下一步就不知道该怎么办了!!缺乏自主性啊

   最开始设置棋盘线是有问题的,找坐标计算坐标用了很长时间,但搞出来后也觉得没有想象中的那么难了。
   画棋子设置监听器的时候确实遇到了很大问题,大部分是hu总帮忙解决的,现在还在消化过程中
   每一个棋子画完后要存入chessBox数组中时也遇到了问题。当重绘时需要提取数组中的值,没有参数的数组是null,最开始忽略了这点
  当一方获胜后弹出提示窗口,当关掉窗口后还可以继续落子。这个问题通过移除监听器来解决了
   目前最大的问题是放一个棋子后,机器自动添加另外一方的棋子,虽然按照傻瓜规则可以添加,但判断输赢却出问题了~~
求高手指教!

你可能感兴趣的:(java,多线程,数据结构,游戏,swing)