当前位置: 首页 > news >正文

201521123063 《java程序设计》第六周学习总结

1. 本周学习总结

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

注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。

注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。

1109975-20170331211314320-1142683400.png

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

  • clone的浅拷贝和深拷贝
    浅拷贝只是实现Cloneable接口,覆盖了clone()方法,并用public修饰,当且仅当要拷贝的对象都没有引用类型的
    如果拷贝的对象中含有引用类型的变量,以则需要hireDay属性为例,需要有 cloned.hireDay = (Date) hireDay.clone();
    这样改变拷贝后对象当中的引用类型变量的值,将不会影响到原来的值,实现身拷贝

  • 嵌套类
    有外部类才有内部类,除了静态内部类,
    嵌套类分为静态和非静态的,总之一个原则,在静态的类只能访问静态的,在非静态的只能访问非静态的
    内部类可以访问外围类的私有属性和方法

2. 书面作业

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

答:由于被protected修饰的,只允许本类或其子类访问,所以覆盖时要改为public,还需要用super.clone()调用Object父类的方法

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

答:在设计类时,不想被包外的类访问时,可以用protected进行修饰,比如要让Rectangle类和Circle类使用父类的属性或方法,而Shape类又不想让其他无干的类使用他的属性或方法,则可以采取这种修饰符 

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

1109975-20170331164912789-1604009243.png

    分析:不能成功,截图如图所示,因为这两个类不在同一个包中,找到Object clone()的源代码,发现是由protected修饰,所以在main中会报错,则需要覆盖clone()方法
        在Employee类中添加代码:
        public Employee clone() throws CloneNotSupportedException {
        Employee cloned = (Employee) super.clone();
        return cloned;
    }

使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2
仅需粘贴关键代码与运行结果,图片不要太大。

见上周作业,点击此处查看题3.3

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

    Comparator<Shape> shapeComparator = new  Comparator<Shape>() {  
         @Override  
         public int compare(Shape o1, Shape o2) {  
             //你的代码     
          }         
    }; 
    答:这段代码为匿名内部类,shapeComparator所指向的对象实现了Comparator接口,重写了compare方法,比较两个Shape类型的对象

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

  • 事件:敲击键盘,点击鼠标或按钮等称为事件

  • 事件源:就是事件发生的场所,指各个组件,比如按钮

  • 事件监听器:通过new java.awt.event.ActionListener() 重写一个匿名内部类,当点击组件的时候实现重写的代码

  • 事件委托模型:当某个事件发生时,我们想要让它产生一些效果或打印出内容,则需要通过事件源,注册监听器,将相应的代码放到实现了接口监听器中的
    public void ****Performed(ActionEvent e)方法中

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

  • 事件委托模型
public class Main {
    static int count=0;
    public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {                //创建一个窗口的时候都会写这个,具体不知做什么...
        public void run() {
        JFrame f = new JFrame("MyText");               //创建窗口并命名 
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton b = new JButton("点击此处!");          // 事件源
        b.addActionListener(new ActionListener(){      //注册监听器,使用匿名内部类
            @SuppressWarnings("deprecation")
            public void actionPerformed(ActionEvent e) {
                System.out.println("事件发生了"+(count+1)+"次");
                b.setLabel("点击了"+new Integer(++count).toString()+"次");
                System.out.println("事件源:"+e.getSource().getClass());
            }
        });
        f.add(b);
        f.setSize(200, 200);
        f.setVisible(true);
        }
        });
}

运行截图如下:
1109975-20170401221934274-383949948.png

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

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

  • 首先是登录的界面:
    1109975-20170402194313695-396770463.png

  • 登录失败

1109975-20170402194557383-2125809691.png

  • 登录成功:

1109975-20170402194407039-53336158.png

  • 点击浏览商品
    1109975-20170402213235274-1104609761.png

  • 点击上图的“我的购物车”
    1109975-20170402194459289-1496767792.png

  • 添加商品
    1109975-20170402194651992-1586622358.png

  • 添加成功
    1109975-20170402213045289-1311978879.png

  • 查看购物车的商品
    1109975-20170403003802492-1389081625.png

  • 结算
    1109975-20170403003943695-2019852851.png

  • 清空商品
    1109975-20170402194742649-1174622009.png

关键代码:

登录的窗口:(当且仅当账户名和密码都是Lin时才能成功登录)
    user.setText("  账户名:");
    password.setText("   密码:");
    ok.setText("确认");
    login.setText("登入");
    login.addActionListener(new java.awt.event.ActionListener() {
    @SuppressWarnings("deprecation")
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    if (userInput.getText().equals("Lin") && passInput.getText().equals("Lin")) {
        Menue menue=new Menue("菜单");
        menue.setVisible(true);
        LoginFrame.this.dispose();
    } else {
        JOptionPane.showMessageDialog(null, "您输入的用户名密码不正确");
    }
    }

弹出购物车窗口的方法:

mycart.setText("我的购物车");
        mycart.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Cart car=new Cart("我的购物车",iterm);
                car.setVisible(true);
            }
        });


增加商品确认键添加的监听器
addok.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                boolean flag=false;
                Iterm a=null;
                for(Iterm i:booklist){
                    if(i.getName().equals(addinputtext.getText())){
                        flag=true;
                        a=i;
                        break;
                    }
                }
                if(flag){
                    if(iterm.contains(a)){
                            iterm.get(iterm.indexOf(a)).number+=Integer.parseInt(addnumberinput.getText());
                        }
                    else{ 
                        a.setNumber(Integer.parseInt(addnumberinput.getText()));
                        iterm.add(a);
                    }
                    JOptionPane.showMessageDialog(null,"已添加");
                }
                else{
                    JOptionPane.showMessageDialog(null,"添加错误!");
                }
            }
        });


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

只有一个人...

码云地址

1109975-20170402201137805-21620418.png

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

答:主要改动在外观上有很大的变动,而且输出输入的方式不同,不是从控制台获取,而是通过getText等获取,还有鼠标的点击,利用监听器等等,所以改动还是很大的,但是好在还有netbeans这个软件,给我减轻不少负担,总之弄这个图形界面还是比较麻烦的...或许是本人比较愚钝吧

参考资料:
结对编程参考资料
使用Processon画图
视频-使用Netbeans编写GUI
重要:Swing实验参考资料
JTable用法,用于呈现表格数据
Swing相关文章

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

题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录

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

1109975-20170402201439258-824152357.png

3.2. PTA实验

函数(选做:4-1)、编程(5-3, 5-4)
一定要有实验总结
  • 4-1
    1109975-20170331223721430-923956355.png
    这题是编写ActionListener的匿名内部类,但是只有Java8中匿名类或局部类可以访问外部的非final变量,但是pta平台不支持java8,因为要用到sc 所以在前面要加一个final

  • 5-3
    ArrayIntegerStack实现IntegerStack接口,重写了那些方法,发现主要是指针的指向要明确,出栈要减,入栈要加,最后再根据要求用Arrays.toString输出就好

  • 5-4
    这题使用的是嵌套类,外围围静态类,内为也是静态类,在外围中new一个内部类的对象,返回值为内部类的类型,最后再main入口函数中使用ArrayUtils.findMinMax

转载于:https://www.cnblogs.com/lyq063/p/6650556.html

相关文章:

  • JS: 获取当前页面URL
  • 我不知道的promise
  • background-image的url
  • 我是如何处理大并发量订单处理的 KafKa部署总结
  • iframe--的一些方法
  • 重定位
  • shell命令_tr基础
  • 【数据库系列_概念】1数据库概念学习——基本概念术语
  • 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
  • test命令用法。功能:检查文件和比较值
  • iOS项目之模拟请求数据
  • [转]你可能不知道的10个JavaScript小技巧
  • Cobbler自动装机--2
  • shell 空格
  • bzoj 1189: [HNOI2007]紧急疏散evacuate
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Angular 响应式表单 基础例子
  • Js基础——数据类型之Null和Undefined
  • JS数组方法汇总
  • Octave 入门
  • pdf文件如何在线转换为jpg图片
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Rancher如何对接Ceph-RBD块存储
  • SAP云平台里Global Account和Sub Account的关系
  • ucore操作系统实验笔记 - 重新理解中断
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 解析带emoji和链接的聊天系统消息
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 转载:[译] 内容加速黑科技趣谈
  • C# - 为值类型重定义相等性
  • #mysql 8.0 踩坑日记
  • #stm32整理(一)flash读写
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (算法)Game
  • (一)u-boot-nand.bin的下载
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .bat批处理出现中文乱码的情况
  • .Net core 6.0 升8.0
  • .NetCore项目nginx发布
  • .NET处理HTTP请求
  • .NET中winform传递参数至Url并获得返回值或文件
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @selector(..)警告提示