04 2019 档案

摘要:1、FileReader extends InputStreamReader extends Reader 其中,Reader字符输入流和InputStreamReader和FileReader为字符输入流——写出——读取; 2、字符输入流写出读取数据 其中,FileReader对象的read方法是 阅读全文
posted @ 2019-04-30 23:12 wmqiang 阅读(839) 评论(0) 推荐(0)
摘要:其中,c.txt中内容是 “你好”; 我们程序编码是UTF-8类型; 运行结果: 前三个字节组成“你”,后三个字节组成“好”; 如果输出加一个char类型转换,中文是乱码,英文可以正常输出: 运行结果: 这是“你好abc”的输出结果; 阅读全文
posted @ 2019-04-29 23:47 wmqiang 阅读(1064) 评论(0) 推荐(0)
摘要:字节输入流——写出——读取read(); 字节输出流——写入——刻盘write(); 一次读取和写入一个字节: 其中,这个图片文件可能百万个字节大小,要循环百万次,效率很低; 使用数组缓冲一次读取多个字节和写入多个字节: 其中,创建byte[] 字节类型的数组的时候,大小可以是1024的倍数,读取和 阅读全文
posted @ 2019-04-29 23:40 wmqiang 阅读(284) 评论(0) 推荐(0)
摘要:1、字节输入流——硬盘中数据写出到内存中供解析使用: 根据文件存储原理,8位二进制组成为一个字节,换算后的数值在0-127则查询ASCII码表,其他则查询系统默认表,如简体中文查询GBK表; 2、FileInputStream文件字节输入流: 3、FileInputStream使用实例: 其中,每次 阅读全文
posted @ 2019-04-28 21:23 wmqiang 阅读(3022) 评论(0) 推荐(0)
摘要:1、FileOutputSream文件字节输出流: 输入--写出--使用; 输出--写入--存储; 写出写入是对硬盘而言; 输出--写入--存储; 写出写入是对硬盘而言; 其中,OutputStream为所有类型的字节输出流的超类; FileOutputStream文件字节输出流是其中的一个子类,e 阅读全文
posted @ 2019-04-24 23:14 wmqiang 阅读(323) 评论(0) 推荐(0)
摘要:1、输入和输出概念: 输入:硬盘到内存为了使用; 输出:内存到硬盘为了保存; 2、一切皆为字节: 计算机只识别二进制数字,一个字节为8个二进制数字; 存储在硬盘是字节,传输也是字节; 阅读全文
posted @ 2019-04-24 22:49 wmqiang 阅读(195) 评论(0) 推荐(0)
摘要:FileFilter过滤器原理: File对象的listFiles()方法做了三件事情: 第一件,遍历得到所有的文件/文件夹; 第二件,调用入参过滤器接口自己DIY的实现类中重写的accept()方法; 第三件,将遍历得到的文件/文件夹当入参传入accept()方法; DIY的FileFilter接 阅读全文
posted @ 2019-04-18 21:20 wmqiang 阅读(738) 评论(0) 推荐(0)
摘要:1-n求和: 频繁的创建和销毁方法,太耗栈内存,1-n求和使用for循环即可; 其中,方法return语句即返回值到调用的地方; 计算阶乘是同理: 递归重点是每次方法的参数不一样; 递归打印多级目录: main方法(程序的入口): 主要逻辑方法: 主要逻辑方法中加一行: 运行结果: 升级下需求:只需 阅读全文
posted @ 2019-04-18 20:15 wmqiang 阅读(158) 评论(0) 推荐(0)
摘要:程序的入口为main方法,方法都是压栈执行,没有创建对象的情况下则用不到堆内存,只涉及到栈内存和方法区; “ return ” 语句为结束方法; 返回值到方法调用处; 递归——自己调用自己; 栈内存分析: 递归要有条件并且次数不能太多: 运行结果: 其中,栈内存一直在变化,可能每次都不一样,当方法执 阅读全文
posted @ 2019-04-18 17:39 wmqiang 阅读(870) 评论(0) 推荐(0)
摘要:操作系统类:io 路径分隔符和文件名称分隔符: 文件路径不要写死,调用File类的静态方法separator; 绝对路径和相对路径: 绝对路径:根据系统盘符; 相对路径:相对当前项目的绝对路径; File类构造方法: 第一种直接穿入参一个路径: 第二种是父子路径: 第三种是父文件File类,子路径: 阅读全文
posted @ 2019-04-12 15:13 wmqiang 阅读(139) 评论(0) 推荐(0)
摘要:相当于sleep( 5000 ) , 效果一样; 阅读全文
posted @ 2019-04-07 20:45 wmqiang 阅读(487) 评论(0) 推荐(0)
摘要:其中,多个线程必须使用的是同一个锁对象; 等待 wait 和唤醒 notify 的也就是这个对象监视器及锁对象的正在等待的单个线程,若多个,谁等的时间长唤醒谁; 代码实现: 从顾客消费者来买包子开始: 使用的是线程类Thread类的匿名内部类的匿名对象方式创建线程; 同步代码块的方式实现线程同步即解 阅读全文
posted @ 2019-04-07 20:38 wmqiang 阅读(233) 评论(0) 推荐(0)
摘要:线程状态概述: TIMED_WAITING: BLOCKED: 以下是重点: WAITING: 等待唤醒机制即线程通信:Object.wait() 和 Object.notify 阅读全文
posted @ 2019-04-07 20:18 wmqiang 阅读(169) 评论(0) 推荐(0)
摘要:线程间通信——等待唤醒机制,避免争夺同一资源; 锁对象可以是任意Object类的子类对象; 包子案例: 包子案例——生产者和消费者: 代码实现: 关键就是在于两个线程使用同一个锁对象! 这边是主程序调用这两个线程时候传入的同一个对象! 包子铺线程类——生产者: 其中,baozi类作为成员变量,并且重 阅读全文
posted @ 2019-04-07 20:13 wmqiang 阅读(360) 评论(0) 推荐(0)
摘要:线程同步即解决线程安全问题的第三种方式——使用lock锁 代码实现: 其中,ReentrantLock是lock接口的实现类,这边是使用多态创建,访问成员方法时,编译看左,运行看右; ReentrantLock对象要在方法体外面即成员位置就创建; 优化代码,将释放锁写道try/catch的final 阅读全文
posted @ 2019-04-07 17:41 wmqiang 阅读(254) 评论(0) 推荐(0)
摘要:第二种线程同步的方式:同步方法; 代码实现: run方法中调用这个同步方法: 继续回到主程序创建多线程运行,结果是线程安全的; 转换为同步锁即转换成同步代码块写法: 是一样的效果; 再主程序中打印的创建的Runnable接口的实现类RunnableImpl对象地址值和 和创建的多线程中run方法中打 阅读全文
posted @ 2019-04-07 17:01 wmqiang 阅读(215) 评论(0) 推荐(0)
摘要:线程同步——解决线程安全问题 第一种方式,同步代码块; 代码实现: 其中,锁对象可以是任意对象,用Object对象是必然ok的,用synchronized关键字, synchronized( 锁对象 ){ 访问共享数据的代码块 } 再运行多线程的主程序: 还是原来的主程序,运行结果: 解决了线程安全 阅读全文
posted @ 2019-04-07 15:35 wmqiang 阅读(223) 评论(0) 推荐(0)
摘要:多线程访问共享数据,产生安全问题; 如卖票案列: 线程安全的代码表现: 其中,Thread类的静态方法sleep需要处理异常,throw抛出异常或者try/catch处理异常; while( true )即为死循环; 主程序执行: 其中,父类Thread构造方法入参为同一个Runnable的实现类R 阅读全文
posted @ 2019-04-07 15:18 wmqiang 阅读(141) 评论(0) 推荐(0)
摘要:创建多线程的第一种方式——创建Thread子类和重写run方法; 第二种方式——实现Runnable接口,实现类传参给父类Thread类构造方法创建线程; 第一种方式创建Thread子类和重写run方法: 创建线程: 主线程调用新线程,创建多线程: 运行结果是cpu随机执行; 阅读全文
posted @ 2019-04-07 14:59 wmqiang 阅读(1246) 评论(0) 推荐(0)
摘要:定义一个普通的类: 引用这个类,执行main方法,main方法就是一个主线程: 线程:进程的执行单元,可以理解为栈内存中的所执行的方法(除了main方法之外都是线程中的run方法)地址开辟通往cpu的一条执行路径; 运行结果: 其中,0作为分母报算术异常; 阅读全文
posted @ 2019-04-07 14:45 wmqiang 阅读(1674) 评论(0) 推荐(0)
摘要:进程:内存中运行的应用程序 其中,电脑内存是临时存储,关机就清除了; 线程:进程中的每个执行单元 一个程序运行后至少有一个进程,一个进程可以包含多个线程; 线程的调度: 阅读全文
posted @ 2019-04-07 13:06 wmqiang 阅读(573) 评论(0) 推荐(0)
摘要:字不重要,看图。 阅读全文
posted @ 2019-04-07 12:39 wmqiang 阅读(317) 评论(0) 推荐(0)
摘要:匿名内部实现多线程的两种方式创建: 使用匿名内部类用第一种方式即继承Thread类重写run方法: 运行结果: 使用匿名内部类用第二种方式即实现Runnable接口调用父类Thread的构造方法开启线程: 其中,new Thread(r).start使用的是匿名对象的方式直接调用start方法开启线 阅读全文
posted @ 2019-04-07 12:34 wmqiang 阅读(994) 评论(0) 推荐(0)
摘要:实现Runnable接口创建多线程: 创建一个Runnable接口的实现类RunnableImpl: 主线程中: 其中,链式编程的Thread类的静态方法currentThread方法点getName是获取的是当前线程的名称; 运行结果: 线程抢占cpu资源是随机的,无法人为控制; 实现Runnab 阅读全文
posted @ 2019-04-07 11:59 wmqiang 阅读(1318) 评论(0) 推荐(0)
摘要:Thread类常用方法 获取当前线程名称的方法: 第一种方法,在线程中使用getName()方法: 执行结果: 其中,根据多线程的内存原理,会开辟包含主线程的四个栈空间出来供cpu四个线程执行,优先级cpu自己选择,认为控制不了,所以可能会先执行Thread-2线程,后执行的Thread-1线程; 阅读全文
posted @ 2019-04-07 11:07 wmqiang 阅读(2023) 评论(0) 推荐(0)
摘要:main线程即主线程,和调用的两外一个线程(继承Thread类重写run方法实现的一个线程): 程序原理解析: 内存原理解析: 阅读全文
posted @ 2019-04-07 10:25 wmqiang 阅读(159) 评论(0) 推荐(0)
摘要:斗地主案例——双列集合,看牌时候有序集合 需求分析设计: 代码实现: 封装一个看牌的方法: 主程序看牌步骤: 运行结果: 阅读全文
posted @ 2019-04-07 10:18 wmqiang 阅读(325) 评论(0) 推荐(0)
摘要:只适用于List接口和Set接口和Map接口,不能改变,不允许有重复元素; 阅读全文
posted @ 2019-04-07 01:00 wmqiang 阅读(263) 评论(0) 推荐(0)
摘要:其中,字符的包装类是Character;字符串包装类是String; 遍历字符串转换的数组,每个元素都是一个字符,看创建的这个集合有木有,一开始肯定是没有的其实,字符作为key,所以判断的是这个创建的集合中key中有没有这个字符,出现次数作为value,有则++,再重新对这个key的键值对组成的元素 阅读全文
posted @ 2019-04-07 00:52 wmqiang 阅读(508) 评论(0) 推荐(0)
摘要:LinkedHashMap: 继承了HashMap; 其中,key不允许重复是Map接口就有的性质; HashTable: 同步的,意味着是单线程,意味着线程安全的,但是速度慢,和List接口集合的子类vector有点相同命运; key和value都不允许为空; 现在是高并发多线程的时代,线程不安全 阅读全文
posted @ 2019-04-07 00:32 wmqiang 阅读(439) 评论(0) 推荐(0)
摘要:第一种情况,key为String,value为自定义类person类: 输出结果,key重复的被去掉了,key重复的那个value值之前的被最后一个覆盖了; 第二种情况,key为自定义类person类,value为String: 其中,要想保证不重复,自定义类要重写 Object 类的 HashCo 阅读全文
posted @ 2019-04-07 00:15 wmqiang 阅读(648) 评论(0) 推荐(0)
摘要:双列集合<k, v> Map: Map 和 HashMap是无序的; LinkedHashMap是有序的; HashMap & LinkedHashMap: put方法: 其中,可以多态创建Map对象,能直接输出Map中元素(key=value组成一个元素),说明Map重写了Object类的toSt 阅读全文
posted @ 2019-04-06 23:28 wmqiang 阅读(460) 评论(0) 推荐(0)
摘要:addAll & shuffle: 返回类型为boolean类型,执行完操作不接收也行; 其中,静态方法,与对象无关,类名点方法名直接调用; 点点点为可变参数,随便填写几个参数都可以; sort方法: int数据类型的封装类integer类sort方法: 集合只能存储对象; String类型sort 阅读全文
posted @ 2019-04-06 18:53 wmqiang 阅读(499) 评论(0) 推荐(0)
摘要:定义一个可变参数的方法: 其中,可见可变参数底层是数组 [ ], 大写 I 代表是int类型数据的数组,@后面是它的指向堆内存中的地址值(Object的toString方法); 可变参数的注意事项: 可变参数的特殊写法(终极写法): 阅读全文
posted @ 2019-04-06 15:52 wmqiang 阅读(173) 评论(0) 推荐(0)
摘要:底层是由哈希表+链表: 阅读全文
posted @ 2019-04-06 14:25 wmqiang 阅读(157) 评论(0) 推荐(0)
摘要:不重复,无索引,不能重复元素,没有索引; HashSet集合: 此时实现Set接口,有哈希表(HashMap的一个实例)支持,哈希表意味着查询速度很快, 是无序的,即元素的存取的顺序可能不一致; 且此实现也不是同步的,即多线程的; 其中,能用iterator迭代器因为是继承集合的祖宗类collect 阅读全文
posted @ 2019-04-06 14:20 wmqiang 阅读(508) 评论(0) 推荐(0)
摘要:是实现可增长的对象数组;所以底层也是数组; 与collection集合不同的是,vector是同步的,意味着是单线程的,意味着效率低,速度慢, 所以在jdk1.2版本之后被ArrayList集合所取代了; 对,没有错。 阅读全文
posted @ 2019-04-05 21:44 wmqiang 阅读(205) 评论(0) 推荐(0)
摘要:List接口的链表列表实现,意味着查询慢,增删快; 另外此实现不是同步的,也就是多线程,效率高,速度快,、 注意:LInkedList不能使用多态写法! LInkedList集合增加元素,按顺序加在后面(底层是链表,不是队列,队列类似安检,先进的先出) 其中,push和addFirst一样意思;ad 阅读全文
posted @ 2019-04-05 21:38 wmqiang 阅读(767) 评论(0) 推荐(0)
摘要:ArrayList集合是List接口的大小可变数组的实现,所以ArraryList的底层是数组,查询快,增删慢,意味着开发过程中查询多使用没毛病,增删操作多请不要使用ArrayList集合! 另外,此实现不是同步的,就是多线程的,意味着效率高,速度快; 方法就是List接口的一些方法; 阅读全文
posted @ 2019-04-05 19:34 wmqiang 阅读(134) 评论(0) 推荐(0)
摘要:添加元素: 其中,打印输出的和添加的顺序一致(即有序的意思),且允许重复; 移除元素: 其中,java API可以看出 remove 方法返回值类型是String类型; 遍历: 因为list是有索引的,所以可以使用普通for循环,索引就是指向有序集合或数组的下标; 增强for即for each没有用 阅读全文
posted @ 2019-04-05 19:27 wmqiang 阅读(288) 评论(0) 推荐(0)
摘要:栈(stack):先进后出; 队列(queue):如排队安检,先进先出; 数组(Array):有序的元素序列;查询快(数组的地址是连续的),增删慢; 链表(linked list):由一系列结点node(链表中的每一个元素称为结点)组成, 二叉树——红黑树: 阅读全文
posted @ 2019-04-05 19:10 wmqiang 阅读(119) 评论(0) 推荐(0)
摘要:第一步准备牌: 第二步洗牌: 其中,集合有个静态方法suffle,就是洗牌意思,随机搅乱集合元素顺序; 调用静态方法直接用类名点方法; 第三步发牌: 其中,使用%即模函数,模2的话则有两种结果(0和1);模3则有三种结果(0和1和2); 增强for即for each没有索引,所以轮流发牌只能用for 阅读全文
posted @ 2019-04-05 18:43 wmqiang 阅读(212) 评论(0) 推荐(0)
摘要:先创建两个泛型分别为Integer和String数据类型的集合: 调用一个含有泛型通配符的方法: 其中,泛型通配符不能在声明定义和创建对象时候使用,只能在调用方法时候使用; 泛型没有继承,所有直接写<Object>是不行的,要Integer和String两个都能用,要使用通配符,但是iterator 阅读全文
posted @ 2019-04-05 15:27 wmqiang 阅读(315) 评论(0) 推荐(0)
摘要:泛型不是数据类型,其实可以看作一个变量,用来接收数据类型; 其中,创建集合对象时候,右边执行构造方法时候泛型可以省略; 泛型的好处: 不使用泛型时候: 其中,声明定义集合对象名和创建集合对象时候没有使用泛型即没有 <>, 会报错: 使用泛型情况: 其中,创建集合对象的右边调用构造方法时候泛型要和左边 阅读全文
posted @ 2019-04-05 15:18 wmqiang 阅读(253) 评论(0) 推荐(0)
摘要:遍历:for循环遍历数组或集合;iterator迭代器遍历集合;还有增强for循环(for each)遍历数组或集合; 遍历数组: 遍历集合: 阅读全文
posted @ 2019-04-05 13:39 wmqiang 阅读(5239) 评论(0) 推荐(0)
摘要:Iterator接口: Iterator接口使用: 其中,集合Collection接口的定义也是使用多态,必须要创建它的子类对象才行,子类接口也是不能直接创建对象的(List接口); 其中wihle的条件表达式就是iterator迭代器操作步骤的第二步; 用循环语句时候, 已知集合的长度即有多少元素 阅读全文
posted @ 2019-04-04 18:07 wmqiang 阅读(206) 评论(0) 推荐(0)
摘要:顶层接口的抽象方法为共性抽取的方法,即所有子类都有都可以用; 创建集合,泛型使用字符床类型String类型, 其中,new的对象,打印对象名应该是一个存储在栈内存中的地址值;这边打印出来是空即 [ ] ,说明在ArrayList中覆盖重写了toString方法; 集合转换成数组: 其中,数组也有索引 阅读全文
posted @ 2019-04-04 17:37 wmqiang 阅读(673) 评论(0) 推荐(0)
摘要:其中,java中变量存取数据,数据内容可以改变; 数组长度固定,创建一个数组的时候长度就已经固定,当存储多个同种类型的变量时,用数组,数组可以存储基本数据类型,也可以存储对象,但必须是同种类型; 集合只能存储对象,但可以是不同类型的对象; 如ArrayList<Student><String><In 阅读全文
posted @ 2019-04-04 16:52 wmqiang 阅读(156) 评论(0) 推荐(0)
摘要:new创建对象(调用构造方法), 其中,成员方法是void返回值类型时候,只能写return; 作用是结束方法执行,释放栈内存; 重载的有参的构造方法是方便在创建对象(就是调用类的构造方法)的时候将已有参数直接赋值,方便简洁,后面要获取或者修改还是需要点set/get方法 不同的创建对象的构造方法: 阅读全文
posted @ 2019-04-04 15:23 wmqiang 阅读(127) 评论(0) 推荐(0)
摘要:接口作为方法的参数或返回值,源码可知,List为一个接口,ArraryList是的它的实现类: 其中,addNames方法中,入参和返回值都List接口,入参是多态的,编译看左,运行看右(访问成员方法); 访问成员变量时候,编译看左,运行还看左; 阅读全文
posted @ 2019-04-04 14:27 wmqiang 阅读(1817) 评论(0) 推荐(0)
摘要:声明定义的接口: 主体类: 其中接口作为成员变量,在这个主体类的成员方法中调用了这个接口的抽象方法,会自动找到这个这个接口实现类的覆盖重写的方法,避免多个实现类不同的覆盖重写,所以如果用实现类类实现的话都是直接传参该实现类就行; 其中,用实现类的时候,入参为接口的时候直接传入它的实现类,jvm会自动 阅读全文
posted @ 2019-04-04 14:09 wmqiang 阅读(1347) 评论(0) 推荐(1)
摘要:声明定义一个类的时候,成员变量的类型经常有int,String等,其实看源码知道String也是一个类: 说明是可以用类作为成员变量的; 其中,构造方法用于创建对象时候调用,new的时候jvm默认调用,可以直接new无参的(人),也可以直接new有参赋值的(小明——身高体重等); 类作为成员变量时候 阅读全文
posted @ 2019-04-04 13:53 wmqiang 阅读(1956) 评论(0) 推荐(0)
摘要:匿名内部类, 其中,可以通过创建实现类的对象来调用其覆盖重写的方法,也可以用匿名内部类的方式,new 接口名() 后面的大括号内容是匿名内部类; 其中,其中问题第一点,实现类可以创建对此有多个对象产生,一个匿名内部类(没有类名 class className)只能创建一个对象,要多个只能写多次匿名内 阅读全文
posted @ 2019-04-04 13:46 wmqiang 阅读(176) 评论(0) 推荐(0)
摘要:其中,在调用时候,也是只能通过这个局部内部类的所属方法来调用它: 小结类的权限修饰关键字: 局部内部类访问其所属方法的局部变量,需要使用final关键字修饰,这边final可以不写,写了即为常量,只要变量只赋值一次,没有进行重新赋值即更改,也为常量,局部内部类才可以访问: 其中,明显堆内存的创建出来 阅读全文
posted @ 2019-04-04 00:02 wmqiang 阅读(303) 评论(0) 推荐(0)
摘要:成员内部类意思就是外部类中声明定义了一个内部类: 咋声明定义: 编译后生成的字节文件.class: 所以我们自己声明定义类的时候类名不要使用$; 咋的调用内部类: 访问重名的变量: 阅读全文
posted @ 2019-04-03 16:54 wmqiang 阅读(178) 评论(0) 推荐(0)
摘要:文字不重要,看图 阅读全文
posted @ 2019-04-03 16:26 wmqiang 阅读(200) 评论(0) 推荐(0)
摘要:final 不可变的; 其中,修饰类时候,该类不能被继承, 没有子类,每个类都必有父类(祖宗类Object类),它自己内部成员方法可能是覆盖重写了其父类的方法; 修饰方法时候,表示所修饰的方法不能被子类覆盖重写; 修饰局部变量时候:只能赋值一次,不然编译报错: 其中,等号左边引用类和对象名是进入栈内 阅读全文
posted @ 2019-04-03 16:16 wmqiang 阅读(138) 评论(0) 推荐(0)
摘要:其中,为传递和使用的匿名对象,即创建了对象,但是没有引用类和对象名来接收; 电脑类中的操作usb的成员方法中,要向下转型,毛主席讲的具体问题具体分析,不同的设备有不同的操作: 阅读全文
posted @ 2019-04-03 15:41 wmqiang 阅读(200) 评论(0) 推荐(0)
摘要:其中,继承和接口实现都可以看成是java的三大特性之一的继承; 继承时候,访问成员方法是 等号右边new的是谁就用优先考虑谁的方法,没有再往上找; 访问成员变量是 等号左边引用的是谁就优先访问谁的成员变量,没有再往上找; 成员变量不可以覆盖重写,就看你有没有,且都是只能向上找; 即多态 的访问成员变 阅读全文
posted @ 2019-04-03 14:40 wmqiang 阅读(131) 评论(0) 推荐(0)
摘要:super关键字: this关键字: 栈内存和堆内存和方法区内存分析: 其中,new出来的即对象都在堆内存区; main方法先进栈; 方法区中 [[ super_class ]]是编译器生成,代码表现为extends; 栈中 Zi zi 保存的 地址值; 堆中创建对象时候先执行完父类的构造方法,在执 阅读全文
posted @ 2019-04-02 19:56 wmqiang 阅读(156) 评论(0) 推荐(0)
摘要:黑马课程学习记录: 个人理解也可以看成一个类;源代码还是.java,编译后的字节文件还是.class 抽象类中可以含有普通成员方法,但是有抽象方法的必须是抽象类或者接口, 接口中只能含有抽象方法: 创建实现类对象使用接口: 修改了一个已经被实现并且它的实现类各种投入使用的情况的接口类,类名符号 I, 阅读全文
posted @ 2019-04-02 18:23 wmqiang 阅读(751) 评论(0) 推荐(0)
摘要:发红包案例: 其中,方法三要素,返回值类型Object>String 和方法名称是必须的,参数列表可以无参; public>protected>(default)>private 方法权限; 继承时,子类覆盖重写的方法的返回值返回必须小于等于父类,方法权限必须大于等于父类; ArraryList<I 阅读全文
posted @ 2019-04-02 18:04 wmqiang 阅读(212) 评论(0) 推荐(0)