版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课后作业一、填空题1..java、.class2.主(或main())3.用public发声明的4.java5.字节码(.class)文件二、选择题1.DBBCD6.CBAAA三、简答题目1.Java语言有哪些主要特点?参考答案:简单、面向对象、分布式、安全、跨平台、支持多线程,其中最最显著的特点是跨平台。2.Java语言是如何实现平台无关性的?参考答案:Java语言之所以具有良好的跨平台性和可移植性,其关键技术就在于它独特的运行机制,Java解释器又称为Java虚拟机(JVM),每个支持Java的计算机系统,都有一个与自己操作系统和处理器相适应的JVM,由它从字节码流中读取指令,并进行解释执行。当Java的字节码程序在不同的操作系统环境下运行时,它接触到的是完全相同的解释器,由解释器负责将字节码翻译成适合本操作系统执行的可执行代码。3.Java程序结构组成?参考答案1)所有的Java程序都是由类组成的。2)一个Java源程序可以定义多个类(Class),但最多只能有一个类可以使用public来声明。3)Java源程序的文件名必须与类同名,其扩展名为.java。当一个文件中多个类都没有使用public声明时,源文件的文件名可以任意取。当Java的源程序中有使用public来声明的类时,源文件的文件名必须与该类名完全一致(包括大小写)。4)每个类可以定义多个方法。5)一个Java应用程序,必须有一个main()方法,且只能有一个。程序执行从main()方法开始,main()方法所在的类称为主类。6)每一条Java语句都必须用分号结束。7)程序中应该加适当的注释。注释是对程序所作的一些说明,有利于提高程序的可读性,它们不被编译和执行。4.Java开发工具包中用来编译源文件、执行类文件的程序分别是什么?参考答案:javac.exe用来编译源文件,java.exe执用行类文件5.请简单阐述程序编译执行的过程。参考答案:由Java语言编写的源程序代码文件(扩展名.java),经过“Java编译器”编译后生成一种二进制的中间代码,称为字节码文件(扩展名.class),然后,再通过运行与操作系统平台环境相对应的“Java解释器”,将字节码转化为特定系统平台下的机器码,最后解释执行这些代码,得到运行结果。四、操作题1.下载安装JDK,配置系统环境变量。参考步骤:1)从Oracle公司(或Oracle中国)网站下载Java开发工具包JDK8。网址:/java/technologies/downloads/#java8-windows。2)运行下载的安装文件,此间注意是否要修改安装路径,并作好记录。3)根据上述实际安装路径,打开“系统属性”对话框,设置以下三个环境变量的值。Java_Home,JDK的安装路径,如D:\Java\jdk1.8.0_321ClassPath,设置为:.;%Java_Home%\libPath,设置为:%Java_Home%\bin2.编写一个应用程序,在屏幕上输出“WelcometoJavaWord!”,利用记事本编辑该程序,利用JDK命令完成程序的编译、运行。参考代码:publicclassHello{ publicstaticvoidmain(String[]args){ System.out.println("WelcometoJavaWord!");}}3.下载安装Eclipse工具,利用Eclipse集成环境运行以上程序。参考步骤:1)通过官网地址:/downloads/,选择其中的“EclipseIDEforJavaDevelopers”进行下载。2)直接解压下载的安装文件“eclipse-java-2021-12-R-win32-x86_64.zip”,双击“eclipse.exe”文件即可启动Eclipse集成开发环境。3)创建一个项目。4)创建类。5)编辑程序代码。6)编译、执行程序。课后作业一、填空题1.10、10、c22.53.120二、单项选择题1.CACBB6.CDDDB11.BADAA16.B三、简答题1.float型常量和double型常量在表示上有什么区别?参考答案:float类型的常量后缀有f或F,double类型的常量没有后缀。在Java中,浮点数常量默认被视为double类型。例如,doublenum=3.14;,那么3.14会被当作double类型的常量。如果要将一个浮点数常量显式地指定为float类型,需要在数字后面加上f或F。例如,floatnum=3.14f;2.Java的注释有几种形式?简单说明其作用及使用方法。参考答案:Java中有注释有3种形式。单行注释,用两个斜杠(//)引导,以//开始,以行末结束;多行注释,用符号/*和*/括起来,以/*开始,以*/结束;文档注释,使用/**和*/括起来的内容则为Java文档注释,主要用于描述类、属性和方法,它可以通过JDK的javadoc命令转换为HTML文件。3.怎样获取数组的长度。参考答案:数组名.length四、编程1.编写一个应用程序,给出汉字‘你'、‘我'、‘他'在unicode表中的位置。参考代码:publicclassEx2_4_1{ publicstaticvoidmain(String[]args){ charc1='你'; charc2='我'; charc3='他'; System.out.println("汉字你的Unicod编码为"+(int)c1); System.out.println("汉字你的Unicod编码为"+(int)c2); ystem.out.println("汉字你的Unicod编码为"+(int)c3);}}2.编写一个应用程序求1!+2!+...+20!参考代码:publicclassEx2_4_2{ publicstaticvoidmain(String[]args){ longsum=0,n=1; for(inti=1;i<=20;i++){ n=n*i; sum=sum+n; } System.out.println("sum="+sum); }}3.编写一个应用程序求100以内的全部素数。参考代码:publicclassEx2_4_3{ publicstaticvoidmain(String[]args){ intk,isPrime,n=0; for(inti=2;i<=100;i++){ k=(int)Math.sqrt(i); isPrime=1; for(intj=2;j<=k;j++){ if(i%j==0){ isPrime=0; break; } } if(isPrime!=0){ System.out.print(i+"\t"); n++; if(n%10==0)System.out.println(); } } }}4.分别用do-while和for循环计算1+1/2!+1/3!+1/4!...
...的前20项和。参考代码:publicclassEx2_4_4_do{ publicstaticvoidmain(String[]args){ doublesum=0,t=1; inti=1; while(i<=20){ t=t*(1.0/i); sum=sum+t; i++; }System.out.println("sum="+sum); }}publicclassEx2_4_4_for{ publicstaticvoidmain(String[]args){ oublesum=0,t=1; for(inti=1;i<=20;i++){ t=t*(1.0/i); sum=sum+t; }System.out.println("sum="+sum); }}5.一个数如果恰好等于它的因子之和,这个数就称为"完数"。编写一个应用程序求1000之内的所有完数。参考代码:publicclassEx2_4_5{ publicstaticvoidmain(String[]args){ intm,s,i; for(m=2;m<1000;m++){ s=0; for(i=1;i<m;i++) if((m%i)==0)s=s+i; if(s==m){ System.out.print(m+"的因子是:"); for(i=1;i<m;i++) if(m%i==0)System.out.print(i+""); System.out.print("\n"); } } }}6.使用String类的publicStringconcat(Stringstr)方法可以把调用该方法的字符串与参数指定的字符串连接,把str指定的串连接到当前串的尾部获得一个新的串。编写一个程序通过连接两个串得到一个新串,并输出这个新串。参考代码:publicclassEx2_4_6{publicstaticvoidmain(String[]args){ Stringstr1="学而不思则罔"; Stringstr2=",思而不学则殆"; System.out.println("连接之后的字符串为:"+str1.concat(str2)); }}7.String类的publiccharcharAt(intindex)方法可以得到当前字符串index位置上的一个字符。编写程序使用该方法得到一个字符串中的第一个和最后一个字符。参考代码:publicclassEx2_7_7{ publicstaticvoidmain(String[]args){ Stringstr="欲穷千里目,更上一层楼"; System.out.println(str+"的第一个字符为:"+str.charAt(0)+",最后一个字符为:"+str.charAt(str.length()-1)); }}一、填空题1.方法2.Void3.常量4.public、protected、private、public、无修饰符5.对象名.成员名对象名.成员名类名.成员名6.this7.new8.类声明9.构造方法10.方法重载二、选择题1.BBDBC6.CACBD三、简答题1.简述属性、行为和方法的含义。参考答案:事物的特征称为属性,作出的各种动作或活动称为行为,方法是对行为的描述。3.请解释类变量、实例变量及其区别。参考答案:被static修饰的变量称之为类变量,不被static修饰的变量称为实例变量。实例变量引用方法:对象名.变量名类变量用可通过两种方法:类名.变量名或对象名.变量名4.请解释类方法、实例方法及其区别。参考答案:被static修饰的方法称之为类方法,不被static修饰的变量称为实例方法。实例方法引用方法:对象名.方法名类方法用可通过两种方法:类名.方法名或对象名.方法名5.类的访问控制符有哪几种?具体含义是什么?参考答案:类访问控制只有public(公共类)和无修饰符(默认类)两种。声明为public的类允许在任何包中使用,否则只能在同一包中使用。6.类中成员的访问符有哪几种?具体含义是什么?参考答案:类中的成员Java定义了四种访问权限,它们分别是:public(公共的)、protected(保护的)、private(私有的)和无修饰符或default(默认的)7.简单构造方法的特点。参考答案:构造方法是一种特殊的方法成员,其特殊性表现在以下几个方面。1)构造方法名必须与它所在的类同名。2)构造方法没有任何返回值,void类型也没有。3)一个类可以定义零个或多个构造方法。4)构造方法在创建对象时由new运算符自动调用完成对象的初始化,不能显式地直接调用。四、程序设计1.定义一个JDate类,成员变量包括year、month和day,成员员方法包括input_Date()和output_Date()实现日期的输入和输出。在main()方法中创建该类的对象并访问这些方法。参考代码:importjava.util.Scanner;publicclassJDate{ privateintyear; privateintmonth; privateintday; publicvoidinput_Date(){ Scannerin=newScanner(System.in); System.out.println("请输入一个日期的:年月日:"); this.year=in.nextInt(); this.month=in.nextInt(); this.day=in.nextInt(); } publicvoidoutput_Date(){ System.out.println(year+"/"+month+"/"+day); } publicstaticvoid main(Stringargs[]) { JDated=newJDate(); d.input_Date(); d.output_Date(); }}2.定义一个表示职工信息的类Staff,包括编号(id)、姓名(name)、性别(sex)、年龄(age)、就职部门(dept)和薪资(salary)六个实例变量,类型自定义;其中年龄、薪资两个属性定义为私有。创建五个该类的对象(用构造方法初始化对象),输出这五个职工的信息,并计算五人的平均薪资。参考代码:publicclassStaff{Stringid;Stringname;charsex;privateintage;Stringdept;privatefloatsalary;publicintgetAge(){ returnage;}publicvoidsetAge(intage){ this.age=age;}publicfloatgetSalary(){ returnsalary;}publicvoidsetSalary(floatsalary){ this.salary=salary;}publicStaff(Stringid,Stringname,charsex,intage,Stringdept,floatsalary){ this.id=id; =name; this.sex=sex; this.age=age; this.dept=dept; this.salary=salary;} publicstaticvoidmain(String[]args){ floats; Staffstaff1=newStaff("1001","林林",'女',26,"开发部",5500); Staffstaff2=newStaff("1002","李明",'男',27,"开发部",5600); Staffstaff3=newStaff("1003","张一",'男',26,"开发部",5300); Staffstaff4=newStaff("2001","江河",'男',30,"测试部",6500); Staffstaff5=newStaff("3001","田田",'女',29,"销售部",5700); s=(staff1.salary+staff2.salary+staff3.salary+staff4.salary+staff5.salary)/5; System.out.println("编号\t姓名\t性别\t年龄\t就职部门\t薪资"); System.out.println(staff1.id+"\t"++"\t"+staff1.sex+"\t"+staff1.getAge()+"\t"+staff1.dept+"\t"+staff1.getSalary()); System.out.println(staff2.id+"\t"++"\t"+staff2.sex+"\t"+staff2.getAge()+"\t"+staff2.dept+"\t"+staff2.getSalary()); System.out.println(staff3.id+"\t"++"\t"+staff3.sex+"\t"+staff3.getAge()+"\t"+staff3.dept+"\t"+staff3.getSalary()); System.out.println(staff4.id+"\t"++"\t"+staff4.sex+"\t"+staff4.getAge()+"\t"+staff4.dept+"\t"+staff4.getSalary()); System.out.println(staff5.id+"\t"++"\t"+staff5.sex+"\t"+staff5.getAge()+"\t"+staff5.dept+"\t"+staff5.getSalary()); System.out.println("平均薪资:"+s); }}课后作业一、填空题1.父类(或者:基类、超类)2.常量3.abstract、抽象类二、选择题1.B2.B三、简答题目1.什么是继承?什么是多态?方法的重载和覆盖有何区别?参考答案:Java继承是一种由已有的类创建新类的机制,是面向对象程序设计中最为关键的概念及编程技术。类的继承也称为类的派生,一个新类可以从另一个已存在的类中派生,这个过程便称为类的继承。派生出的新类称为已有类的子类(Subclass)或派生类(Derivedclass),已有类称为基类(Baseclass)、父类(Parentclass)或超类(Superclass)。多态是指不同对象在调用同一个方法时,表现出的多种不同形态。利用多态可以使程序具有良好的可维护性和可扩展性。Java中的多态有两种。1)编译时多态:方法的重载。2)运行时多态:Java运行时系统根据调用该方法的对象类型来决定选择调用哪个方法,rrny被称为运行时多态。方法覆盖是对从父类所继承的方法进行重写,而且要示要保持与父类同名方法完全相同的方法声明部分(即应与父类有完全相同的方法名、返回值和参数列表);方法重载是同一类中有多个同名方法,且要求与被重载的方法必须有不同的参数列表。2.什么是抽象类?什么是接口?接口的功能是什么?接口与类有何异同?抽象类:是不能使用new关键字进行实例化的类,即没有具体实例对象的类。接口:是由一些抽象方法和常量所组成的一个集合。它的定义与抽象类类似,只定义了类中方法的原型,而没有直接定义方法的内容。接口的功能:实际应用中经常需要从多个类中继承某些属性或行为的情况,接口则弥补了这种单继承性带来的不足。接口与类的异同:1)类描述对象的属性和方法。接口则包含类要实现的方法。2)Java只支持单重继承,即一个类只能有一个父类。一个或多个类可以实现一个接口,同时,类可以同时实现多个接口3.什么是包?包有何作用?如何引用包中的某个类?如何引用整个包?参考答案:包(package)是类的一种组织方式。在操作系统中,用文件夹(目录)来组织管理文件,Java则利用包来组织相关的类及各种相关文件,并控制其访问权限,同一包中的类默认情况下可以互相访问。如同文件夹一样,包也采用了树形目录的存储方式,同一个包中的类名字不能相同,不同包中的类名字则可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。import可以向某个Java文件中导入指定包层次下的某个类或全部类。引用包中的某个类可以使用import导入单个类,语法格式:import包名+类名。如果要要引入整个包,可以import导入指定包下全部类,语法格式:import包名.*。四、操作题1.定义一个接口,它含有两个抽象方法:第一个抽象方法用于实现在两个数中求最小数:第二个抽象方法用于实现在三个数中求最大数。定义一个类实现这个接口;再定义一个含有main()方法的主类来实现最小数和最大数的输出显示。参考代码:interfaceMaxAndMin{
intmin(inta,intb);
intmax(inta,intb,intc);
}
classAaimplementsMaxAndMin{
publicintmin(inta,intb){
returna>b?b:a;
}
publicintmax(inta,intb,intc){
inttemp=a>b?a:b;
returntemp>c?temp:c;
}
}
publicclassBb{
publicstaticvoidmain(Stringargs[]){
Aaa=newAa();
System.out.println(a.min(1,2));
System.out.println(a.max(1,2,3));
}
}2.定义一个学生类CStudent,该类功能如下。1)包含学生的姓名、性别、年龄和学号信息。2)在类中设置一个变量来记录共有多少学生,即共为该类生成多少个实例。3)具有输出学生个数的成员函数。4)具有输入、输出学生信息的成员函数。5)再派生两个类:全日制学生和业余在职学生,全日制学生添加监护人姓名及联系方式,业余在职学生添加工作单位及联系方式。6)重载输入、输出成员函数以便输入、输出新添加的数据。参考代码importjava.util.Scanner;classCStudent{publicstringname;///名字publicstringsex;///性别publicintage;///年龄publicintnum;///学号publicstaticintcount=0;///记录学生的个数//构造函数中count加1publicCStudent(){count++;}publicvoidmessage_in(){Scanner
str=newScanner(System.in);System.out.println("请输入名字”)
name=str.nextLine();System.out.println("请输入性别:”)sex=str.nextLine();System.out.println("请输入年龄:”)age=str.nextLine();System.out.println("请输入学号:”)num=str.nextLine();}publicvirtualvoidmessage_out(){System.out.println("名字:”,name)System.out.println("性别:”,sex)System.out.println("年龄:”,age)System.out.println("学号:”,num)}}classFulltimestudentextendCStudent{publicstringjianhuren;publicstringtelephone;publicoverridevoidmessage_in(){super.message_in();Scanner
str=newScanner(System.in);System.out.println("请输入监护人姓名:")
jianhuren=str.nextLine();System.out.println("请输入监护人电话:")
telephone=str.nextLine();}publicoverridevoidmessage_out(){super.message_out();System.out.println(监护人:",jianhuren);System.out.println(电话:",telephone);}}classParttimestudentextendCStudent{publicstringgongzuodanwe;publicstringlianxidian;...//参考Fulltimestudent类}classTest{staticvoidMain(string[]args){CStudenta=newCStudent();CStudentb=newFulltimestudent();CStudentc=newParttimestudent();a.message_in();b.message_in();c.message_in();a.message_out();b.message_out();c.message_out();}}课后作业一、填空题1.Throwable、Error、Exception、Error2.try、catch、finally、throw、throws3.14.finnnaly5.Exception二、选择题1-5.ACACB三、简答题1.什么是异常?试列出三个系统定义的运行时异常类。参考答案:"异常"是指程序在执行过程中出现的问题或意外情况,导致程序无法按照预期运行。异常可分为运行时异常和非运行时异常。NullPointerException:试图访问一个空对象的属性或方法时,这个异常就会被抛出。 IndexOutOfBoundsException:试图访问一个数组或字符串的非法索引。ArithmeticException:当出现异常的算术条件时,例如除以零,这个异常就会被抛出。try-catch-finally语句的执行顺序是怎样的?参考答案:try:首先执行try块中的代码。如果try块中的代码没有抛出任何异常,那么程序不会执行catch块。catch:如果在try块中抛出了异常,那么程序会立即跳转到与该异常类型匹配的catch块。catch块会捕获try块中抛出的特定类型的异常,并执行相应的处理。如果try块中抛出的异常类型与catch块的参数类型不匹配,那么catch块将不会执行。finally:无论try块和catch块中的代码执行结果如何,finally块中的代码总是会执行。finally块是一个清理代码的好地方,例如关闭文件、数据库连接等。3.简要说明Java的异常处理机制。参考答案:Java语言提供两种处理异常的机制:捕获异常和声明抛弃异常。①捕获异常在Java程序出现异常时,将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。这是一种积极的异常处理机制。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。②声明抛弃异常当Java程序出现异常时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(throws)异常。4.异常类的最上层是什么类?它又有哪两个子类?异常类的最上层Throwable,Throwable的子类是Error、Exception四、程序设计参考答案:publicclassExceptionTest{ publicstaticvoidmain(String[]arge){ try{ Strings1=arge[1]; Strings2=arge[2]; Strings3=arge[3]; System.out.println(s1+s2+s3); }catch(Exceptione){ }finally{ System.out.println("请再增加一个命令行参数"); } }}课后作业一、填空题1.Runnable2.新生状态、就绪状态、阻塞状态、就绪状态3.OK4.D5.B6.B二、简答题1.什么是多线程?多线程与多进程的区别是什么?参考答案:多线程是指在一个程序中同时执行多个任务的能力。这些任务在独立的执行流中运行,并且可以并发地执行。多进程是指运行多个程序实例,多进程能够充分利用操作系统的多任务管理器,确保每个工作进程始终处于最大工作效率状态。而多线程是运行在同一个进程中,同一进程中的所有线程可以访问相同的全局变量和系统资源。怎样解决线程的并发访问问题?参考答案:①通过线程同步解决:使用synchronized关键字限制多个线程同时访问共享资源的权限,避免多个线程同时修改同一份数据而导致数据不一致的问题。②通过线程通信解决:使用wait()和notify()方法来协调多个线程之间的操作。这可以确保在特定条件下,只有一个线程能够访问共享资源,从而避免数据竞争和死锁等问题。线程有哪些状态?它们之间是如何进行转换的?参考答案:线程的整个生命周期可以包含:新生状态(New)、就绪状态(Runnable)、运行状态(Running)、被阻塞状态(Blocked)、死亡状态(Dead)下五个状态。什么是死锁?如何防止死锁出现?参考答案:死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。当下面四个条件同时满足时,就会发生死锁。1)互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用。2)不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占用者主动释放。3)请求和保持,即当资源的请求者在请求其他的资源的同时保持对原有资源的占有。4)循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。防止死锁的途径就是不能让满足死锁的条件同时发生。三、编程题1.建立两个Thread的子类,一个在run()方法中调用wait(),另一个在run()方法休眠几秒后对第一个线程调用notifyAll(),使第一个线程能输出一条信息。参考代码:publicclassTest{publicstaticvoidmain(String[]args){Objectlock=newObject();WaitThreadwaitThread=newWaitThread("WaitThread",lock);NotifyThreadnotifyThread=newNotifyThread("NotifyThread",lock);waitThread.start();notifyThread.start();}}publicclassNotifyThreadextendsThread{privateObjectlock;publicNotifyThread(Stringname,Objectlock){super(name);this.lock=lock;}@Overridepublicvoidrun(){try{Thread.sleep(3000);//休眠3秒synchronized(lock){lock.notifyAll();}}catch(InterruptedExceptione){e.printStackTrace();}}}publicclassWaitThreadextendsThread{privateObjectlock;publicWaitThread(Stringname,Objectlock){super(name);this.lock=lock;}@Overridepublicvoidrun(){try{synchronized(lock){lock.wait();System.out.println(Thread.currentThread().getName()+"接收到通知,结束");}}catch(InterruptedExceptione){e.printStackTrace();}}}修改任务6.2的需求,加入多个服务员,并能够指明是谁得到了某个食物。注意在这个例子中必须使用notifyAll()方法,而不是notify()方法。参考代码:publicclassRestaurant{ publicFoodfood;//声明食物类 publicstaticvoidmain(String[]args){ Restaurantrestaurant=newRestaurant(); WaitPersonwaitPerson=newWaitPerson(restaurant,"服务员1"); WaitPersonwaitPerson2=newWaitPerson(restaurant,"服务员2"); Chefchef=newChef(restaurant); }}classFood{ privatestaticinti=0;//i用于生成累计计数 privateintcount=++i;//count计数 publicFood(){ if(count>6){//超出6份,则无法再继续 System.out.println("Outoffood,closing!"); System.exit(0); } } publicStringtoString(){ return"food"+count; }}classWaitPersonextendsThread{ privateRestaurantrestaurant; publicWaitPerson(Restaurantr,Stringname){ super(name); restaurant=r; start();//启动线程 } publicvoidrun(){ while(true){ while(restaurant.food==null){//如果厨师没有准备好食物 synchronized(restaurant){//进入等待模式,直到被Chef的notify()方法唤醒 try{ restaurant.wait(); }catch(InterruptedExceptione){ e.printStackTrace(); } System.out.println(this.getName()+"Waitpersongot"+restaurant.food);//拿到厨师准备好的食物 restaurant.food=null;//等待厨师准备下个食物 } } } }}classChefextendsThread{ privateRestaurantrestaurant; privateWaitPersonwaitPerson; publicChef(Restaurantr){ restaurant=r; start();//启动线程 } publicvoidrun(){ while(true){ if(restaurant.food==null){//如果服务员需要食物 restaurant.food=newFood();//制作新食物 System.out.println("foodup!"); synchronized(restaurant){ restaurant.notifyAll();//唤醒服务员可以取食物 } } try{ sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } }}使用继承Thread类的方法实现一个多线程程序,该程序先后启动三个线程。每个线程首先输出一条创建信息,然后休眠一段时间,最后打印出结束信息并退出。publicclassTest{publicstaticvoidmain(String[]args){MyThreadthread1=newMyThread("Thread-1",1000);MyThreadthread2=newMyThread("Thread-2",2000);MyThreadthread3=newMyThread("Thread-3",3000);thread1.start();thread2.start();thread3.start();}}publicclassMyThreadextendsThread{privateStringthreadName;privateintsleepTime;publicMyThread(Stringname,intsleepTime){threadName=name;this.sleepTime=sleepTime;}@Overridepublicvoidrun(){System.out.println(threadName+"开始创建...");try{Thread.sleep(sleepTime);System.out.println(threadName+"创建完毕,准备休眠...");Thread.sleep(sleepTime);System.out.println(threadName+"休眠结束,准备退出...");}catch(InterruptedExceptione){e.printStackTrace();}}}4.用实现Runnable接口的方法实现上面的题目。参考代码:publicclassTest{publicstaticvoidmain(String[]args){Threadthread1=newThread(newMyRunnable("Thread-1",1000));Threadthread2=newThread(newMyRunnable("Thread-2",2000));Threadthread3=newThread(newMyRunnable("Thread-3",3000));thread1.start();thread2.start();thread3.start();}}packagechapter6_4;publicclassMyRunnableimplementsRunnable{privateStringthreadName;privateintsleepTime;publicMyRunnable(Stringname,intsleepTime){threadName=name;this.sleepTime=sleepTime;}@Overridepublicvoidrun(){System.out.println(threadName+"开始创建...");try{Thread.sleep(sleepTime);System.out.println(threadName+"创建完毕,准备休眠...");Thread.sleep(sleepTime);System.out.println(threadName+"休眠结束,准备退出...");}catch(InterruptedExceptione){e.printStackTrace();}}}课后作业一、选择题1.BADAA6.DBACA11.D二、简答题目1.List、Map是否都继承自Collection接口?参考答案:在Java中,List和Map都属于集合框架的一部分,但它们并不都直接继承自Collection接口。List接口:List接口确实继承自Collection接口。它代表一个有序集合,允许包含重复的元素。Map接口:Map接口并没有继承自Collection接口。Map代表一个键-值对的集合,其中每个键都是唯一的。它提供了用于存储、检索和删除键值对的方法。Map接口并不属于Collection层次结构的一部分,而是与之平行的一个接口。因此,List接口继承自Collection接口,而Map接口没有继承自Collection接口。2.ArrayList类的常用方法和作用?参考答案:ArrayList类是Java集合框架的一部分,它实现了可动态调整大小的数组,提供了许多常用的方法来操作数组。以下是ArrayList类的一些常用方法和作用:add(Eelement):将指定的元素追加到此列表的末尾。get(intindex):返回此列表中指定位置上的元素。set(intindex,Eelement):用指定的元素替代此列表中指定位置上的元素。remove(intindex):移除此列表中指定位置上的元素。size():返回此列表中的元素数。isEmpty():如果此列表中没有元素,则返回true。contains(Objectobj):如果此列表中包含指定的元素,则返回true。3.LinkedList类的常用方法和作用?参考答案:LinkedList类是Java集合框架的一部分,它实现了List接口,提供了一些常用方法来操作链表数据结构。以下是LinkedList类的一些常用方法和作用:add(Ee):在链表的末尾添加指定的元素。remove(Objecto):从链表中移除第一个(索引最小的)等于指定参数的元素。contains(Objecto):返回链表中是否包含指定的元素。indexOf(Objecto):返回链表中第一次出现的指定元素的索引,如果链表不包含该元素,则返回-1。lastIndexOf(Objecto):返回链表中最后一次出现的指定元素的索引,如果链表不包含该元素,则返回-1。get(intindex):返回链表中指定位置的元素。set(intindex,Eelement):用指定的元素替换链表中指定位置的元素。addFirst(Ee):在链表的开头添加指定的元素。addLast(Ee):在链表的末尾添加指定的元素。removeFirst():移除并返回链表的第一个元素。removeLast():移除并返回链表的最后一个元素。4.HashSet类的常用方法和作用?参考答案:HashSet类是Java集合框架的一部分,它实现了Set接口,提供了一些常用方法来操作哈希集合。以下是HashSet类的一些常用方法和作用:add(Ee):向哈希集合中添加指定的元素。remove(Objecto):从哈希集合中移除第一个(根据哈希码)等于指定参数的元素。contains(Objecto):返回哈希集合中是否包含指定的元素。size():返回哈希集合中元素的数量。isEmpty():返回哈希集合是否为空。5.HashMap类的常用方法和作用?参考答案:HashMap类是Java集合框架的一部分,它实现了Map接口,提供了一些常用方法来操作键值对映射。以下是HashMap类的一些常用方法和作用:put(Kkey,Vvalue):将指定的键值对映射添加到散列表中。如果键已经存在,则用新的值替换旧的值。get(Objectkey):返回与指定键关联的值;如果此映射中没有这样的键,则返回null。remove(Objectkey):从映射中删除与指定的键关联的键值对。containsKey(Objectkey):返回此映射是否包含指定的键的映射关系。size():返回此映射中的键值对的数量。isEmpty():如果此映射为空,则返回true;否则返回false。6.请说明集合类ArrayList与HashMap的区别?参考答案:在Java中,ArrayList和HashMap都是非常常用的集合类,但它们之间存在一些主要的区别。数据结构:ArrayList:ArrayList是基于动态数组实现的,它可以动态地增长和缩小。当需要添加或删除元素时,它只需移动数组中的元素,因此它在处理连续存储的数据时效率较高。HashMap:HashMap是基于哈希表实现的,它将键值对存储在桶中。每个桶都是一个链表或红黑树,这使得它在处理大量数据时,特别是查找和插入操作,通常比ArrayList更快。存储方式:ArrayList按照元素的顺序进行存储,可以快速地通过索引访问元素。当你需要按顺序访问元素时,ArrayList是非常合适的。HashMap存储键值对,键和值之间没有固定的顺序。它使用键来查找和访问值,因此当处理键值对时,或者当需要快速查找某个键对应的值时,HashMap非常有用。性能:在处理大量数据时,特别是查找和插入操作,HashMap通常比ArrayList更快。这是因为HashMap使用哈希表进行存储,而ArrayList使用动态数组。然而,在处理顺序数据时,ArrayList通常更高效,因为它不需要计算哈希值和解决哈希冲突。允许的键和值类型:HashMap允许存储任何类型的键和值,包括原始类型和对象。这意味着你可以使用任何类型的键来查找和存储值。ArrayList只能存储对象。这意味着你不能直接使用原始类型作为索引来访问元素。Nullelements:ArrayList可以包含null元素。HashMap的键和值都可以是null。Ordering:ArrayList的元素是有序的。当你需要保持元素的顺序时,ArrayList是一个好选择。HashMap是无序的。元素是根据键的哈希值存储的,因此它们的顺序是不确定的。Memoryusage:由于HashMap使用哈希表进行存储,相对于ArrayList使用的动态数组,它通常更节省内存。特别是在处理大量数据时,这可以提高性能。综上所述,选择ArrayList还是HashMap主要取决于具体需求。如果需要处理大量数据并快速查找和插入,或者需要存储键值对并且关心内存使用情况,那么HashMap更好。如果需要按顺序访问元素,或者处理的数据量不大且顺序很重要,那么ArrayList可能更好。课后作业一、填空题1.Scanner、System.out2.543213.importjava.io.*;4.“a.txt”、fos.write(b,0,k);二、选择题1.DAD三、简答题目1.什么是流?简述流的分类。参考答案:流是一种抽象的概念,表示数据在程序中的流动。具体来说,流是一系列有序的数据元素组成,这些数据元素按照一定的顺序排列,依次进行处理。在Java中,流通常用于输入/输出操作,例如读取文件、网络通信等。根据处理数据类型的不同,Java中的流可以分为两种:字节流和字符流。2.简述字节流和字符流的区别。参考答案:字节流和字符流的主要区别在于处理的数据类型不同。字节流处理的是字节(byte),而字符流处理的是字符(char)。具体来说:字节流以字节为单位进行读写操作,适用于处理二进制数据和文本数据。常见的字节流类有InputStream和OutputStream,它们分别代表输入流和输出流。字符流以字符为单位进行读写操作,适用于处理文本数据。常见的字符流类有Reader和Writer,它们分别代表输入流和输出流。另外,字节流和字符流在处理大容量数据时也有所不同。字节流一次可以读写多个字节,而字符流一次只能读写一个字符,因此在进行大容量文本数据处理时,使用字符流可能会造成内存占用问题。四、程序设计1.求100以内的所有素数,并将它们保存到文件Primer.dat文件中。参考代码:publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含所有素数的字符串Stringprimes="";//检查从2到100的所有数字是否为素数for(inti=2;i<=100;i++){if(isPrime(i)){primes+=i+"";}}//将结果写入"Primer.dat"文件try{FileWriterfileWriter=newFileWriter("Primer.dat");BufferedWriterbufferedWriter=newBufferedWriter(fileWriter);bufferedWriter.write(primes);bufferedWriter.close();}catch(IOExceptione){e.printStackTrace();}}//检查一个数是否为素数的方法publicstaticbooleanisPrime(intnum){if(num<=1){returnfalse;}for(inti=2;i*i<=num;i++){if(num%i==0){returnfalse;}}returntrue;}}列出C盘根目录下的所有文件和文件夹,并将输出结果保存到Content.txt文件中。参考代码:publicclassMain{publicstaticvoidmain(String[]args){FilecRoot=newFile("C:\\");FilecontentFile=newFile("Content.txt");try(FileWriterwriter=newFileWriter(contentFile)){for(Filefile:cRoot.listFiles()){writer.write(file.toString());writer.write(System.lineSeparator());//换行}}catch(IOExceptione){e.printStackTrace();}}}检查题上一题中建立的Content.txt文件是否存在,若存在输出文件的相关信息。参考代码:publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{FilecontentFile=newFile("Content.txt");if(contentFile.exists()){BasicFileAttributesattrs=Files.readAttributes(contentFile.toPath());System.out.println("Content.txtexists.");System.out.println("Size:"+attrs.size());//文件大小(字节)System.out.println("Creationtime:"+attrs.creationTime());//创建时间System.out.println("Lastmodifiedtime:"+attrs.lastModifiedTime());//最后修改时间}else{System.out.println("Content.txtdoesnotexist.");}}}输入10个学生的信息(学号、姓名、联系方式),将这些信息保存到二进制文件Student.dat文件中。参考代码://定义Student类publicclassStudentimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateStringstudentId;privateStringname;privateStringcontact;publicStudent(StringstudentId,Stringname,Stringcontact){this.studentId=studentId;=name;this.contact=contact;}@OverridepublicStringtoString(){return"Student[studentId="+studentId+",name="+name+",contact="+contact+"]";}}publicclassMain{publicstaticvoidmain(String[]args){List<Student>students=newArrayList<>();Scannerscanner=newScanner(System.in);//输入10个Student对象并写入文件for(inti=0;i<10;i++){System.out.println("请输入学号:");StringstudentId=scanner.nextLine();System.out.println("请输入姓名:");Stringname=scanner.nextLine();System.out.println("请输入联系方式:");Stringcontact=scanner.nextLine();students.add(newStudent(studentId,name,contact));}scanner.close();try(FileOutputStreamfileOut=newFileOutputStream("Student.dat");ObjectOutputStreamout=newObjectOutputStream(fileOut)){out.writeObject(students);System.out.println("Student信息已成功保存到Student.dat文件中");}catch(IOExceptione){e.printStackTrace();}}}从Student.dat文件中读取数据,并将它们输出到屏幕上。参考代码:publicclassMain{publicstaticvoidmain(String[]args){try{FileInputStreamfileIn=newFileInputStream("Student.dat");ObjectInputStreamin=newObjectInputStream(fileIn);//读取并输出Student对象Studentstudent;while((student=(Student)in.readObject())!=null){System.out.println("学号:"+student.studentId);System.out.println("姓名:"+);System.out.println("联系方式:"+student.contact);System.out.println();}in.close();fileIn.close();}catch(IOExceptioni){i.printStackTrace();return;}}从Student.dat文件中读取数据,修改第2个学生的学号,将修改后的信息重新保存到Student.dat文件中。参考代码:publicclassMain{publicstaticvoidmain(String[]args){try{FileInputStreamfileIn=newFileInputStream("Student.dat");ObjectInputStreamin=newObjectInputStream(fileIn);//读取所有的Student对象并存储到数组中ArrayList<Student>students=newArrayList<>();Studentstudent;while((student=(Student)in.readObject())!=null){students.add(student);}in.close();fileIn.close();//修改第2个学生的学号if(students.size()>1){StudentsecondStudent=students.get(1);secondStudent.id=2022030;//修改学号,例如将其改为2022030}//将修改后的Student对象重新写入文件FileOutputStreamfileOut=newFileOutputStream("Student.dat");ObjectOutputStr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第二章 诊断用X线机简介课件
- 防火防灾应急逃生
- 北京市-2024年-网格员-上半年笔试真题卷
- 《呼吸感染道病毒》课件
- 《乳腺疾病课件》课件
- 天然气地理信息系统的应用与发展考核试卷
- 智慧城市的金融保险实践考核试卷
- 税收政策与企业盈利
- 路桥工程一级建造师招聘协议
- 文化中心花园施工合同范本
- 综合与实践主题活动《节约用水》 单元作业设计
- 左室流出道狭窄疏通术后护理查房
- 关于定向询价异议的申请书
- 疼痛护理专项考核试题及答案
- 重大事故隐患整改验收报告
- 全国医疗服务价格项目规范(2012版)
- 一次性付款房屋买卖合同
- 水稻杂交育种技术
- 组织行为学案例分析 组织行为学案例分析
- 重大事故隐患数据表
- 外研版新标准九年级英语上册作业设计案例
评论
0/150
提交评论