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

    1. 本周学习总结

    1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容。

    多线程

    • Runnable类
      表示任务的类,可以当作参数传入Thread的构造器来运行该任务

    • Thread类
      线程类,在其run方法中的代码就可以在另一个线程中运行

    • ExecutorService类
      可以直接实例化一 个ExecutorService类来统一的管理线程
      例如ExecutorService exec=newFixedThreadPool(amount);
      这样就生成了一个只允许固定数量amount存在的线程管理器

    • ThreadFactory 类
      通过实现这个接口可以实现很方便的生成自定义的线程,例如要批量设定线程是否为后台线程

    2. 书面作业

    本次PTA作业题集异常多线程

    1.finally

    题目4-2

    1.1 截图你的提交结果(出现学号)

    1.2 4-2中finally中捕获异常需要注意什么?

    需要注意的是如果在finally中还有要关闭的资源还要再用finally关掉

    2.用异常改进ArrayIntegerStack

    题目4-3

    2.1 截图你的提交结果(出现学号)

    2.2 实验总结

    子函数中如果出现异常不需要捕获,因为就算捕获了该函数也不能做什么事情,要用throws声明将异常往上级抛出,等到可以处理的地方再处理

    3. 自定义异常

    题目5-4

    3.1 截图你的提交结果(出现学号)

    3.2 自定义异常有哪几个关键点?

    想自定义一个uncheckException的话要继承自RuntimeException
    想给生成的异常设定更为详细的信息的话可以在构造器里使用调用super来使用父类的构造器

    4. 读取文件并组装对象

    实验任务书中中的题目3:读取文件并组装对象
    给出关键代码(需出现你的学号)

    1. 身份证号.txt有若干人的信息,为其创建对象User,拥有属性name(String), id(String), gender(String), age(int),address(String)。经观察“身份证号.txt”个别行的数据有缺失。直接运行ReadFileUsingScanner.java,会发生异常,是什么异常?现希望程序碰到错误行的时候,直接跳过该行,不进行处理,继续处理下面的数据。如何修改该程序?

    直接运行会产生java.util.NoSuchElementException

    		String a1 = null,a2 = null,a3 = null,a4 = null,a5 = null;
    		try
    		{
    			 a1 = lineScanner.next();//姓名
    			 a2 = lineScanner.next();//身份证号
    			 a3 = lineScanner.next();//性别
    			 a4 = lineScanner.next();//年龄
    			 a5 = lineScanner.next();//地址
    			while(lineScanner.hasNext()){//谨防地址只有一段
    				a5 += lineScanner.next();
    			}
    			System.out.println(a1+a2+a3+a4+a5);
    			
    		}
    		catch(NoSuchElementException e)
    		{
    		}
    

    2. 试编写一程序,将文件中的信息读出,组装成User对象,然后放入一个List。注意:这里需要使用try..catch处理程序中可能出现的异常。当发生错误时,提示用户第几行发生错误?发生了什么错误?该行的内容是什么?以帮助用户定位错误。

    		System.out.println(a1+a2+a3+a4+a5);
    		list.add(creUser(a1,a2,a3,a4,a5));
    
    		public static User creUser(String a1,String a2,String a3,String a4,String a5)
    		{
    			int age=0;
    			try
    			{
    				 age=Integer.parseInt(a4);
    			}
    			catch(NumberFormatException e)
    			{
    				System.out.println(e);
    			}
    			return new User(a1,a2,a3,age,a5);
    		}
    

    3. 对List中的Student按照年龄进行排序输出。

    public static void main(String args[]) throws FileNotFoundException
    {
    	ArrayList<User>list=readFromFile();
    	Collections.sort(list);
    	for(User it:list)
    	{
    		System.out.println(it);
    	}
    }
    
    User [name=653222196603062607, id=女, sex=48, age=0, address=和田地区墨玉县]
    User [name=蓝山兰, id=, sex=女, age=24, address=福建省]
    User [name=裘政宇, id=350000199001164690, sex=男, age=24, address=福建省福建省福建省]
    User [name=欧奕, id=360801198906130337, sex=男, age=25, address=江西省]
    User [name=管红娜, id=620524198911181149, sex=女, age=25, address=甘肃省天水市武山县]
    User [name=刁贞国, id=511526198805274593, sex=, age=26, address=四川省宜宾市珙县]
    User [name=雍寒, id=130302198711220208, sex=女, age=27, address=河北省秦皇岛市海港区]
    User [name=骆谷槐, id=130637198510292148, sex=女, age=29, address=河北省保定市博野县]
    User [name=平仁霞, id=410425198309308225, sex=女, age=31, address=河南省平顶山市郏县]
    User [name=乔传军, id=34080019810819327X, sex=男, age=33, address=安徽省安庆市安庆市]
    User [name=怀曼青, id=440982198109120367, sex=女, age=33, address=广东省茂名市化州市]
    User [name=魏翻瑶, id=350212198012254503, sex=女, age=34, address=福建省厦门市同安区]
    User [name=柏念雁, id=210323197908197408, sex=女, age=35, address=辽宁省鞍山市岫岩满族自治县]
    User [name=云民, id=411424197611226597, sex=男, age=38, address=河南省商丘市柘城县]
    User [name=雍猛飞, id=451321197502217475, sex=男, age=39, address=广西壮族自治区]
    User [name=奚靖, id=410602197509213572, sex=男, age=39, address=河南省鹤壁市鹤山区]
    User [name=丰功成, id=320203197206115011, sex=男, age=42, address=江苏省无锡市南长区]
    User [name=储昕雁, id=341204197212137963, sex=女, age=42, address=安徽省阜阳市颍泉区]
    User [name=管营泽, id=440781197206258171, sex=男, age=42, address=广东省江门市台山市]
    User [name=单传军, id=320111197112301539, sex=男, age=43, address=江苏省南京市浦口区]
    User [name=雷晴, id=35012119701015939X, sex=男, age=44, address=福建省福州市闽侯县]
    User [name=穆佳一, id=420104196901025747, sex=女, age=45, address=湖北省武汉市乔口区]
    User [name=闻隆, id=450321196807270837, sex=男, age=46, address=广西壮族自治区桂林市阳朔县]
    User [name=鲍晓乐, id=540121196811295392, sex=男, age=46, address=西藏自治区拉萨市林周县]
    User [name=彭子昂, id=330226196605054190, sex=男, age=48, address=浙江省宁波市宁海县]
    User [name=凤振, id=450600196406138776, sex=男, age=50, address=广西壮族自治区防城港市防城港市]
    User [name=井若薇, id=340401196401108586, sex=女, age=50, address=安徽省淮南市市辖区]
    User [name=刘碧蓉, id=430621196204141262, sex=女, age=52, address=湖南省岳阳市岳阳县]
    User [name=明涵蕾, id=431227196108033146, sex=女, age=53, address=湖南省怀化市新晃侗族自治县]
    

    5. 学会使用Eclipse进行调试

    观看相关调试视频

    5.1 简述使用Eclipse进行调试需要几步?

    1. 设置断点
    2. 打开调试模式
    3. 观察值

    5.2 调试时F5, F6, F7快键键各有什么不同?什么情况该使用哪个快捷键?

    F5:执行下一步
    F6:跳过这一步
    F7:执行并跳出方法

    5.3 除了Eclipse的调试器,你还使用什么方法调试程序?

    通过输出来观察

    6. 题集多线程

    6.1 程序填空3-1、3-2。(截图提交结果,出现你的学号)

    6.2 函数4-1(Thread)、4-2(Runnable)(截图提交结果,出现你的学号)

    6.3 函数4-3(Runnable与匿名内部类)(截图提交结果,出现你的学号),并使用Labmda表达式改写。

    Labmda表达式:

    Thread t1 = new Thread( () ->
        {
            System.out.println(mainThreadName);
            System.out.println(Thread.currentThread().getName());
            System.out.println(Arrays.toString(Thread.class.getInterfaces()));
        }
    

    );

    6.4 实验总结

    要注意变量的可见性,如4-2这题有些情况下如果变量不是volatile 修饰的可能会存在在一处变化了在另一处却没有看到的可见性问题

    7. 源代码阅读:多线程程序BounceThread

    7.1 哪个类是支持多线程的类,它实现了什么接口。这个类做了些什么?

    BallRunnable支持多线程
    实现了Runnable接口
    这个类负责让小球的位置变化并使画布重绘

    7.2 Ball.java这个程序只做了两件事,这两件事分别是什么?

    两个方法:
    move()方法让小球的坐标发生变化
    getShape()方法返回一个2d模型类的实例

    7.3 BallComponent也只做了两件事,这两件事分别是什么?

    两个方法:
    add()方法将一个Ball实例添加进名为Balls的ArrayList
    paintComponent()方法,遍历Balls,将每个ball绘制在画面上

    7.4 BounceThread中,什么时候启动了新线程?

    addBall()中启动的

    7.5 这个程序是如何实现?一个大致的执行流程是什么?

    利用Graphics2D库来绘制图形,用swing类来做球的边框容器,多线程处理各个球的位置及重绘工作

    8.购物车系统中的多线程

    8.1 购物车系统中可能存在哪些多线程问题?

    购物车系统的按钮等容器就运用了多线程的技术,例如一个按钮就会有一个线程在不停的监听是否按钮被点击

    同样购物车系统也会出现资源冲突的情况

    3. 码云上代码提交记录

    题目集:异常
    题目集:异常多线程(3-1, 3-2, 4-1, 4-2, 4-3)

  • 相关阅读:
    Android开发总结
    LeakCanary原理分析
    机器学习
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作
    远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)
  • 原文地址:https://www.cnblogs.com/agts/p/6786249.html
Copyright © 2011-2022 走看看