java记录

游戏界面窗口:

  1. 通过继承JFram来实现
    在JFram里创建一个继承JPanel的内部类设置为JFram的默认面板
  2. 利用setContentPane(new 继承JPanel的内部类) 设置默认面板
  3. 利用setLocationRelativeTo(null)设置窗口居中
  4. 在内部类里添加按钮监听实现窗口跳转·游戏说明和退出
  5. 利用dispose();释放当前窗口资源
  6. System。exit(0)退出窗口,关闭程序
    注:(1)为非正常退出
  7. :: 双冒号具有引用功能,方法引用不是调用方法

    对象名::实例方法名
    类名::静态方法名
    类名::实例方法名
    类名::new


游戏窗口:

  1. 通过继承JFram来实现
  2. 在JFram里创建一个继承JPanel的内部类设置为JFram的默认面板
  3. 在内部类里添加按钮监听实现窗口跳转·游戏说明和退出
  4. 在构造方法里添加窗口监听匿名类实现窗口关闭
    this.addWindowListener(new WindowAdapter()
  5. Runnable接口创建线程来实现方块的下落

    接口只有一个 run() 方法,用 start() 方法启用线程
    当某一线程调用 join() 方法,其他线程会在这一线程执行完后才开始执行。

  6. 在窗口类里创建按键监听内部类实现方块的移动
  7. 通过继承适配器KeyAdapter来实现要用到的方法
  8. 按钮监听和按键监听会发生冲突,导致按键无法使用,通过重新获得面板焦点来解决冲突
    this.setFocusable(true);
    TetGame.this.requestFocus();
  9. 利用迭代器Iterator 遍历容器

    hasNext() 判断是否还有后续元素
    next() 下一个元素
    remove()移除容器内容

  10. @Override

    注解,必须覆盖父类的方法,覆盖是多态的技巧之一。

  11. 使用Random创建随机对象。
  12. 使用 repaint() 方法重画图形。
  13. 字体类Font

    可改变字体大小·外观


单元块

  1. 使用重载的构造方法

    重载是多态的一种方法,同一个类里具有相同名称的多个方法,但参数的列表必须不同
    在构造方法里利用this();调用另一个构造方法,this();必须写在方法的第一行
    构造方法是在对象被创建时初始对象成员的方法,没有返回值,不能用viod修饰,方法名与类名相同。

  2. 利用settergetter 方法保护变量,不容易和其他类的变量混合

形状组合

  1. 通过数组改变方块颜色和形状
  2. 利用容器List存储方块

    LinkedList:不具有随机存取特性,任意位置插入·删除元素时不需要移动其他元素,链表 的大小是可以动态增大或减小。

    ArrayList:具有随机存取特性,插入·删除元素时需要移动其他元素,容量会自动增大,不能自动减小。
    

问题收集

  1. 代码整体较乱
  2. 封装性不算太强
  3. 变量保护程度低,该私有化的地方没做到
  4. 个别地方命名不规范
  5. 基础知识不牢固
  6. 异常处理使用不熟练

知识归纳

  1. 直接在窗口里画东西需要去闪烁,在JPanel里画不用

  2. 利用 JOptionPane.showConfirmDialog 弹出提示框

  3. 居中有多种方法
    this.setLocationRelativeTo(null);

    //      用 Toolkit 窗口居中
        Toolkit tankWinPlace=Toolkit.getDefaultToolkit();
        Dimension screen=tankWinPlace.getScreenSize();
        int x=(screen.width-this.getWidth())/2;
        int y=(screen.height-this.getHeight())/2;
        this.setLocation(x,y);  
    
  4. 静态static ,可被所有对象共享,是把内容直接放到内存中,使用时直接类名.对象

  5. 实现多重继承可以用接口或用B继承A ,C继承B来实现

  6. 跳转语句:

    break:跳出循环体。

    continue:结束本轮循环。  
    return:返回到主程序。
    
  7. 注释:

    // 单行注释。
    /* */ 单行或多行注释。
    / ** */ 文件注释。

  8. 数据类型转换优先级 :(低)byte→short→char→int→long→float→double(高)

  9. 异常处理:try_cath_finally语句 ,throws语句:把异常送往上一层调用机构处理。
    try_cath使用过会拖慢程序运行速度

  10. 成员变量存在于堆内存里。
    局部变量存在于栈内存,会随着方法调用的结束而消失。

  11. 对于非字符串 “==”运算符和equals()方法是比较两个对象变量所指向的是否为同一个对 象。

  12. 配置文件
    约定俗成后缀用 .properties
    配置文件的使用

    public TankGame(){
        Properties pros=new Properties();
        try{
            pros.load(this.getClass().getResourceAsStream(tank.properties));
        }catch (IOException e){
            e.printStackTrace();
        }
        int intiTankCount=Integer.parseInt(pros.getProperty("initTankCount"));
    

    还可以单独建一个类写静态方法

    public class Property {
        static Properties pros=new Properties();
            static {
                try {
                    pros.load(Property.class.getClassLoader().getResourceAsStream("tank.properties"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        public static String getProperty(String key){
    
    
            return pros.getProperty(key);
        }
    }   
    

    然后用类名调用配置文件里的内容
    int initTankCount=Integer.parseInt(Property.getProperty("initTankCount"));

  13. 简单的碰撞检测
    辅助类Rectangle 获取矩形

        return new Rectangle(x,y,WIDTH,HEIGTH); 
        }
        this.getRect().intersects(t.getRect()) 
    
  14. foreach语句:
    for(type element:array){ }

  15. 修饰符:

    public公共:可以被任意对象访问。
    private私有:只允许自己的类访问。
    protected保护:只允许自己的类及其子类或同一包中的其他类访问。
    缺省:同一包中其他类可以访问,其他包中的类不能访问。
    final最终:制定此变量的值不能改变。

  16. 封装:常见是用方法,类

  17. 图片获取:
    Toolkit类一般用于做 Java不适合做,系统适合做的事情

    private static Toolkit tk=Toolkit.getDefaultToolkit();    
    private static Image[] imgs={    
        tk.getImage(Explosion.class.getClassLoader().getResource("images/0.png")  
        图片数组
    };  
    
    private static Map imgs=new HashMap();     
    private static Toolkit tk=Toolkit.getDefaultToolkit();    
    private static Image[] tankImgs=null;    
    static {    静态初始器,直接放到内存里,不用在硬盘里读 ,提高效率。   
    tankImgs=new Image[]{    
    tk.getImage(Explosion.class.getClassLoader().getResource("images/0.png")),  tk.getImage(Explosion.class.getClassLoader().getResource("images/0.png")),    
    };    
    imgs.put("L",tankImgs[0]);     
    imgs.put("R",tankImgs[1]);    
    imgs.put("W",tankImgs[2]);    
    imgs.put("S",tankImgs[3]);    
    }  
    
  18. loop:

    java中break和continue可以跳出指定循环,break和continue之后不加任何循环名则默认跳出其所在的循环,在其后加指定循环名,则可以跳出该指定循环(指定循环一般为循环嵌套的外循环)。

    break跳出指定循环示例代码:

     loop1:for(int x = 0; x < 4; x++)
         {
             loop2:for (int y = 0; y < 5 ; y++ )
            {
                System.out.println("x="+x+",y="+y);
                 if (y==2)
                 {
                     break loop1;
                 }
             }
         }  
    

    continue跳出指定循环示例代码:

      loop1:for(int x = 0; x < 4; x++)
        {
             loop2:for (int y = 0; y < 5 ; y++ )
             {    if (x==2)
                 {
                     continue loop1;
                 }
                 System.out.println("x="+x+",y="+y);
             }
         }  
    
  19. 传值和传址的区别

    public class Text{
        int a=1;
        int b=2;
        private int text(int x int y){  //只传数值1,2进行交换啊a,b值不会互换
            int tamp;                     如果把a,b地址传给x,y进行交换,值会改变
            tamp=x;
            x=y;
            y=temp;
        }
        System.out.println(a+" "+b);
    }  
    
  20. 三目运算
    条件语句?表达式1(表达式只能写一条):表达式2(表达式只能写一条);

  21. goto,const为保留字

  22. 随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为 初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条 件,然后用一定的算法不停迭代产生随机数。

  23. 异或运算

    A B A⨁B
    1 0 1
    1 1 0
    0 0 0
    0 1 1
    void swap(int &a,int &b)
    {
        a=a^b;
        b=b^a;
        a=a^b;
    }
    a1=a^b
    b=b^a1=b^a^b=a
    //此时a1=a^b  b=a
    a=a1^b=a^b^a=b  
    
    a=11,b=9;  
    进行异或计算前会把数值都转换为二进制:
    a=a^b=1011^1001=0010;
    b=b^a=1001^0010=1011;
    a=a^b=0010^1011=1001;
    a=9,b=13;  
    
    • 字符串转换

      任意类型+字符串=字符串
      * 整形转换
      > Integer.parseInt();
      Integer.valueOf();

  24. 未完

你可能感兴趣的:(java记录)