zoukankan      html  css  js  c++  java
  • 201521123076 《Java程序设计》第6周学习总结

    1.本周学习总结

    1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。

    注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
    注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。

    2.书面作业

    Q1.clone方法

    1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?

    A:在自定义的类中覆盖clone方法时需实现Cloneable接口,并声明为pubilc。还要注意此方法实现的是浅复制,要实现完全复制一个对象,需要对其所有引用型属性的复制(如String),即深复制(有关浅复制和深复制上一篇博客中有提及)

    1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。

    A:要想让某方法只能在同包或者子类中被使用,则使用protected进行修饰。以Shape为例,getPerimeter与getArea是只有继承了Shape的具体形状拥有的方法,这时候我们就可以使用protected修饰。

    1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?

    A:无法成功,还是根据protected修饰作用域的范围,因为两个类不是继承关系,也不在同一个包,所以不行。

    Q2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2

    仅需粘贴关键代码与运行结果,图片不要太大。
        匿名内部类写法:
    	Comparator<PersonSortable2> nameComparator = 
    	        new Comparator<PersonSortable2>(){
    	
    	            @Override
    	            public int compare(PersonSortable2 o1, PersonSortable2 o2) {
    	                // TODO Auto-generated method stub
    	                return o1.getName().compareTo(o2.getName());
    	            }
    	    
    	};  
    
    
    	Comparator<PersonSortable2> ageComparator = 
    	        new Comparator<PersonSortable2>(){
    	
    	            @Override
    	            public int compare(PersonSortable2 o1, PersonSortable2 o2) {
    	                // TODO Auto-generated method stub
    	                if (o1.getAge() <  o2.getAge()) {
    	                    return -1;
    	                } else if (o1.getAge() > o2.getAge()) {
    	                    return 1;
    	                } else {
    	                    return 0;
    	                }
    	            }
    	    
    	};  
    

    Lambda表达式:
    
    Comparator<PersonSortable2> nameComparator=(o1,o2)-> o1.getName().compareTo(o2.getName());  
    Comparator<PersonSortable2> ageComparator=(o1,o2)-> o1.getAge()-o2.getAge();  
    

    Collections.sort(personList,NameComparator);
    Collections.sort(personList,AgeComparator);  
    
    
    测试数据:
    5
    zhang 15
    zhang 12
    wang 14
    Wang 17
    li 17  
    
    运行结果: 
    NameComparator:sort
    Wang-17
    li-17
    wang-14
    zhang-15
    zhang-12
    AgeComparator:sort
    zhang-12
    wang-14
    zhang-15
    Wang-17
    li-17
    

    Q3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?

    Comparator<Shape> shapeComparator = new  Comparator<Shape>() {  
         @Override  
         public int compare(Shape o1, Shape o2) {  
             //你的代码     
          }         
    };  
    

    A:调用了匿名内部类,重写compare方法,令shapeComparator实现了Comparator接口,让Shape具有了可比性,当然,比较规则就是重写compare的内容。

    Q4.GUI中的事件处理

    4.1 写出事件处理模型中最重要的几个关键词。

    A:事件源【如Button被点击】<---(注册)---事件监听器【当事件发生时,作出相应反应】

    4.2 使用代码与注释,证明你理解了事件处理模型。
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class Event {
    
    	public static void main(String[] args) {
    		
    		JFrame f = new JFrame("Test");
    		JButton b = new JButton("Press Me!");//事件源
    		b.addActionListener(new ButtonHandler());//注册监听器
    		f.add(b);
    	       f.setSize(200, 100);
    	       f.setVisible(true);
    	}
    	private static  class ButtonHandler implements 
    	   ActionListener{//事件监听器
    			public void actionPerformed(ActionEvent e) {//当事件发生时采取动作
    			    System.out.println("Action occurred");
    			    System.out.println(e.getSource());
    			}
    		}
    }
    

    Q5.结对编程:面向对象设计(大作业2-非常重要,未完成-2)

    继续完善上周的项目作业。考核点如下:
    5.1 尝试使用图形界面改写。

    具体代码

    5.2 给出两人在码云上同一项目的提交记录截图。

    5.3 与上周相比,项目的主要改动是什么?

    A:基本没有改的地方就是之前写过的一些基本类,如Goods,Book。这次是用NetBeans做的,改动比较大的地方就是添加了几个ShowGoods,ShowGoods的Frame,以及重新写了一个GetGoods用来初始化商品(可存可取)。 刚开始想实现点击某个Button的时候切换Frame,用了一个比较愚蠢的办法--新建一个Main,用一个while(true)循环,通过setVisable(true/false)来实现Frame间切换。一运行CPU就飙到15%,这应该是涉及到多线程相关内容吧...之后进行了改进,在类的内部BUTTONActionPerformed方法内new一个需要的Frame,并把当前Frame不可见,新的Frame设置为可见。如:Menu菜单Frame切换到buyGoods菜单Frame:

       private void buyGoodsActionPerformed(java.awt.event.ActionEvent evt) {                                         
            ShowGoods showgoods = new ShowGoods(this);
            showgoods.setVisible(true);
            this.setVisible(false);
        }     
    

    刚开始写的过程中经常遇到空指针异常,主要原因是因为还没理清楚控件生成顺序的先后。通过这次编写对NetBeans有了初步的掌握,也对GUI有了进一步的了解。

    3. 码云上代码提交记录及PTA实验总结

    3.1. 码云代码提交记录

    3.2. PTA实验

    4.1:之前没接触匿名内部类的时候看不懂题目。这道题主要就是对匿名内部类定义一下即可实现。

    5.3:要注意栈为空的情况,否则就会出现数组越界错误。

    5.4:主要就是对内部类的操作进行了实践。

  • 相关阅读:
    centos crash debug
    go get Unknown SSL protocol error in connection to gopkg.in
    Tensorflow serving with Kubernetes
    Spring 集成 Swagger UI
    Docker Registry V2 Garbage Collection
    Docker Registry V2 with Nginx
    Zabbix磁盘性能监控
    Zabbix CPU utilization监控参数
    Windows挂载Gluster复制卷
    Redis持久化存储(三)
  • 原文地址:https://www.cnblogs.com/slickghost/p/6659752.html
Copyright © 2011-2022 走看看