---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

毕向东 Java基础视频教程17天10集合(Collections sort)

1.  当不需要保证元素唯一性,并且又要对元素进行排序时,就可以使用Collections的sort()方法对List集合中的元素进行排序。

2.  问题:为什么Collections的publicstatic <T extends Comparable<? super T>> void sort(List <T>list)为什么是extends 而不是implements

3.  作为判断的条件Comparable<>后面还加泛型,是因为不想传入进来的List中的对象在implements Comparable的时候没有泛型,这样在定义对象时又增加了向下转型的麻烦。为了代码整体的简洁性,在Comparable后面就加了泛型限制。

4.  当Collections调用sort()方法时只需要往里面传入一个list,然后虚拟机会根据参数的条件去判定你传入的这个list符不符合上面的参数条件。

5.  当题目限定一个比较条件时,往往还隐含这一个次要比较条件。比如按字符串长度进行比较,往往暗含按自然顺序比较。

毕向东 Java基础视频教程17天11集合(Collections max)

1. max public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll),对于Collection<? extends T>,Collections的泛型是T或者T的子类对象,但首先要搞清T    是什么,根据左边知道T就是一个具备比较性的对象,所以Collections里的元素要么是具备比较性的对象,要么是具备比较性的对象的子类对象。

2.从语法上可以把子类接口传给父类接口,实际上我们知道是吧子类接口的子类对象传给子类接口的父类接口。

3.Collections调用max()需要传入一个集合

毕向东 Java基础视频教程17天12集合(Collections binarySearch)

1.  Collections的binarySearch()二分搜索法,折半查找。因为返回的是个角标,所以只能传入List.

2.  记住二分搜索法的常见代码max min mid(脚标),还要考虑当你要搜索的这个对象不在List集合中,return 一个负值,正常的话返回的是该对象的脚标。

1

3

5

7

8max

9min

3.  经过证实:当List中不存在这个对象时,插入点的位置就是min

4.  注意:使用binarySearch()方法的前提是这个List已经通过sort()方法进行了排序,不然的话不能使用binarySearch(),因为该方法只针对有序的元素序列进行搜索。

5.  binarySearch(List<>, Comparator<>)里的Comparator并不是用来对List里的元素进行排序,而是对List里的脚标为mid的对象和要寻找的对象之间提供比较的方法,因为这个方法只存在于自定义的比较器对象中,所以必须把这个对象传进来才能使用compare()方法。注意:在使用该方法之前也必须调用sort(List<>, Comparator<>)进行排序。

毕向东 Java基础视频教程17天13集合(Collections 替换反转)

1.  Collections。2()可以讲List里的所有元素替换成指定元素。

2.  replaceAll(List<>,oldValue, newValue),将List中的某指定旧元素全部替换为指定的新元素。

3.  Collections。reverse(),将List集合中的元素进行反转。

毕向东 Java基础视频教程17天14集合(Collections reverseOrder)

1.  往TreeSet中存的元素必须具备比较性,因为元素往TreeSet里面存的时候就会按照大小进行排序。

2.  倒序输出的时候可以在比较器里的顺序时String s1,String s2,但是return s2.compareTo s1反过来比较就行了。

3.  Collections。reverseOrder()它返回一个比较器,该比较器强行逆转了实现Comparable接口的对象集合的自然顺序。

4.  Collections。reverseOrder(比较器) 返回一个对该比较器进行逆转的比较器

毕向东 Java基础视频教程17天15集合(Collections Synlist)

1.   问题:静态方法只能访问静态内部类。静态随着类的加载而加载,这个加载是在什么时候加载的类,编译,运行?弄懂静态访问规则

2.   问题:为什么集合的添加和删除必须放在同一个锁里面,没有锁会造成什么情况。

3.   Collection的swap(List,index1,index2)将List集合中的两个脚标上的元素进行置换。

4.   Collections。shuffle(List)可以对List的元素重新进行随机排列。无返回值,就是对原List进行的操作。

毕向东 Java基础视频教程17天16集合(Arrays)

1.  集合和数组都有二分查找。

2.   Arrays。toString([]),是把数组中的每个元素转换成了字符串,而不是把数组中的所有内容一起变成一个字符串。然后通过【】和间隔字符组成一个大的字符串。这样就是字符串表现形式。

3.   把数组转化成List集合的好处,数组的方法有限,转换成List集合后就可以使用集合的思想和方法。

4.   数组转换成List集合之后,不能在使用增删方法,因为数组的长度是固定的,转换成的List集合的长度也是固定的。

5.   如果数组中的元素都是对象,那么在Arrays.asList()时,数组中的元素都可以转化成集合中的元素。如果数组中的元素是基本数据类型,再转换成List的时候,会把整个数组作为集合的元素。所以集合中不止可以装对象,也可以装数组。

毕向东 Java基础视频教程17天17集合(集合变数组)

1.  集合转成数组,集合。toArray(T[]),你想把集合转换成一个什么样的数组,那就new一个这样类型的数组。数组的长度就是集合的长度=集合。size().

2.  调用哪个方法就要传入相应的参数,传入参数不是把参数的规定写一遍。

3.  集合转化成数组是为了限定对元素的操作。不需要再进行增删了。

毕向东 Java基础视频教程17天18集合(增强for循环)

1.  List集合有两种取出方式,一种是迭代器,一种是get方法,Set集合只有一种取出方式,迭代器。

2.  因为Collections extends Iterable,所以可以通过高级for循环对集合进行遍历输出,只是高级for循环不能对集合本身进行任何操作,只是能够输出。相对于Iterator的遍历简化了书写。

3.  迭代器在遍历的过程中可以对集合进行remove操作,ListIterator在遍历的过程中可以对集合进行增删改查的操作。

4.  高级for循环对数组也可以同样使用。

5.  传统for和高级for的区别,高级for具有局限性,他必须有一个被遍历的目标。输出数组时还是suggest传统for,因为它可以定义角标对角标进行操作。

6.   问题:Set<Map.Entry<String, String>> s=一个Map集合。entrySet();左边的Set集合里面装的是接口,右边的Set集合里面装的一个个键值队映射关系对象,问这个对象的类名是什么。泛型不是应该一一对应的吗。如ArrayList<Person>就不能用ArrayList<Student>去赋值,只能用ArrayList<Person>.就像左边泛型<Person接口>右边是<Student>

7.   高级for不支持Map集合。

8.   Map集合的遍历,还是先通过keySet()得到一个键的Set集合,然后用高级for循环对Set集合进行遍历。或者先通过entrySet()得到一个映射关系的Set集合,然后通过高级for循环对Set集合进行遍历。

毕向东 Java基础视频教程17天19集合(可变参数)

1.  通过可变参数就省去了每次建立一个数组的麻烦,直接传递个数不等的参数进去。

2.  可变参数要定义在参数列表的最后面,以防止定义在前面时,把所有传进来的参数都封装到数组中去。

3.  。。。可以就看做数组

毕向东 Java基础视频教程17天20集合(静态导入)

1.  静态导入就是导入静态成员。

2.   在一个类的内部调用方法就直接调用。

3.   Arrays有toString(),Object也有toString(),当我们在一个java文件中import staticjava.util.Arrays.*;虚拟机认为单独的toString()就是Object的toString(),要想使用Arrays的toString(【】),就必须把Arrays带上,变成Arrays.toString([])

4.   import后面跟static时则后面导入的一个类的静态成员。没有static时导入的就是包中的类。

毕向东 Java基础视频教程18天01 其他对象(System)

1.  类名就可当做对象来看待。

2.  System.out得到的是PrintStream(它是一个对象), 既然是对象那就调用其println()方法。

3.  java认为数组也是对象。

4.  System类是系统类,用来描述系统环境,系统环境在java虚拟机启动的时候会加载一些默认的系统属性信息。

5.  当集合和Map没有泛型的时候所有的原来写的泛型都是Object。

6.   Properties它是Hashtable的子类,也就是Map的子类,所以Properties也是个Map,只不过Properties这个Map里面的key,value都是已经确定了内容的String,String,不需要往里面添加什么内容。因为Propeties里面是已经确定了内容的String,String,所以不能在Properties后面加泛型。

7.   对于带有泛型的Map再掉用keySet()时,返回的就是Set(K),但是对于像Properties这样没有泛型的Map, 泛型的地方全部改成Object,也就是返回Set(Object obj),也就是把key装进Set集合的时候就自动向上转型为Object了。

8.   Map的get(Object)方法,不管你的Map是带有泛型还是不带有泛型,传进来时都自动向上转型成Object了。不过得到的东西,根据Map有泛型和没泛型区别对待,如果Map有泛型,那么返回的就是V,如V是String,返回的就是String,但是如果Map没有泛型如Properties,得到的就是自动向上转型的Object

9.   对于带有泛型的Map调用get(Objectobj),即便是把key向上转型了,还是可以得到value.

10.           字符串就算是向上转型了,输出时照样输出。

11.           在系统中定义一些特有信息:Properties里面装的就是系统属性,所以要在系统中定义一些特有信息,就要往Properties里面装东西,使用System.setProperties(String key,String value)

12.           (系统)属性信息=属性+信息,System.getProperties()时得到所有属性信息的Map集合Properties,而System.getProperty(String key)得到的是一条属性的信息。

13.           获取一个键的value,如果没有这个键会返回null

14.           在jvm启动的时候动态的加载一些属性信息,运行java命令的时候jvm就会启动,所以在java的后面加上-D<name>=<value>

毕向东 Java基础视频教程18天02其他对象(Runtime)

1.  Runtme使用了单例设计模式,没有构造函数,保证了对象的唯一性

2.  Runtime叫运行时,作用:使java应用程序能够和运行时的环境相连接。

3.   在java文件中,反斜杠\是转义字符,要表示文件路径用双反斜杠\\.

4.   Runtime的非静态方法exec抛出IOException,所以要先处理异常。

5.   问题:确认自己对于调用抛出异常方法就必须处理或抛出的理论的正确。

6.   抽象类Process为什么没有子类对象,因为java运行程序一旦被执行就会产生进程,而这个进程是调用底层资源创建的,不需要我们去创建一个进程对象。

7.   特殊情况:抽象类Process有属于自己的对象,但是这个对象是调用底层资源创建的,不是我们区创建的,所以才把Precess定义成抽象类,并且也没有子类对象。所以Process可以看成对象。调用exec()返回的就是一个Process对象。

8.   当我们调用Runtime的exec()方法,执行了一个子进程,返回了该子进程,该进程调用destroy()方法,杀掉该子进程。

9.   子进程,只是相对于父进程而言,它自己就是个进程。

10.           执行可执行文件,打开相应程序。

11.           调用Runtime的exec(”notepad.exe xxx.java”)中间是空格不是逗号

毕向东 Java基础视频教程18天03其他对象(Date)

1.  问题:是不是输出对象的时候都会默认自动调用toString()方法。如果是StringBuffer输出时还需要调用toString()吗?难道不会自己调用吗

2.  DateFormat和SimpleDateFormat都是java.text里的类 ,而Date是java.util里的

3.  SimpleDateFormate中12小时制小时用hh表示,24小时制小时用kk表示。

毕向东 Java基础视频教程18天04其他对象(Calendar)

1.java中对对象或者接口进行申明时就有了名字,之后用名字的时候就只能用名字,不能再带上前面的对象或者借口。如String s=new String("abc");

Stringb=String s;这样的语句是不允许出现的。

1.  问题:Map<String,String> m=newTreeMap<String,String>();

sop(m);

public static void sop(Object obj)

虽然m指的是TreeMap,但是TreeMap已经向上转型了,现在m是Map接口,能把一个接口传给Object

3.Student m=new Student,Map<String,String> m=new TreeMap<String,Stirng>(); Person m=newStudent();对于m是什么,能看左边就看左边,看不了左边就看右边。

4.抽象类也可以存在对象,只不过这个对象不是我们创建了,而是已经创建好了的,我们只能去获得这个对象并使用,但不能自己创建。这个时候都可以把这些抽象类看做对象。

5.当调用一个方法返回的是一个接口或者抽象类时,往往返回的是该接口或者抽象类的子类对象。 比如这个抽象类是Calendar,返回一个Calendar,其实返回的就是Calendar的子类对象GegoriaCalendar,这时我们也可以把GregorianCalendar叫做抽象类Calendar的对象。

6.对一个抽象类谈对象往往说的就是他的子类对象,或者就是该抽象类的对象,但是该对象不是由我们创建的。

7.把子类对象传给抽象父类。Calendar c=Calendar.getInstance();

8.计算机计算月份是从0开始计算的,1-12月就是0-11月。DAY_OF_WEEK=1,在外国人观念中星期一是一个星期的第一天。

9.类的属性不能单独使用,如果是静态的既可以用类名调用也可以用对象调用,如果是非静态的属性只能用对象调用。

10.字符和字符串的一个区别:字符是可以直接做算术运算的,字符串不行。比如字符‘年’,单独输出的时候就是年,但是如果sop(12+’年’),这时就会把‘年’换算成对应的Unicode数值和12做加法。

11.多态情况下,成员变量和静态方法,编译和运行都是看左边。

12.多态情况下,调用静态成员变量时,用父类名和子类名都可以,但是编译时看父类有没有这个属性,运行时也是运行的父类的这个属性。如:

Calendarc=Calendar.getInstance();

System.out.println(c.get(Calendar.YEAR)+"年"); 在这里用父类名调用静态属性YEAR书写更简便。

13.””和”空格”两者不一样前者装在数组里为空,后者装在数组里是空格

14.GregorianCalendar的set()方法里set(2002,2,3)这里的2是三月。

15.求某一年的二月有多少天,就把GregorianCalendar设置成概念的三月1号,然后用add()方法对日减去一天就是2月的最后一天。

16.求某一段时间的有效天数,通过循环和add()天数加一。

毕向东 Java基础视频教程18天05其他对象(Math-Random)

1.   Math。ceil()返回大于指定数据的最小整数值。

2.   Math。ceil()返回小于指定数据的最大整数值。

3.   Math.round()返回最接近于指定数据的long型整数。

4.   Math.pow(a.b)返回a的b次幂。double类型。

5.   Math.random()没有参数,得到的是0.0<=Math.random()<1.0之间的double类型的数。

6.   强转类型(int)(被强转的数)

7.   Random对象的nextInt(A)得到0到A之间任意一个整数。

毕向东 Java基础视频教程18天06  IO流(概述)

1.   IO流用来处理设备之间的数据传输。

2.   字符流:字符流的对象里面融合了编码表。要用那个编码表可以自己制定

3.   字节流的抽象基类:InputStream OutputStream。

4.   字符流的抽象基类:Reader Writer

5.   流按照操作数据分两种:字符流,字节流。

6.   流按照流向分为:输入流,输出流。

毕向东 Java基础视频教程18天07  IO流(FileWriter)

1.  IO流是用来操作数据的,数据的最常见体现形式:文件。

2.  创建FileWriter对象时,要到FileWriter的构造函数中初始化,而一调用该构造函数就会抛出IOException,因为传入的文件名前的路径可能有误。

3.  创建FileWriter对象时,会在指定目录自动生成一个空内容的文件,如果该目录下已有同名文件则对其进行覆盖。这个文件就是我们写数据的地方。

4.  FileWriter对象调用write(),将数据写入到流中,或者说写入到流对象的缓冲器中。

5.  FileWriter对象调用flush(),刷新流对象中的缓冲中的数据,并将数据送到destination.

6.  new FileWrite()就是创建了一个字符流。这个字符流可以通过write()往里面写入数据,然后通过flush()刷新这个流,将数据送到目的地。

7.  Window系统本身就可以写入数据,java能够往Windows系统中写入数据,就是java再掉用Windows系统中的写的动作,java本身是不能往硬盘中写数据的,因为Windows系统和Linux系统中写入数据的方式不一样。java在写入数据的过程中都是在调用Windows资源,所以写完之后一定要释放资源,必须调用close(),刷新并关闭此流。

8.  write() flush() close()方法都会抛出异常,调用时要么处理要么抛出。

毕向东 Java基础视频教程18天08  IO流(IO异常处理方式)

1.  调用一个抛出异常的方法,要么处理异常要么继续往外抛。处理异常的位置:谁调用的这个抛出异常的方法,就在谁的位置进行异常处理。因为谁调用的抛出异常的方法,这个异常就抛回给谁,所以谁的位置就是被抛回的异常现在存在的位置。

2.  异常一旦被处理了就会继续往下走。

3.  调用一个抛出异常的方法就必须对异常要么处理要么抛出,但不代表调用它,它就会抛出异常。出现了异常就抛出异常,没出现就不抛出喽。

4.  方法右上角写throws Excepion,并不就是抛出异常,确切来说是声明异常,声明异常表示可能会出现异常,如果有的话就将它抛出,没有就算了。所以看到方法右上角写throws Exception不代表就会抛出异常,那要看异常出不出现,异常都不出现你抛锚啊。

5.  几行代码前后关联的时候,如果执行第一行抛出了异常,后面的几行代码也就没有意义了,这时就把后面的几行代码一起放在try里第一行代码的后面。

6.  对于引用变量看左边还是看右边还是不看,不要刻意去规定,习惯怎样就怎样。

7.  创建一个对象包括:声明对象+new对象+赋对象,也可以吧声明对象和后面分开,先申明对象=null,赋null等于没赋对象。

8.  初始化失败,则对象不存在。

9.  熟悉IO异常的基本处理方式,从两个方面考虑,初始化成功和初始化失败。还要注意如果变量是定义在代码块内部,那这个变量就是局部变量,只在代码块内部有效。

毕向东 Java基础视频教程18天09  IO流(文件的续写)

1.  重载即使其他都一样,就是参数类型不一样。

2.  作为一个有责任心的programmer,碰到异常要积极处理,而不是往外抛。

3.  Windows软件中,换行符是\r\n   Linux软件中换行符是\n

4.  字符流用的是默认编码,默认编码就是系统编码,System.getProperties encoding=GBK该方法获取的就是系统编码。

毕向东 Java基础视频教程18天10  IO流(文本文件读取方式一)

1.Writer的子类创建的是字符写入流,Reader的子类创建的是字符读取流。

2.java再通过读取流读取数据时,调用的是Windows的读取动作,占用了Windows的资源,所以当读取完成时,要释放Windows资源,所以需要关掉读取流。

3.在FileReader中,对于文件本身的修改,不属于对源代码的修改,不需要再重新编译。仅仅是执行的东西变了,要重新执行。

4.调用一个抛出异常的方法,就在调用的位置进行异常处理或往外抛。

1. 问题:把一个int型的值传给sop()也可以的原因是自动装箱成Integer吗

6.在判断某个变量时前面不能加上类型。

7.注意:FileReader每一次调用read()方法得到的都是下一个字符。

8.Windows去读取的时候就要走硬盘了。

9.Windows在硬盘上存数据的时候都会有分隔符。硬盘上,在每一个文件结尾处都有一个Windows结尾表示——分隔符。当读到结尾处时,Windows会把这个标识符返回来,java判断到这个标识符后就返回-1.

毕向东 Java基础视频教程18天11  IO流(文本文件读取方式二)

1.把数组转化成字符串两个简便方式:第一。导入java。util,然后Arrays.toString(数组)

第二.newString(数组),注意newString时传入的数组可以是char[],但不能是String[]

2.read(char[])返回的是读取的字符数。当一个都没有读取到时就返回的读取字符数就为-1

3.问题:k=1024?

毕向东 Java基础视频教程18天12  IO流(文本文件读取练习)

1.  文本文件里面装的都是字符,文本文件的读取和写入用字符流。

2.  将读取的数据存入到数组中去时,假设被读取的数据很多时,那么每次读取的字符数,就受到字符数组的长度的限制,达到字符数组的长度时,本次读取就结束了,如果有循环,再进行下一次读取。

3.  当调用read()什么都没读到时,就会返回-1.

毕向东 Java基础视频教程18天13 IO流(拷贝文本文件)

1.  把字符写到流里面时,是可以累加的。

2.  copy文件时不建议读一个写一个,读一个写一个,效率低下。

3.  参数是一个int型的值,写一个int型的值传进去就好了。

4.  写在方法上的异常和方法内的异常,前者不需要new,后者需要,因为在方法上声明异常,标明异常已经存在于方法内,只是把它继续抛出去,方法内的异常如果不是自己产生的是需要我们自己去new的。

5.  文件读取流和文件写入流在close()要分开进行,不能放在一个try()里面,因为两条流关的时候一点关系都没有。但是如果写在一起,读入流关不了,写入流的关闭就无法执行。

6.   问题:if(fr!=null)写在try的代码块里面和外面有什么区别。

毕向东 Java基础视频教程18天14  IO流(拷贝文本文件图例)

毕向东 Java基础视频教程19天01  IO流(BufferedWriter)

1.  缓冲区的出现是为了提高流的操作效率。

2.  创建缓冲区之前必须要先有流。

3.  新建缓冲区,将缓冲区和流相关联,下面写数据,刷数据,都用缓冲区的方法,将数据写入缓冲区,刷新缓冲区将数据送入到指定文件。

4.  关闭缓冲区就是关闭了流。

5.  缓冲区在内存里面,一停电就释放了。

当数据比较多的时候,往缓冲区里面写一次,就刷一下,避免停电后数据全部释放,白写了半天。

6.  缓冲区里有一个newLine()对字符进行换行

7.  问题:调用字符输出流的write()把数据写入到流中,和用缓冲区调用write()把数据写入到缓冲区中有什么区别。写入到流中也没有直接就送入到文件,还不是先存放在流里面吗?怎么体现提高了流的操作效率。BufferedReader是个缓冲区还是字符流啊。

毕向东 Java基础视频教程19天02  IO流(BufferedReader)

1.  问题:缓冲区的两个read()和FileReader()的两个read()有什么区别。

2.  缓冲区BufferReader可以一行一行的读,readLine(),返回字符串,返回的东西只要不为null,就说明还在读取东西,如果返回的是null,说明已经读取完了。

毕向东 Java基础视频教程19天03  IO流(通过缓冲区复制文本文件)

1.  当BufferReaer bufr的bufr为null时,说明流不存在,并且相应的缓冲区也不存在,也就不需要去通过close()缓冲区去关闭流了。不为null时,说明流和缓冲区都存在,就可以通过close()缓冲区去关闭流了。

2.  输入流和输出流在关闭的时候没有任何关系,依附于他们各自的缓冲区在关闭的时候也没有任何关系,所以关闭的时候分别在各自的trycatch中进行。

3.  newline()是BufferWriter的方法,所以在缓冲区往缓冲区里write字符的后面,紧跟着就用缓冲区调用newLine(),在缓冲区里加上换行符。

4.  readLine()返回的只是回车符之前的字符,不带有换行符。

5.  两个流之间没有直接的关系,缓冲区调用readLine方法时,中转站就是其返回的String。

毕向东 Java基础视频教程19天04  IO流(readLine的原理图例)

毕向东 Java基础视频教程19天05  IO流(MyBufferedReader)

1.  问题:缓冲区占不占有Windows资源,缓冲区的close()是只关闭了字符流对象,还是连缓冲区自己也一起关闭了。

2.  问题:缓冲区中的read()flush() write方法是继承的Reader里面的方法,还是对FileReader,FileWriter里面的read flush write方法进行的封装。

3.   read()读到\r和\n都不会返回-1,而是当读到\r和\n之后没有内容时返回-1,或者直接一上来就读到空内容就返回-1.

4.   文本文件中的最后一行是没有换行符\r\n的。

毕向东 Java基础视频教程19天06  IO流(装饰设计模式)

1.当我们想要对对象进行功能增强的时候,就自定义一个类,将已有对象传入,基于已有的功能,提供增强功能,这个自定义的类

毕向东 Java基础视频教程19天07,08  IO流(装饰和继承的区别,自定义装饰类)

1.   装饰模式比继承模式要灵活,避免了继承模式的臃肿,而且降低了类与类之间的关系。

2.   装饰类因为增强了已有对象,所以具备的功能和已有的是相同的,只不过提供了更强的功能。所以装饰类和被装饰类通常都属于一个体系中。

3.   BufferReader是一个增强版的字符读取流,只不过在创建对象的时候要传入一个具体的非增强版的读取流,如FileReader,传入之后就变成了一个增强版的文件读取流。增强是因为带有缓冲区间,和普通的读取流相比采用了缓冲技术。

4.   问题:如果BufferReader也是一只增强的字符读取流,调用它的close方法去关闭的时候,实际上是调用的传进来的假设是FileReader的close,那是关掉了FileReader这条流,并没有关掉这只增强的流啊,我们不是已经创建了BufferReader的对象的吗?

毕向东 Java基础视频教程19天09  IO流(LineNumberReader)

1.   LineNumberReader是BufferedNumber的子类

2.   特有方法getLineNumber()  setLineNumber(A)设置为A则懂A+1开始。

毕向东 Java基础视频教程19天10  IO流(MyLineNumberReader)

1.  lineNumber++要定义在readLine()方法里,这样读一行就对行号+1;

2.  问题:老师再定义自己的MyLineNumberReader时为什么没有给lingNumber赋初值,然后就lineNumber++;运行也没有问题。默认的零值从何而来

毕向东 Java基础视频教程19天11  IO流(字节流File读写操作)

1.  字符流操作的也是字节数据,只不过里面有编码表。FileReader和Filewriter使用的是默认的编码表。这个编码表通过System.getProperties()可以获取。

2.  想要操作图片数据,就要用到字节流。图片也是一种文件,所以要找到和文件相关的字节输出流。

3.  问题:字符串调用getBytes()得到的是这个字符串的字节数组。

4.  问题:字符流走的也是字节,但是需要把字节临时存起来,字符流的底层使用的其实就是字节流的缓冲区。所以字节流才需要缓冲动作。

5.  问题:字节流为什么不需要刷新

6.   字节流没有指定具体换从区时,是不需要缓冲的。碰见一个字节就把这个字节写入到目的地去。中间不需要做任何转换。

7.   再用第二种方式去读取的时候,把read()的数据都存放到一个字节数组中去。

8.   字符数组和字节数组都可以通过newString()的方式转化成字符串。

9.   问题:字节数组

10.           问题:available得到的是嘛,

11.           字节输入流的available()要慎用,当文件过大时,available()得到的文件大小就很大,以此作为字节数组的长度new出来的数组就很大,很可能超过JVM的内存,出现内存溢出。

12.           虚拟机的内存空间是可以调整的,但是受限于自己计算机的内存。

毕向东 Java基础视频教程19天12 IO流(拷贝图片)

1.  方法同拷贝文本文件类似,只是要使用字节输出流和字节输入流。

毕向东 Java基础视频教程19天13 IO流(字节流的缓冲区)

毕向东 Java基础视频教程19天14 IO流(自定义字节流的缓冲区-read和write的特点)

1.  在传递的时候只要满足子类传给父类或本类传给本类,不用对象,接口,抽象类。

2.  char和字符是不同概念,char是一个数据类型,在java中代表用两个byte去存储一个字符,而字符不一定都是char类型的,也可以是byte型,比如byte i=’a’和char i=’a’都是合法的,前者中字符a用了一个8位表示出来,后者中字符a用了两个8位表示出来,就像int i=100, byte i=100都是合法的。用byte去存储数字的时候,就是用8个二进制位去存储的。

3.  问题:假如硬盘上有一个int型的数3,占有四个自己,通过字节流的read(字节数组),问在硬盘上读一个字节往数组里放一个字节,那这个3是不是就被放在四个数组元素里?如果是read()读一个就返回一个字节,返回的会是什么?

4.   问题:如果缓冲字节流的缓冲区就是缓冲区就是数组的话,那和一般字节流read(数组)又有什么区别的

5.  想取一个数的最低四位与上15,想取一个数的最低八位与上255

6.  十六进制的0xff是十进制的15

7.  问题:byte b=-1;b&255时,这里的255是默认为int型吗,然后b先自动提升为int型再和255进行&运算吗?

毕向东 Java基础视频教程19天15 IO流(读取键盘录入)

1.  System.out对应的是标准的输出设备——控制台

2.  System.in对应的是标准的输入设备——键盘。

3.  Systems.in的read()是一个阻塞式方法,没有读到内容就等。

4.  read()方法返回的是读取的字节,只不过,不过读取的是字母返回的就是字母的ASCII码值,如果读取的是数字,返回的就是该数字的byte类型前面加三个字节的0的int型值。

5.  \r的ASCII值是13,\n的ASCII值是10

6.  当在键盘上输入-1显示在控制台上时,System.in的read()方法没有把它当做数字,而是当做两个字符:符号和字符1

7.  结束System.in的read()从键盘获取的快捷键ctrl+c

8.  clear()方法是清空集合的。

9.  字符串和字符串缓冲区的长度都是调用length()

10.           一般来说调用read()返回的是读取的字节,而调用System.in的read()返回的是键盘输入的字符的ASCII码值。

11.           在键盘上输入字符后,只有按回车,read()方法才开始读取字节。但是如果没有循环的话只能读一次。不会说自动把键盘输入的全部读进来。

12.           toUpperCase()把字符串转化成大写。

毕向东 Java基础视频教程19天16 IO流(读取转换流)

1.获取键盘录入一行数据并打印其大写,其原理就是读一行数据的原理,也即readLine()方法。

2.BufferedReader()有readLine()而BufferedInputStream()方法没有readLine()方法

3.InputStreamReader用于操作字节流的字符流。可以将传入的字节流转换成字符流,然后再通过BufferReader将该字符流进行增强,从而使用BufferedReader的readLine()

毕向东 Java基础视频教程19天17 IO流(读取转换流)

1.  只要是字符流,只要是在write()就要刷。

2.  读取键盘录入的最常见写法:

BufferedReader bufr=new BufferedReader(newInputStreamReader(System.in));

该方法把System.in的读一行字符转化成了读一行字节

3.  把我们熟悉的字符串一行一行地以字节的方式存放到硬盘的方式

BufferedWriter bufw=newBufferedWriter(OutputStreamWriter(System.out));

通过转换流实现了

最后通过缓冲区的close()实现了对System.in.out流的关闭。

2和3连起来就是读取了一行字节元素,转成字符串以后又把这行字符串以字节的形式写到硬盘,或者以字节元素的形式写到txt文件或显示屏。

4.  BufferedWriter的write()是把字符先写在了缓冲区,然后刷走,经过一般的字符输出流进入指定文件。因为即便是BufferedWrite()在写,最终还是一般的字符输出流再和硬盘产生直接的联系。

5.  字节流输出时如果输出到txt文件或者屏幕上显示的是字节元素。

毕向东 Java基础视频教程19天18  IO流(流操作规律一)

1.  over用来结束read()的录入。

2.  获取文件里的内容和往文件里输出内容既可以用字符流FileReader FileWriter,也可以用FileInputStream FileOutputStream

3.  明确源和目的+是否是文本(决定字符还是字节)+明确操作对象(硬盘+内存+键盘或者 硬盘+内存+控制台) +是否需要提高效率

毕向东 Java基础视频教程19天19  IO流(流操作规律二)

1.FileWriter使用的是默认的编码,也即系统自身编码,通常GBK

2.文本数据用字符流去处理最简单。

3.把数据按照指定的编码表存在文件中,就要用到OutputStreamWriter,而要创建它必须传入字节流,并且这个字节流是直接和目的地沟通的,若目的地是文件,就用OutputSteamFile

4.装换流使用的时间:通常涉及到字符编码集转换时

5.英文不涉及编码转换,用的就是ASCII码表。

6.read()和readLine()是敲一次回车执行一次,不敲就一直等待,不取执行该方法。

7.当我们吧数据按照指定的编码表存入到文件中去时,想要读取这个文件,就必须使用含有相应编码表的流去读。FileReader使用的默认的GBK编码表,而如果文件使用的是UTF-8编码表就必须使用转换流并制定该转换流使用的编码表为UTF-8. 文件和流都是用码表。

8.通过使用UTF-8的转换流把数据存到文件中时,该文件使用的就是UTF-8编码表。

9.问题:字节流使用编码表吗?使用的是什么编码表。

毕向东 Java基础视频教程19天20  IO流(改变标准输入输出设备)

1.  over结束read()等待,让主程序继续运行到终止。

2.  System.setIn(), System.setOut(),可以在不改变System.in和System.out代码的前提下改变源和目的

毕向东 Java基础视频教程19天21  IO流(改变标准输入输出设备)

1.SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”)

毕向东 Java基础视频教程19天22 IO流(改变标准输入输出设备)

1.  System.getProperties()得到系统属性Properties,然后调用Properties的list(输出流),就将属性列表通过输出流输出到 指定目的地。

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>

黑马程序员 一步一步往上爬 学习毕老师java视频第17,18,19天相关推荐

  1. 黑马程序员 一步一步往上爬 学习毕老师java视频的第03,04天

    ---------------------- <a href="http://edu.csdn.net/heima" target="blank"> ...

  2. 一步一步往上爬 学习毕老师java视频的第01.02天

    ---------------------- <a href="http://edu.csdn.net/heima" target="blank"> ...

  3. 黑马程序员 学习毕老师java视频第14.15.16天

    ---------------------- <a href="http://edu.csdn.net/heima" target="blank"> ...

  4. 黑马程序员武汉2019新版前端与移动开发学习路线图(视频+工具+书籍+资源)

    一.2019新版前端与移动开发学习路线图---每阶段可掌握的能力及各阶段覆盖的关键字 二.2019新版前端与移动开发学习路线图---学习大纲及各阶段知识点 三.2019新版前端与移动开发学习路线图-- ...

  5. 黑马程序员--OC内存管理机制(上)

    ----------------------ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.内存管理机制--引用计数 1.什么是内存管理 ...

  6. C++学习从基础到高阶(基于黑马程序员教程)

    视频链接:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难(52个小时) C语言中文网:http://c.biancheng.net/cplus/ Visual Studio 2022 ...

  7. 【C++学习汇总】【黑马程序员】

    [C++学习汇总] 1 黑马程序员 2 深蓝学院 3 自发式收集学习 1 黑马程序员 [C++][第一篇][黑马 p84 - p105 ][引用][重载][类和对象-struct.class] [C+ ...

  8. 【黑马程序员西安中心】雄关漫步真如铁,而今迈步从头越

     六月流光,青春葱茏:红了樱桃,绿了芭蕉.回想起几年前的金秋九月,信心满满迈入大学,也曾踌躇满志,也曾理想远大;回想起找工作时的种种酸甜苦辣,一次次的碰壁让信心渐失,理想也越走越远;回想起工作中的苟且 ...

  9. 黑马程序员:福利来袭!网络安全斗鱼直播“录像+资源”大放送

      不知大家是否知道,就在上周五(8月5日),黑马程序员C++学院资深讲师冰哥和知名美女老师码小趣,为大家带来了一场关于网络安全的直播盛宴! 关于直播内容如下: 一.科普网络安全知识,手把手教大家怎么 ...

最新文章

  1. 【Live555】live555源码详解(六):FramedSource、RTPSource、RTPSink
  2. 第 5 章 Nova - 030 - Launch和Shut Off操作详解
  3. python项目主界面_python项目案例
  4. 监管落地,能否带来牙膏市场的日后繁荣?
  5. linux远程代码执行漏洞,Bash远程任意代码执行安全漏洞(最严重漏洞)
  6. 微服务架构的终极模式?
  7. 搞工程和搞电子的人摆摊能做什么?
  8. PhantomJS宣布终止开发
  9. rockycapture_RockyCapture航线规划软件介绍文档
  10. Flink入门训练--以New York City Taxi为例
  11. Java 线程分段查询数据,再整合排序
  12. 博弈论开发工具Gambit的Python包安装
  13. 【光学】干涉衍射仿真含Matlab源码
  14. 拼多多,是漏洞的损失?还是营销的手段?
  15. cortex系列处理器排行_谁有ARM Cortex-A系列(A53、A57、A73等)处理器性能分类与对比??...
  16. 网络游戏广告植入案例
  17. C#实现语音朗读功能
  18. 海科融通:关于降低商户银行卡刷卡手续费的公告
  19. 个人经典音乐收藏(五)love to be loved by you,Marc Terenzi
  20. 范美忠妻子:美忠是个好男人

热门文章

  1. 程序员小灰的漫画算法和知识总结,高品质强推!!!
  2. 第六届神经学与神经外科国际研讨会(NeuroConf-BT 2019)--12月泰国曼谷
  3. 如何在watchOS 7中的Apple Watch上设置和使用睡眠应用程序?
  4. 苹果sf字体_苹果 iOS 13 黑暗模式设计指南
  5. 基于天问51-Core自制开发WIFI模块连接MQTT巴法云平台-微信小程序显示温度数据
  6. Paddlehub创意赛---给人像增加背景
  7. 2-08 PHP_MySQL入门到精通教程I理论篇(上)下载
  8. Android 小红书图片裁剪框架,拍摄视频无法自定义拍摄时长
  9. python PIL + pyautogui 实现滑块验证 自动识别 滑动
  10. matlab提取伴奏原理,如何将音频里的伴奏提取出来