Java学习笔记

  • Stream流
    • 1 Stream流的体验
    • stream流的生成操作
    • stream中间流操作
      • filter
      • limit和skip
      • concat和distinct
      • sorted
      • map和mapToInt
    • stream终结操作
    • stream流的收集操作
  • 反射
    • 类加载器
      • 类加载
      • 396 类加载器
    • 反射
      • 反射概述
      • 获取Class类的对象
      • 反射获取构造方法并使用
      • 反射获取成员变量并使用
      • 反射获取成员方法并使用
      • 反射之越过泛型检查
      • 407 通过反射运行配置文件指定的内容

Stream流

1 Stream流的体验

//附加:String s ="";,注意s.length()为0,但是此时s !=null
如果要实现需求:

那么按照正常的操作:

public static void main(String[] args) {ArrayList<String> array = new ArrayList<>();array.add("林青霞");array.add("张曼玉");array.add("王祖贤");array.add("柳岩");array.add("张明");array.add("");ArrayList<String> array2 = new ArrayList<>();ArrayList<String> array3 = new ArrayList<>();for(String s:array){if (s.startsWith("张")){array2.add(s);if (s.length()==3){array3.add(s);}}}}

如果使用stream流的话:

public static void main(String[] args) {ArrayList<String> array = new ArrayList<>();array.add("林青霞");array.add("张曼玉");array.add("王祖贤");array.add("柳岩");array.add("张明");array.add("");ArrayList<String> array3 = new ArrayList<>();//stream为了方便阅读才分行了,实际上一行就够了。//直接阅读代码即可方便的明白无关逻辑方式的语意array.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(array3::add);System.out.println(array3);}

stream流的生成操作

stream操作有三步:例如:

第一步:生成流。
常见的生成流的操作有:

stream中间流操作

filter

limit和skip

    public static void main(String[] args) {ArrayList<String> array1 = new ArrayList<>();array1.add("1");array1.add("2");array1.add("3");array1.add("4");array1.add("5");array1.add("6");array1.stream().skip(2).forEach(System.out::println);array1.stream().limit(2).forEach(System.out::println);}

concat和distinct

concat是合并流,distinct(截然不同的)不是拆分流,而是删除流中的重复元素。

sorted

public static void main(String[] args) {ArrayList<String> array1 = new ArrayList<>();array1.add("lqx");array1.add("zmy");array1.add("gdg");array1.add("wsq");array1.add("wrq");array1.add("fhcq");array1.stream().sorted((s1,s2)->{//排序结果:先按长度排,长度一样的按自然排序结果排int num = s1.length()-s2.length();return num==0?s1.compareTo(s2):num;//compareTo 方法:返回自然排序的结果}).forEach(System.out::println);
}

map和mapToInt

    public static void main(String[] args) {ArrayList<String> array1 = new ArrayList<>();array1.add("15");array1.add("6");array1.add("52");array1.add("97");array1.add("24");array1.add("33");array1.stream().map(Integer::parseInt).forEach(System.out::println);//mapToInt方法返回的是IntStream,里面全是Int形数据,因此相比较于单独的Stream,多一些方法,比如下面的sum方法int sum = array1.stream().mapToInt(Integer::parseInt).sum();System.out.println(sum);}

stream终结操作

stream流的收集操作

将stream流中的数据收集回集合。

对toMap的范例程序:

    public static void main(String[] args) {String[] strArray = {"林青霞,30","张曼玉,35","王祖贤,33","柳岩,25"};Map<String, Integer> map = Stream.of(strArray).collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));//两个Function的参数都是一样的字符串。System.out.println(map);}

反射

类加载器

类加载

396 类加载器



范例程序:

    public static void main(String[] args) {ClassLoader c1 = ClassLoader.getSystemClassLoader();ClassLoader c1Parent = c1.getParent();ClassLoader c1ParentParent = c1Parent.getParent();System.out.println(c1);System.out.println(c1Parent);System.out.println(c1ParentParent);/*程序输出:jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dcjdk.internal.loader.ClassLoaders$PlatformClassLoader@3ac3fd8bnull*/}

反射

反射概述

获取Class类的对象


范例程序:

    public static void main(String[] args) throws ClassNotFoundException {Class<Student> c1 = Student.class;System.out.println(c1);Student s1 = new Student();Class<? extends Student> c2 = s1.getClass();System.out.println(c2);Class<?> c3 = Class.forName("Lei.Student");System.out.println(c3);}

反射获取构造方法并使用


范例程序:

    public static void main(String[] args) throws ClassNotFoundException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {//1.获取字节码文件Class<?> c1 = Class.forName("Lei.Student");//2.通过字节码文件获取构造方法类Constructor<?> constructor = c1.getConstructor(int.class, String.class);//3.通过构造方法创建实例Object s1 = constructor.newInstance(30, "王祖贤");System.out.println(s1);}

使用此方法时如果改用getDeclaredConstructor方法获取private修饰的私有构造方法会报错,因为是private修饰的,无法正常创建对象,此时可以通过暴力反射(取消访问检查)来创建。

反射获取成员变量并使用

反射获取成员方法并使用


注意:最后的invoke返回的是一个null的Object,调用方法的是传入的那个Object类。范例代码:

 public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {Class<?> c = Class.forName("Lei.Student");Method[] methods = c.getDeclaredMethods();Method setAgeMethod = c.getDeclaredMethod("setAge", int.class);Object obj = c.getConstructor(int.class, String.class).newInstance(20, "lqx");Object invokeObj = setAgeMethod.invoke(obj, 25);System.out.println(invokeObj);//显示nullSystem.out.println(obj);//年龄已经修改为25}

反射之越过泛型检查

    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {ArrayList<Integer> array = new ArrayList<>();//指定了Integer类型Class<? extends ArrayList> c = array.getClass();Method addMethod = c.getMethod("add", Object.class);//反射越过泛型检查addMethod.invoke(array,"nihao");addMethod.invoke(array,"Miho");addMethod.invoke(array,"Miho");System.out.println(array);}

407 通过反射运行配置文件指定的内容

观看视频比较直观

Java学习笔记 2021-7-1 2021-7-8相关推荐

  1. 韩顺平 2021零基础学Java 学习笔记

    韩顺平 2021零基础学Java 学习笔记(1)(自用)_丨shallow丨的博客-CSDN博客_韩顺平java笔记 韩顺平 2021零基础学Java 学习笔记(2)(自用)_丨shallow丨的博客 ...

  2. Java学习笔记(java基础)

    Java学习笔记(第一周) Java 介绍 Java 发展方向 JVM , JDK , JRE 名词解释 Java语言的特点 Java安装 安装包的下载 配置环境变量 验证是否安装成功 Java的第一 ...

  3. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  4. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  5. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

  6. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

  7. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

  8. Java学习笔记(十)--控制台输入输出

    输入输出 一.控制台输入 在程序运行中要获取用户的输入数据来控制程序,我们要使用到 java.util 包中的 Scanner 类.当然 Java 中还可以使用其他的输入方式,但这里主要讲解 Scan ...

  9. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  10. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

最新文章

  1. 待在小公司好多年了,微服务还没怎么玩过。。。
  2. java selenium iframe_如何使用java在Selenium WebDriver中处理iframe
  3. html里五角星怎么打,html怎么显示五角星 几分给几个五角星
  4. matlab 注意事项
  5. Generator-ing Values
  6. Compiled functions can't take variable number of arguments or use keyword-only arguments with defaul
  7. 成功解决mxnet.base.MXNetError: C:\Jenkins\workspace\mxnet-tag\mxnet\3rdparty\dmlc-core\src\io\local_file
  8. intellij2019.1 破jie不了的解决办法
  9. html 图片墙效果,基于html5实现的图片墙效果
  10. 大量删除MySQL中的数据
  11. Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)
  12. ContextCapture(Smart3D)网盘教程 直接下载
  13. 环境化学试题及答案大全
  14. 没有CCTV-5也不用慌的世界杯观战指南
  15. c语言中sys是什么文件夹,windows系统中C盘的pagefile.sys是什么文件
  16. Win10系统不兼容驱动怎么办?
  17. 三极管吸潮失效分析案例
  18. 为了远方的爱-2016年东方红公益基金捐赠致辞
  19. 用计算机制作板报教案,浅析“用Word制作电子板报”的教学设计
  20. 英文字母和中文汉字在不同字符集编码下的字节数

热门文章

  1. 计算机房况控制功能是,从实际出发加强计算机房的管理和维护-文档资料.docx
  2. Linux定时器一(最小堆)
  3. 用sdk画三叶玫瑰曲线
  4. IO流,多线程,网络编程(4)JavaSE
  5. 给大家分享一款由PHP+MYSQL搭建的外卖小程序源码
  6. android复读机功能,点滴复读机最新版-点滴复读机app下载v3.0.1 安卓版-腾牛安卓网...
  7. 机器学习应该了解的十大算法
  8. 借贷宝java_程序猿去哪儿?——北京JAVA专场
  9. 分布式事务seata整合nacos+openfeign
  10. 水电站下泄生态流量监控解决方案-智能监测生态流量遥测终端-水电站流量监测站