【Java】基础知识练习题(编程题为主!)

欢迎来到小明的练习空间

你好! 一下时小明同学总结的一些java练习题,比较基础,赶快来试试你这段时间学习的如何吧.
我本人也是曾经在网络上找练习题 没等练习到 时间已经流逝在找题的过程中了 , 所以话不多,直接说步入主题

一 【异常】编程题

1.1 题目一

请定义main()方法,在main()中按以下顺序要求编写代码:

  • 分别从控制台接收两个整数
  • 计算“第一个数 / 第二个数”的结果,并打印;
  • 为了防止第二个数为0导致异常,请在计算时使用异常处理。当出现异常时,向用户打印:第二个数不能为0!!

1.2 题目二

请定义main()方法,在main()中按以下顺序要求编写代码:

  • 定义一个String[]数组如下:

    String[] arr = {”星期一”,”星期二”,”星期三”,”星期四”,”星期五”,”星期六”,”星期日”};

  • 请用户输入一个整数1–7的值:

  • 根据用户输入,从数组中取出对应的星期名称,例如:

    用户输入:1

    程序提示:星期一

    为了防止用户输入小于1或者大于7的值,请使用异常处理从数组中取出对应的“星期名称”,在异常处理中打印:输入错误!!

1.3 题目三

​ 请按如下格式定义测试类:

 public class Test2_3{
  public static void main(String[] args){
      
      //测试调用:会导致方法内抛出“空指针异常”
      int n1 = getMax(null);

      //测试调用:会导致方法内抛出“数组索引越界异常”
      int[] arr = new int[0];
      int n2 = getMax(arr);

      //测试调用:正常
      int[] arr2 = {1,2,4,24,32,5324,32};
      int n3 = getMax(arr2);

      System.out.println("程序继续执行");

   }

   //获取数组最大值
   public static int getMax(int[] args){

     int max = args[0];
     for(int i = 1 ; i < args.length ; i++){
       if(max < args[i]){
        max = args[i];
       }
     }
     return max;
   }

  }

```java
在这里插入代码片

请给代码加上异常处理,使得在有异常的情况下,程序依然能够向下执行

1.4题目四

请使用代码描述 :

  1. 写一个方法实现用户登陆,传入用户名和密码。
  2. 如果用户名错误,就抛出自定义登陆异常(LoginException),异常信息为用户名不存在。
  3. 如果密码错了就也抛出登陆异常,异常信息为密码错误 4. 如果用户名和密码都对了,输出: 欢迎xxx 说明:正确用户名和密码都是admin。

二 【集合】问答+编程题目

1.1 请问Collection接口下有哪些类型的集合?它们分别是什么?
1.2 请问Collection接口中定义的方法,它的所有子类是否都有,而且都会实现这些方法?
1.3 请问向Collection集合添加一个元素用什么方法?
1.4 请问从Collection集合中删除一个元素用什么方法?这个方法有返回值吗?
1.5 请问判断Collection集合中是否包含一个元素用什么方法?
1.6 请问用什么方法可以获取Collection集合中元素的数量?

2.1【集合】 编程题 Collection接口

请定义一个Collection类型的集合,存储以下字符串:
“JavaEE企业级开发指南”,”Oracle高级编程”,”MySQL从入门到精通”,
”Java架构师之路”
请编程实现以下功能:
 使用迭代器遍历所有元素,并打印
 使用迭代器遍历所有元素,筛选书名小于10个字符的,并打印;
 使用迭代器遍历所有元素,筛选书名中包含“Java”的,并打印
 如果书名中包含“Oracle”,则删掉此书。删掉后,遍历集合,打印所有书名。
(注意:以上功能写在一个main()方法中,但请单独实现)

2.2【集合】 编程题 Collection接口

请定义一个Collection类型的集合,存储以下分数信息:
88.5,39.2,77.1,56.8,89,99,59.5
请编程实现以下功能:
 使用增强for遍历所有元素,并打印
 使用增强for遍历所有元素,打印不及格的分数;
 使用增强for遍历所有元素,计算不及格的分数的数量,和平均分,并打印计算结果。
 使用增强for遍历所有元素,求出最高分,并打印;
(注意:以上所有功能写在一个main()方法中,但请单独实现)

2.3【集合】 编程题 Set接口

1 题目

请编写main()方法,按以下要求顺序

 定义一个Set集合,并存储以下数据:
刘备,关羽,张飞,刘备,张飞
 打印集合大小
 使用迭代器遍历集合,并打印每个元素
 使用增强for遍历集合,并打印每个元素

2 题目

请按以下要求顺序编码:

 定义学生类Student,属性:姓名、性别、年龄
 定义测试类,及main()方法
 定义一个存储Student类型的HashSet集合
 创建以下三个Student对象
张三,男,20
李四,女,21
张三,男,20
 将上述三个对象存储到Set集合中
 使用增强for遍历集合,获取每个Student对象,并打印属性值;
 请实现集合中不能存储姓名年龄相同的元素

3 题目

请按以下要求顺序编码:

 定义一个可以存储“整数”的LinkedHashSet对象
 存储以下整数
20,30,50,10,30,20
 打印集合大小。为什么跟存入的数量不一致?
 使用增强for遍历集合,打印大于25的元素

4 题目

请按以下要求顺序编码:

 定义一个可以存储“整数”的TreeSet对象
 存储以下整数
30,20,50,10,30,20
 打印集合大小。为什么跟存入的数量不一致?
 遍历集合,打印大于25的元素

2.3【集合】 编程题 Map接口

1 题目

请按以下要求顺序编码:

 定义一个:键Integer,值String类型的HashMap集合
 存储以下数据:
1,”张三”
2,“李四”
1,“王五”
 打印集合大小;
 使用“键找值”的方式遍历集合,打印键和值;
 使用“键值对”的方式遍历集合,打印键和值;
 获取键为1的值,并打印
 获取键为10的值,并打印
 判断集合中是否有键:10
 删除键为1的键值对,删除完毕打印集合

2 题目

有以下字符串:
	String str = “fje你kw我FDQFj你feAF他Eajf他eo2FA我FEjfew”;
请编程统计每个字符出现的次数

三 【File类】编程题

1.1 题目一

请在D盘根目录下创建一个文件:test1.txt(随意录入一些内容),再创建一个目录:测试目录
请编写main()方法,创建以下两个File对象:
	File file1 = new File(“d:\\test1.txt”);
	File file2 = new File(“d:\\测试目录”);
要求:
	1. 获取、打印file1和file2的绝对路径;
	2. 获取、打印file1和file2的文件名和目录名;
	3. 获取、打印file1和file2的文件大小;
	4. 分别判断file1和file2是否存在;
	5. 分别判断file1和file2是否是文件?是否是目录?

1.2 题目二

请编写main()方法,创建以下File对象:
	File file1 = new File(“test.txt”);//相对路径,在项目根目录下
	File file2 = new File(“一级目录”);
	File file3 = new File(“目录A/目录B/目录C”);
要求:
	1. 判断file1是否存在?如果不存在,创建这个文件。
	2. 判断file2是否存在?如果不存在,创建这个目录。
	3. 判断file3是否存在?如果不存在,创建这个多级目录。

1.3 题目三

请在D盘下创建一个目录“多级目录”,下面随意创建一些文件和目录。
请编写main()方法,创建以下File对象:
	File file = new File(“D:\\多级目录”);
要求:
	1. 获取这个file目录下所有的子文件/子目录的File数组
	2. 遍历这个数组,判断每个File对象是否文件
		如果是文件,打印:【文件】+ 绝对路径
		如果是目录,打印:【目录】+ 绝对路径

四 【递归】编程题

2.1 题目一

请使用递归计算5的阶乘

2.2 题目二

请使用递归计算从1--100的所有数的累加和。

五【Stream流】编程题

1 题目一

定义main()方法,按以下顺序编写程序:

  • 定义集合List,添加以下数据:

​ “张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”

  • 使用Stream流的forEach()方法打印集合的所有元素

2 题目二

定义main()方法,按以下顺序编写程序:

  • 定义集合List,添加以下数据:

​ “张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”

  • 使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
  • 筛选后,使用forEach()方法打印筛选结果。

3 题目三

定义main()方法,按以下顺序编写程序:

  • 定义集合List,添加以下数据:

​ “张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”

  • 使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
  • 筛选后,使用count()方法获取筛选的数量。

4 题目四

定义main()方法,按以下顺序编写程序:

  • 定义集合List,添加以下数据:

    ​ “张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”

  • 获取Stream流,用filter()方法筛选出所有的“张”姓学员;

  • 筛选后,跳过前2个,打印剩余的人员。

5 题目五

定义main()方法,按以下顺序编写程序:

  • 定义集合List,添加以下数据:

    “张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”,“王一博”,

  • 先筛选出所有的“张”姓学员;

  • 再筛选出所有的“王”姓学员;

  • 将两个流合并为一个流

  • 打印合并后的每个元素。

6 题目六

​ 1.定义一个Person类,包含一个属性:姓名(String)

​ 定义无参、全参构造方法

​ 定义get/set方法

​ 2.定义main()方法,按依稀顺序编写程序:

​ 定义集合List,添加以下数据:

​ “周慧敏”, “张靓颖”, “王一博”

​ 使用Stream流的map()方法,将每个元素封装为一个Person对象。

​ 将新流中的元素提取为List集合。

​ 遍历、打印集合中所有的Person对象信息。

六 【IO流】编程题

训练案例1

训练描述

​ 利用字节输出流一次写一个字节的方式向C盘的a.txt文件输出内容。

操作步骤描述:

​ 1.创建字节输出流FileOutputStream对象并指定文件路径。

​ 2.调用字节输出流的write(int byte)方法写出数据

训练案例2

训练描述

​ 利用字节输出流一次写一个字节数组的方式向C盘的b.txt文件输出内容。

操作步骤描述

​ 1.创建字节输出流FileOutputStream对象并指定文件路径。

​ 2.调用字节输出流的write(byte[] buf)方法写出数据。

训练案例3

训练描述

​ 利用字节输出流对象往C盘下c.txt文件输出5句:”i love java”

要求:
1.不能覆盖文件中原有的内容

​ 2.每一句输出各占一行

操作步骤描述

  1. 利用两个参数的构造方法创建字节输出流对象,参数一指定文件路径,参数二指定为true
  2. 调用字节输出流的write()方法写入数据,在每一行后面加上换行符:”\r\n”

训练案例4

训练描述
利用字节输入流读取C盘文件a.txt的内容,使用循环读取,一次读取一个字节,直到读取到文件末尾。

​ 将读取的字节输出到控制台。

操作步骤描述

  1. 创建字节输入流对象指定文件路径。
  2. 调用read(byte b)方法循环读取文件中的数据。
  3. 直到读取到-1时结束读取。

训练案例5

训练描述

利用字节输入流读取C盘文件b.txt的内容,使用循环读取,一次读取一个字节数组,直到读取到文件末尾,

将读取到的字节数组转换成字符串输出到控制台。

操作步骤描述

  1. 创建字节输入流对象指定文件路径。
  2. 定义一个字节数数组,用来存放读取的字节数。
  3. 调用read(byte[]buf)方法传入字节数组,循环读取文件中的数据。
  4. 直到读取到-1时结束读取。

训练案例6

训练描述

​ 用字节流将C盘下的a.png图片复制到D盘下(文件名保存一致)

​ 要求:一次读写一个字节数组的方式进行复制

操作步骤描述

  1. 创建字节输入流对象关联文件路径:C盘下的a.png。
  2. 创建字节输出流对象关联文件路径:D盘下的a.png。
  3. 定义一个字节数组,用来存放读取到文件字节数。
  4. 使用循环不断从字节输入流读取一个字节数组,每读取一个字节数组就利用输出流写出一个字节数组。
  5. 关闭流,释放资源。

训练案例7

训练描述

​ 从控制台循环接收用户录入的学生信息,输入格式为:学号-学生名字。

​ 将学生信息保存到C盘下面的stu.txt文件中,一个学生信息占据一行数据。

​ 当用户输入end时停止输入。

​ 要求使用字节输出流写出数据。

操作步骤描述

​ 1.使用Scanner类进行键盘录入数据。

​ 2.创建字节输入流对象关联目标文件。

​ 3.使用死循环不停的接收用户输入的学生数据。

​ 4.接收用户输入的学生数据。

​ 5.判断输入的内容是否是end,是则终止循环,停止输入。否则就数据写出到文件中。

6.1 【缓冲流】 编程题

1.1 题目一

​ 请将D:盘下的一个文件复制到E:盘下,例如:d:\视频.itcast,复制到E:\视频.itcast。

​ 请使用“字节缓冲流”:BufferedInputStream和BufferedOutputStream实现

1.2 题目二

​ 请编写main()方法,定义一个存储String的集合:List,并初始化以下数据:

​ List list = new ArrayList<>();

​ list.add(“迪丽热巴”);

​ list.add(“古力娜扎”);

​ list.add(“周杰伦”);

​ list.add(“蔡徐坤”);

​ //请定义“字符缓冲输出流”BufferedWriter将集合中的数据写入到文件:test3_2.txt中,每个名字一行。

1.3 题目三

​ 请编写main()方法,定义一个字符缓冲输入流BufferedReader,读取test3_2.txt文件,一次读取一行,将读取的内容存储到一个List集合中,遍历、并打印集合中的每个元素:

​ //1.定义一个字符缓冲输入流

​ BufferedReader in = new BufferedReader(…);

​ //2.定义一个集合

​ List list = new ArrayList<>();

​ //3.一次读取一行

​ …

​ …

1.4 题目四

​ 请按以下要求编写程序:

​ 1).定义一个学员类,有以下属性:姓名、性别、年龄、分数

​ 无参、全参构造方法,get/set方法

​ 2).定义main()方法,定义一个存储Student的集合,并初始化一些数据:

​ List stuList = new ArrayList<>();

​ stuList.add(new Student(“迪丽热巴”,”女”,18,99);

​ stuList.add(new Student(“古力娜扎”,”女”,19,98);

​ stuList.add(new Student(“周杰伦”,”男”,20,88);

​ stuList.add(new Student(“蔡徐坤”,”男”,19,78);

​ 3).定义一个字符缓冲输出流BufferedWriter,将学员信息写入到”test3_4.txt”中,

​ 每个学员信息占一行,每个字段之间用,符号隔开,例如:

​ 迪丽热巴,女,18,99

​ 古力娜扎,女,19,98

​ 周杰伦,男,20,88

​ 蔡徐坤,男,19,78

1.5 题目五

​ 请编写main()方法,定义一个字符缓冲输入流BufferedReader对象,读取”test3_4.txt”文件,一次读取一行,将每行数据封装为一个Student对象,并将Student对象存储到一个集合。遍历并打印集合的所有Student信息。

​ //定义一个BufferedReader对象

​ BufferedReader in = new BufferedReader(…);

​ //定义一个集合

​ List stuList = new ArrayList<>();

​ //一次读取一行

编程题【转换流】**

2.1 题目一

​ 请定义一个输出转换流对象:OutputStreamWriter,使用GBK编码,向文件”test4_1.txt”文件输出内容:”我要学好Java,我要月薪过万!!

2.2 题目二

​ 请定义一个输入转换流对象:InputStreamReader,使用GBK编码读取“test4_1.txt”文件的内容,并打印。

6.2 【序列化】编程题

3.1 题目一

​ 请定义Student类,有以下属性:姓名、性别、年龄,并实现Serializable接口。

​ 请定义main()方法,创建一个Student对象:

​ Student stu = new Student(“迪丽热巴”,”女”,18);

​ //定义一个序列化对象:ObjectOutputStream,将stu序列化到文件“test5_1.txt”中

3.2 题目二

​ 请定义main()方法,创建一个反序列化对象:ObjectInputStream,将文件”test5_1.txt”的对象反序列化到程序中,并打印此对象。

6.3 【打印流】编程题

​ 从键盘录入一行字符串,利用字节打印流将该行字符串保存到当前项目根目录下的d.txt文件中。

操作步骤描述

  1. 创建字节打印流对象并关联文件路径。
  2. 调用字节打印流对象的打印方法将内容输入到目标文件中。
  3. 关闭流释放资源。

七 【线程】编程题

1.1 题目一

请使用继承Thread类的方式定义一个线程类,在run()方法中使用循环变量i遍历1--1000所有的数字。
定义main()方法,启动这个线程,然后再使用循环变量k遍历1--1000所有的数字。
请观察控制台打印,i和k交叉打印的情况。

1.2 题目二

请使用实现Runnable接口的方式定义一个类,在run()方法中使用循环变量i遍历1--1000所有的数字。
定义main()方法,启动这个线程,然后再使用循环变量k遍历1--1000所有的数字。
请观察控制台打印,i和k交叉打印的情况。

1.3 题目三

请使用继承Thread类的方式定义一个线程类,在run()方法中循环10次,每1秒循环1次,每次循环按“yyyy-MM-dd HH:mm:ss”的格式打印当前系统时间。
请定义测试类,并定义main()方法,启动此线程,观察控制台打印。

1.4 题目四

请使用继承Thread类的方式定义两个线程,一个线程可以计算1--100所有数字的累加和,另一个线程可以计算1--1000所有数字的累加和,每个线程计算完毕后各自打印计算结果,格式例如:”xxx线程计算1--100的累加和,结果:xxxx”
请定义测试类,并定义main()方法,启动两个线程,观察控制台打印结果。

7.1 【匿名内部类的方式实现线程】编程题

1 题目

请使用“匿名Runnable”子类的方式实现线程,线程中计算1--500所有数字的累加和,并打印计算结果。

7.2【synchronized关键字】编程题

1 题目一

请编写程序,不使用任何同步技术,模拟三个窗口同时卖100张票的情况,运行并打印结果,观察到错误的数据,并解释出现错误的原因。

2 题目二

 请使用“同步代码块”改写3.1的程序,保证运行结果的正确。

3 题目三

 请使用“同步方法”改写3.1的程序,保证运行结果的正确。

4 题目四

请使用“Lock锁”改写3.1的程序,保证运行结果的正确
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值