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<String,Image> imgs=new HashMap<String, Image>();     
    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. 未完

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,841评论 0 2
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,573评论 1 114
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,586评论 4 12
  • 今天我读了一本叫《掌控》的书,会休息的人,才能掌控人生,运动我们每个人都知道,跑步可以减肥,但不是说你高强度的训练...
    GPS王阅读 109评论 0 0
  • 今晚听了贾老师的《让“深度学习”真实发生的课堂》的课,颇有感触,深度学习的核心在于引发学生围绕核心内容和探究主题的...
    莒县271贾友彩阅读 294评论 0 0