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

    1. 本周学习总结

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

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


    1.2 可选:使用常规方法总结其他上课内容。

    答:除了面向对象与面向接口之外,还学习了关于GUI与Swing的图形程序设计;

    • 创建框架
      • 顶层窗口被称为框架(Frame)
      • AWT中叫Frame
      • Swing中叫JFrame
      • 注意:绝大多数Swing组件都以J开头
    • NetBeans
      • 掌握事件、事件监听器
      • 会根据设计图形自动生成代码
    • 布局管理器
      • 了解即可,使用NetBeans拖动
      • 手动编写布局代码
    • 事件处理
      • 事件:敲击键盘或点击鼠标

    2. 书面作业

    1.clone方法

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

    答:clone方法被protected修饰,根据protected的权限可以知道,clone方法允许在相同的包中的类直接存取,而不同包中的类可以在继承后的子类进行直接存取。
    因此,在自定义的类中覆盖clone方法时需要注意:

    • 实现克隆必须实现Cloneable接口
    • 必须声明为public,其他类才能调用
    //实现克隆接口
    class Employee implements  Cloneable{
     public Employee clone() throws CloneNotSupportedException{
      return (Employee) super.clone();
     }	
    }
    
    • 该实现仅仅是浅拷贝,就是只把对象中有的属性克隆,而不把不包含在对象内的引用型属性克隆

    从PPT偷了一张浅拷贝的效果图

    • 实现深拷贝:
    class Employee implements Cloneable{
       public Employee clone() throws ....{
       //call Object.clone()
       Employee cloned = (Employee) super.clone();
       // clone mutable fields
      cloned.hireDay = (Date) hireDay.clone(); //必须这样克隆
       return cloned;
    }
    }
    

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

    答:以shape为例:
    由于任何多边形都有面积和体积的属性,因此我们将getArea(),getPerimeter()用protected修饰,Rectangle extends(继承) Shape之后,Rectangle是shape的子类,依然可以调用以上两个方法来获得面积和周长,这样不管添加哪些多边形的类(三角形,梯形等),只要让其继承shape,均可调用以上两种方法。

    根据shape总结,可以将多个类共同具有的方法设为protected,通过继承便可调用父类方法,减少代码的复用。

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

    答:不能成功,代码及错误提示如下截图

    原因:从我们自动生成的代码中可以看到,clone方法用的是protected修饰的,而protected在包外是不允许调用的,除非有继承,所以用以上的方法进行克隆不能成功。

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

    仅需粘贴关键代码与运行结果,图片不要太大。

    答:匿名类关键代码

    Comparator<PersonSortable2> nameComparator = new Comparator<PersonSortable2>(){ 
    	
    	@Override
    	public int compare(PersonSortable2 o1, PersonSortable2 o2) {
    		return new String (o1.getName()).compareTo(o2.getName());
    	}
    };
    
    
    Comparator<PersonSortable2> ageComparator = new Comparator<PersonSortable2>(){
    	@Override
    	public int compare(PersonSortable2 o1, PersonSortable2 o2) {
    		return o1.getAge()-o2.getAge();
    	}
    };
    

    匿名类运行结果:

    lambda关键代码

    Comparator<PersonSortable2> nameComparator =
        (PersonSortable2 o1, PersonSortable2 o2)->(o1.getName()).compareTo(o2.getName());
    
    Comparator<PersonSortable2> ageComparator = 
        (PersonSortable2 o1, PersonSortable2 o2)->o1.getAge()-o2.getAge();
    
    

    lambda运行结果:

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

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

    答:这是一个匿名类,shapecomparator实现comparator接口,需要自己定义一个方法来覆盖原来的抽象方法(compare)。

    4.GUI中的事件处理

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

    答:事件处理模型中需要有事件,事件源以及事件监听器。

    4.2 使用代码与注释,证明你理解了事件处理模型。

    public class MainGUI {
    	public static void main(String[] args) {
    		JFrame f = new JFrame("Test");
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		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());//获得事件源
    		}
    	}
    }
    

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

    继续完善上周的项目作业。考核点如下:

    5.1 尝试使用图形界面改写。

    答:代码太复杂,我把界面效果截图出来

    1.登录

    2.查找

    3.找到商品

    4.未找到商品

    5.查看购物车

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

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

    答:首先,用图形界面代替显得更美观,虽然我做的比较粗糙,还有许多不足;其次,增加了登录的界面;再者,用按钮的形式代替手动输入,比如让用户选择是否继续不再通过输入yes or no而是通过鼠标点击“是”或“否”,更加方便。
    下面是上周的效果

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

    题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类

    3.1. 码云代码提交记录:在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

    3.2. PTA实验:函数(选做:4-1)、编程(5-3, 5-4)

    一定要有实验总结

    5-3:根据题目要求,特别要注意栈满和栈空,对top的值要明确,各种自加,自减没区分清楚,需要注意的是IntegerStack stack=new ArrayIntegerStack(n);

    class ArrayIntegerStack implements IntegerStack {
    		private Integer[] arr;
    		private int top=0;
    		public ArrayIntegerStack(int size){
    			arr=new Integer[size];
    		} 
    
    //入栈
    		@Override
    		
    		public Integer push(Integer item) {
    			// TODO Auto-generated method stub
    			if(item==null)return null;
    			if(top==arr.length)return null;
    			arr[top++]=item;
    			return item;
    		}
    
    //出栈
    		@Override
    		public Integer pop() {
    			
    			// TODO Auto-generated method stub
    			if(top==0)return null;
    			else return arr[--top];
    		}
    
    //获得栈顶元素
    		@Override
    		public Integer peek() {
    			// TODO Auto-generated method stub
    			if(top==0)return null;
    			else return arr[top-1];
    		}
    

    5-4:主要在于静态内部类的创建和静态方法的调用,静态内部类PairResult和静态方法PairResult findMinMax(double[] values)是关键,只要把这两个写出来,这道题就差不多了,需要注意的是静态方法可以直接调用,double[] values = new double[n];要记得初始化,否则会出现空指针的错误提示;。

    public static PairResult findMinMax(double[] values){
        PairResult p=new PairResult(0, 0);
        p.min=values[0];
        p.max=values[0];
    		
        for(int i=0;i<values.length;i++){
    	if(p.min>values[i])p.min=values[i];
    	if(p.max<values[i])p.max=values[i];
    	}
        return p;
    	
    }
    
  • 相关阅读:
    【POJ 1958】 Strange Towers of Hanoi
    【HNOI 2003】 激光炸弹
    【POJ 3263】 Tallest Cow
    【POJ 2689】 Prime Distance
    【POJ 2777】 Count Color
    【POJ 1995】 Raising Modulo Numbers
    【POJ 1845】 Sumdiv
    6月16日省中集训题解
    【TJOI 2018】数学计算
    【POJ 1275】 Cashier Employment
  • 原文地址:https://www.cnblogs.com/dabaolyr/p/6658167.html
Copyright © 2011-2022 走看看