庄茹涵吧 关注:7贴子:650
  • 7回复贴,共1

#肉虫老师的biu课堂#第三课——说多了都是类的java

取消只看楼主收藏回复

来来来,乐宝宝的java之旅正式起爬了~~~~~


IP属地:浙江1楼2017-03-04 22:26回复
    要对着代码看昂~~


    IP属地:浙江2楼2017-03-04 22:28
    回复
      1、文件读写(乐宝夯的地儿)
      首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。
      通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了。
      接下来需要解读成乙方可以理解的东西既然你使用了FileInputStream()。
      那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据解读完成后要输出呀。那当然要转换成IO可以识别的数据呀。那就需要调用字节码读取的方法BufferedReader()。
      同时使用bufferedReader()的readline()方法读取txt文件中的每一行数据其实在这个过程中可以看到,“拿文件”、“读文件”这些操作都是一个过程,实际上可以用一个通顺的逻辑去表示这个过程,而严格面向对象的Java就非得搞好多个类去用,这是设计者的初衷就是用严格面向对象的思路,今后会遇到很多这样的,各种new。。。所谓面向对象OOP,就是要站在类,类的变量,类所做的事(方法)的角度去考虑问题,把一个“过程”抽象成一个“东西”。
      就刚刚实践的例子,一个InvertedIndex类,本来它只是有一个main函数去运行要做的事的过程,但这个类要提供给另外一个类用,于是就有她的眼睛words,她的鼻子doc_lists两个变量,有install这个方法去化妆。实际上BooleanSearch类在InvertedIndex有没有化妆都可以用她的鼻子和眼睛(具体要用来干嘛咱不关注),但出于自己的需要,它会要求InvertedIndex先画个妆。
      由此可见,BooleanSearch是个颜控直男。


      IP属地:浙江3楼2017-03-04 22:30
      回复
        2、接口类与implements
        java的接口可以理解为一系列方法的集合,实际上它不是类,只是与之相似,它没有除静态变量和final变量(之可以查查这个)外没有成员变量也没有构造方法,它的所有方法都是抽象的(不过它的方法声明的时候是隐式的,就是我们不用自己加上abstract,它相当于默认有了)。
        举个例子,我们常用的ArrayList,就是实现了List接口的一个类,在这个接口下还有Vector,LinkedList等类。一个接口无法实例化,List a = new List()是无法编译的,通常的用法是List a = new ArrayList()这样new一个实际的类。一个类如果实现了这个接口,就必须定义接口中的所有方法,不过这个类是抽象类的话就不用。
        java俩个相似的概念就是,接口和抽象类。接口的声明是public interface A,一般说实现一个接口,即class B implements A。抽象类的声明是public abstract class A,一般说继承一个抽象类,即class B extends A。
        其实这俩要老放在一起比较或者背他们的区别本来就是很外行的,接口只是与类长得像,它是一套不同的机制。抽象类的本质是个类,比方说“图形”,它有它的属性面积,周长,也有它的方法求面积,求周长,而“圆”,“正方形”这些的就继承了“图形“,包含而不只有它的所有变量和方法,并且各有所异。
        而接口就是一堆方法集合,它不知道自己是什么只知道自己会做什么(嗯,中二病)要注意,java的类是不能多继承的,就是一个类只能继承一个父类;但接口不是类,所以接口可以多继承,类也可以实现好几个接口所以面试题会这么考。


        IP属地:浙江4楼2017-03-04 22:30
        回复
          3、String的处理,相加,split
          这个就是强大的String的用法了,实际上切分split,取字串substring,替换replace都是很python的想法,从逻辑上就能感觉到它们很耗效率。String的话更多的还是和StringBuilder和StringBuffer一起讲比较好,java最脑壳疼的就是说多了都是类


          IP属地:浙江5楼2017-03-04 22:30
          回复
            4、排序
            这里我们用到了一个奇怪的用法,就是直接定义了一个大大的class,实例化一个它的类丢到了参数表里。所以说java最爱玩儿这套,我偏不要你的变量,偏不要你的过程,我就只认类,只要类,说多了还是类。这种写法以后会很多,比如很多监听事件的业务就会implement一个监听器Listener加到参数表里去。


            IP属地:浙江6楼2017-03-04 22:31
            回复
              5、java的ArrayList和范型
              java里面有个神奇的类,叫Collection,这货是个接口,它的下面有Set,List, Map接口,即集合、数组、映射,这俩接口下面就有implements这些接口的各种类比如HashSet,LinkedList,Vector,ArrayList,HashMap吧啦吧啦。
              关于ArrayList的用法比较灵活,因为是个写好的类,所以能想到增删改查加减什么的基本都有实现,可以现用现查,有时间可以看看源码实现。这里主要有两个概念,范型和线程安全。
              线程安全因为代码里没用到所以先不着重讲,提一下,比方说我有一个ArrayList a= {1,2,3},我同时开了三个并发的线程,每个线程让每个值加一for(int i=0;i<3;i++){a[i]++;},我期望的目标当然是a = {4,5,6},但很可能我两个线程同时读了a[0]=1,同时a[0]++并写入,最终a[0]=3。
              线程安全就是当一个线程操作一个内存中的变量的时候会把它锁上,别的线程无法操作,这样就不会发生冲突。嗯,ArrayList不安全。
              范型是C++里就有的一套概念,就是<>里面的东西可以是任何类型,术语“参数化类型”,这个在类或者方法定义的时候就写好。
              比如class A<T>{ public T bianliang;public add(T canshu);}
              这样T就是一个类型变量,可以在实例化类的时候灵活指定


              IP属地:浙江7楼2017-03-04 22:31
              回复
                哟西,就着代码使用这部分不会那么糟心。只是一道题就把好多常用的东西搞定鸟,说明乐宝的悟性还是很可怕的~~~~~~课后作业就是,把代码优化优化,最好是定义一个类把单词string,频次int,文章list都放里面,因为类本身就是个符合结构体嘛~~~


                IP属地:浙江8楼2017-03-04 22:33
                回复