前言
这段时间把java基础复习了大半,一直在补前面的基础,准备停下来往前面看看,复习下前面学过的知识,不然过段时间又会非常的模糊。
一、LinkedList集合
LinkedList属于List家族,底层是由双链表实现,所以增加了对于头和尾结点操作的特殊API——list.getFirst()(得到集合的第一个元素)、list.getLast()(得到集合的最后一个元素)、listr.removeFirst(删除集合的第一个元素)、list.removeLast(删除集合的最后一个元素); 该集合中的元素是有序、可重复、有索引的。
二、TreeSet集合
如果集合中的数据要进行排序的话就可以用到TreeSet集合,它自带升序排列,除此之外,可以在其中用自带比较器进行比较,即new一个Comparator比较器——
Set<Student2> studentSet = new TreeSet<>(( o1, o2) -> o1.getHeight() - o2.getHeight());
三、stream流
在一批数据中,想要获得想要的目标元素可以用遍历来获取,但是用stream流就更加方便。最终还是要将流中的数据转存到数组或者集合中去
public class Test { public static void main(String[] args) { List<String> list = new ArrayList<>(); Collections.addAll(list,"张无忌","张三丰","剑豪","张强","TT"); //filter过滤元素 Stream<String> tt = list.stream().filter(s->s.startsWith("张")); List<String> l1 = tt.collect(Collectors.toList());//将stream流的数据转存到集合中去 System.out.println(l1);}
}
四、日志框架
在项目上线之后,无法看到控制台上的报错信息,并且这个信息也不能一直保存下来,所以单纯的依靠控制台很难来维护程序,所以就提出了日志框架;它能记录程序在何时运行出现的问题,并且你可以控制将信息记录在控制台、文件、数据库中,这样就极大的方便了我们维护程序。在使用之前还是需要先配置文件!
package day18; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 掌握Logback日志框架技术 * 记录程序的运行到控制台、文件、数据库 * 日志级别:trace<debug<info<warn<error * 级别的作用:用于控制系统中哪些日志可以输出,只输出级别不低于设定级别的日志细信息 */ public class LogBackDemo { //创建logback的日志对象,代表了日志技术;名字就用类名,方便后续知道描述的什么地方 public static final Logger LOGGER = LoggerFactory.getLogger("LogBackDemo.class"); public static void main(String[] args) { try { LOGGER.debug("main方法开始执行了!!!"); LOGGER.info("我开始记录第二行日志!!"); int a= 10; int b= 0; LOGGER.trace("a="+a); LOGGER.trace("b="+b); System.out.println(a/b); } catch (Exception e) { e.printStackTrace(); LOGGER.error("功能出现异常,"+e); } } }
五、阶段项目
这个项目是简易的电影购票系统,将前面学的知识也是结合了起来,难度不大,但是增加了编程的思维,知道怎么去编写来解决问题。
(1)主程序
package day18.Movie; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.*; public class MovieSystem { //准备容器,后续的信息存放 public static final List<Customer> CUSTOMER_LIST = new ArrayList<>(); public static final List<Business> BUSINESSES_LIST = new ArrayList<>(); public static final List<Movie> MOVIES_LIST = new ArrayList<>(); //拿到用户、商家、电影对象 public static final Movie movie = new Movie(); public static final Customer customer = new Customer(); public static final Business business = new Business("YY","2535385542","123","0102-65245"); //创建logback的日志对象,代表了日志技术;名字就用类名,方便后续知道描述的什么地方 public static final Logger LOGGER = LoggerFactory.getLogger("MovieSystem.class"); //初始化信息 static { customer.setLoginname("TT"); customer.setAccount("2535385543"); customer.setPassword("123"); customer.setTel("18156544813"); CUSTOMER_LIST.add(customer); business.setAddress("宏泰广场"); business.setShopName("天天影院"); BUSINESSES_LIST.add(business); } public static void main(String[] args) { Scanner in = new Scanner(System.in); FirstMenu(customer,business ,in); } public static void FirstMenu(Customer customer, Business business, Scanner in){ while (true) { System.out.println("========欢迎来到小唐影票购买系统========"); System.out.println("选择如下操作:"); System.out.println("1.登录(用户、商家)"); System.out.println("2.商家入驻"); System.out.println("3.用户注册"); int choice = in.nextInt(); switch (choice){ case 1: login(customer , business , in); break; case 2: BusinessRegister(BUSINESSES_LIST , in); break; case 3: CustomerRegister(CUSTOMER_LIST , in); break; default: System.out.println("选择有误,请重新输入!"); break; } } } //登录系统 private static void login(Customer customer, Business business, Scanner in) { //Customer customer1 = new Customer(); //Business business = new Business(); while (true) { System.out.println("请输入账户:"); String account = in.next(); System.out.println("请输入密码:"); String password = in.next(); if(account.equals(customer.getAccount())&&password.equals(customer.getPassword())){ System.out.println("===欢迎"+customer.getLoginname()+"来到小唐影票购买系统!==="); CustomerMenu(movie , in); break; }else if(account.equals(business.getAccount())&&password.equals(business.getPassword())){ System.out.println("欢迎"+business.getLoginname()+"入驻影票购买系统!"); BusinessMenu(movie ,business , in); break; }else LOGGER.error("未找到账户信息,请重新输入!"); } } //商户入驻 private static void BusinessRegister(List<Business> BUSINESSES_LIST, Scanner in) { System.out.println("请输入您的影院名"); String shopName = in.next(); business.setShopName(shopName); System.out.println("请输入您的影院地址"); String address = in.next(); business.setAddress(address); System.out.println("设置您的账户名:"); String loginname = in.next(); business.setLoginname(loginname); System.out.println("设置您的登录账号:"); String account = in.next(); business.setAccount(account); System.out.println("设置您的密码:"); String password = in.next(); business.setPassword(password); System.out.println("输入您的影院联系电话"); String tel = in.next(); business.setTel(tel); BUSINESSES_LIST.add(business); System.out.println("入驻成功!愿您生意兴隆!"); } //用户注册 private static void CustomerRegister(List<Customer> customerList, Scanner in) { System.out.println("设置您的账户名:"); String loginname = in.next(); customer.setLoginname(loginname); System.out.println("设置您的登录账号:"); String account = in.next(); customer.setAccount(account); System.out.println("设置您的密码:"); String password = in.next(); customer.setPassword(password); System.out.println("输入您的联系电话"); String tel = in.next(); customer.setTel(tel); CUSTOMER_LIST.add(customer); System.out.println("注册成功!愿您天天享受好的观影的体验!"); System.out.println(CUSTOMER_LIST); } public static void BusinessMenu(Movie movie , Business business , Scanner in){ while (true) { System.out.println("===请选择以下操作==="); System.out.println("1.展示影院详情"); System.out.println("2.上架影片"); System.out.println("3.下架影片"); System.out.println("4.修改影片"); System.out.println("5.退出"); int choice = in.nextInt(); switch (choice) { case 1: showCinema(BUSINESSES_LIST); break; case 2: newMovie(MOVIES_LIST, movie, in); break; case 3: removeMovie(MOVIES_LIST , in); break; case 4: modifyMovie(MOVIES_LIST , in); break; case 5: System.out.println("欢迎下次光临~~~"); return; default: System.out.println("选择有误,请重新输入!"); break; } } } //修改影片 private static void modifyMovie(List<Movie> MOVIES_LIST, Scanner in) { System.out.println("请输入想要修改的片名:"); String name = in.next(); for (int i = 0; i < MOVIES_LIST.size(); i++) { Movie movie1 = MOVIES_LIST.get(i); if(name.equals(movie1.getName())) { System.out.println("请输入想要修改的信息:票价、余票、放映时间、"); String message = in.next(); switch (message){ case "票价" : System.out.println("您想将票价改为:"); double price = in.nextDouble(); movie1.setPrice(price); System.out.println("票价修改成功!!"); break; case "余票" : System.out.println("您想将余票数量改为:"); int tickets = in.nextInt(); movie1.setTickets(tickets); System.out.println("余票数量修改成功!!"); break; case "放映时间" : System.out.println("您想将放映时间改为:"); String time = in.next(); movie1.setTime(time); System.out.println("时间修改成功!!"); break; default: System.out.println("输入有误,请重新输入!"); return; } } } } //下架影片 private static void removeMovie(List<Movie> MOVIES_LIST, Scanner in) { System.out.println("请输入想要下架的影片名:"); String name = in.next(); for (int i = 0; i < MOVIES_LIST.size(); i++) { Movie movie = MOVIES_LIST.get(i); if(name.equals(movie.getName())){ MOVIES_LIST.remove(i); System.out.println("影片下架成功!!"); System.out.println("现有电影:"+MOVIES_LIST); break; }else LOGGER.error("未找到该影片!"); } } //上架影片 //在使用set设置对象属性后,要重新建一个对象再添加到容器中,否则会覆盖前面一个对象的属性值 private static void newMovie(List<Movie> MOVIES_LIST,Movie movie , Scanner in) { System.out.println("请输入想要上架的电影名称:"); String name = in.next(); movie.setName(name); System.out.println("请输入影片主演:"); String actors = in.next(); System.out.println("请输入票价:"); double price = in.nextDouble(); System.out.println("请输入余票数量:"); int tickets = in.nextInt(); System.out.println("请输入影片放映时间:"); String time = in.next(); Movie movie1 = new Movie(name , actors , price , tickets , time,0.0); MOVIES_LIST.add(movie1); System.out.println("电影上架成功!!"); System.out.println("现有电影:"+MOVIES_LIST); } //展示影院详情 private static void showCinema(List<Business> BUSINESSES_LIST) { if(BUSINESSES_LIST==null){ System.out.println("还未有商家入驻!"); }else System.out.println(BUSINESSES_LIST); } public static void CustomerMenu(Movie movie , Scanner in ){ while (true) { System.out.println("=====可选择以下操作====="); System.out.println("1.展示全部影片详情"); System.out.println("2.根据名称查询电影信息"); System.out.println("3.评分"); System.out.println("4.购票"); System.out.println("5.退出"); int choice = in.nextInt(); switch (choice){ case 1: showMovie(MOVIES_LIST , movie); break; case 2: FindMovieByName(MOVIES_LIST , in); break; case 3: MovieScore(MOVIES_LIST , in); break; case 4: BuyTickets(MOVIES_LIST , in); break; case 5: System.out.println("欢迎下次光临~~~"); return; default: System.out.println("选择有误,请重新输入!"); break; } } } //购票 private static void BuyTickets(List<Movie> MOVIES_LIST, Scanner in) { while (true) { System.out.println("输入您想要看的影片:"); String name = in.next(); Movie movie = FindMovieByName1(MOVIES_LIST , name); if(movie!=null){ System.out.println("您想看的影片信息:"+movie); System.out.println("输入您想要购票的张数"); int tickets = in.nextInt(); if(movie.getTickets()!=0&&tickets<movie.getTickets()){ movie.setTickets(movie.getTickets()-tickets); System.out.println("购票成功!"); break; }else System.out.println("余票数量不够,无法购买,请重新输入购买数量!"); }else LOGGER.error("该影片未上架哎,敬请期待!"); } } //电影评分 private static void MovieScore(List<Movie> MOVIES_LIST, Scanner in) { while (true) { System.out.println("输入想要查找的影片名:"); String name = in.next(); Movie movie = FindMovieByName1(MOVIES_LIST,name); if(movie!=null){ if(name.equals(movie.getName())){ System.out.println("输入您想给影片"+movie.getName()+"打评的分数:"); double score = in.nextDouble(); movie.setScore(score); System.out.println("打分成功!!谢谢您的评价!!"); break; } }else System.out.println("未找到影片,请重新输入!"); } } //根据名字查询电影 private static void FindMovieByName(List<Movie> MOVIES_LIST , Scanner in ) { System.out.println("输入您想要查找的影片名:"); String name = in.next(); for (int i = 0; i < MOVIES_LIST.size(); i++) { Movie movie = MOVIES_LIST.get(i); if(name.equals(movie.getName())){ System.out.println(movie); break; }else System.out.println("未找到影片!"); } } private static Movie FindMovieByName1(List<Movie> MOVIES_LIST , String name ) { while (true) { for (int i = 0; i < MOVIES_LIST.size(); i++) { Movie movie = MOVIES_LIST.get(i); if(name.equals(movie.getName())){ return movie; }else System.out.println("未找到影片,请重新输入!"); } } } //展示全部影片详情 private static void showMovie(List<Movie> MOVIES_LIST , Movie movie) { if(movie.getName()==null){ System.out.println("还未上架影片!"); }else System.out.println(MOVIES_LIST); } }
(2)类根据主程序就可直接写出。
六、File类
对于文件的操作,目前学到创建文件、删除文件和其常用的API;其中遍历文件目录也是十分重要的,其中有两个方法——file.list()、file.listFiles(),但是它们都能只能遍历到一级目录,后续就可以用递归来遍历多级目录得到想要的文件地址。
package day19; import java.io.File; import java.text.SimpleDateFormat; /** * 掌握关于文件的常用API */ public class FileAPI { public static void main(String[] args) { File file = new File("C:\\Users\\TT\\Pictures\\Camera Roll\\ydd.JPG");//绝对路径 File file1 = new File("src\\twx.txt");//相对路径 //获取文件的绝对路劲 System.out.println("文件绝对路径:"+file1.getAbsoluteFile());//运行后字体变成蓝色才是绝对路径 //获取文件定义的时候使用的路径 System.out.println("定义的时候使用的路径:"+file.getPath()); //获取文件的名称 System.out.println("文件名:"+file.getName()); //获取文件的大小 System.out.println("文件大小:"+file1.length()); //获取文件最后的修改时间 long time = file.lastModified(); System.out.println("最后的修改时间:" +new SimpleDateFormat("yyyy:MM:dd HH:mm:ss").format(time)); //判断文件是文件夹还是文件 System.out.println("true为文件,false为文件夹:"+file.isFile()); System.out.println("true为文件夹,false为文件:"+file.isDirectory()); } }
利用递归找到目标文件位置
package day19.recursionDemo; import java.io.File; import java.io.IOException; /** * 掌握非规律递归 ,找到目标文件 */ public class recursionTest1 { public static void main(String[] args) { FindFile(new File("D:/") , "devcpp.exe"); } /** * 寻找目标文件 * @param file 在哪个路径下寻找 * @param filename 目标文件名字 */ public static void FindFile(File file , String filename){ if(file!=null&&file.isDirectory()){ File[] names = file.listFiles(); //判断是否存在一级目录 if(names!=null&&names.length>0){ for (File name : names) { //判断该文件是文件夹还是文件 if(name.isFile()){ if(name.getName().contains(filename)){ System.out.println("找到了目标文件位置:" +name.getAbsolutePath()); //启动目标路径程序(只有exe文件才能启动) try { Runtime runtime = Runtime.getRuntime(); runtime.exec(name.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } } }else //该文件是文件夹,继续寻找 FindFile(name,filename); } } }else System.out.println("当前给定路径有误,无法查找!"); } }q
七、总结
在将近两个月对java基础的学习之后,对于一些基本问题和操作都越来越熟悉了,虽然都是些基础部分,但是全部掌握熟悉也还是有点难度,所以一定要去回头看看,经常复习下,再到后续学习一些框架也就会容易很多了。