我的大三暑期培训(七月)

  • 7.18之前:
    简单记录下吧。6.30号考完结束。7.3号提前了一天来到了公司,安排住宿,交房租,所以一下子就没钱了。刚开始两个星期基本上都是在讲,对于我来说基本上都知道了。中间倒是做了控制台的2048和一个简单还丑的贪吃蛇,不过还是能动的。不过总的来说还是花了几天的时间,这应该是中间比较有意思的事情了。一直到今天7.18。之前说好的博客也没怎么写,想着今天交日报,所以就直接在博客写吧,毕竟更方便一点(其实也是自己现在不知道该干嘛了)。
  • 7.18:
    学习内容:巩固面向对象中的类,对象,属性,方法和引用,变量。自己学过也听过龙哥讲过,所以比较熟悉。
    1. 中间讲到了构造器中this(),必须在重载的构造器的第一行,不过感觉很少用,所以听到这里的时候才想起来。
    2. 重载函数如果输入的参数是不匹配的,则会向上转型,与最接近的重载方法去匹配。
    3. 有参构造函数都会去调用无参的构造函数。
    4. 关于this这个关键字,当成一个临时的虚拟出的对象,只是为了替代将来所有具体的对象。因为在构造整个类的时候,是没有对象的,this充当一个虚拟的对象。
    5. 还看了两个设计模式,一个是工厂模式,另外一个是抽象工厂模式。工厂模式:在不同的输入情况下,产生不同类的对象,从而能够生产出不同类的对象。知道了如何去实现工厂模式,但不知道工厂模式在实际中的应用,所以也就不能体会到设计模式的作用…
  • 7.19:
    学习内容:
    1. 如果子类继承父类,重写父类方法的时候,方法的修饰符只可以扩大访问范围,不能缩小访问范围。返回类型,方法名,参数列表都不能改变。例如父类方法的修饰符为protected,子类的方法只可以为protected和public,等等。
    2. 构造器的步骤:先分配内存空间,再默认初始化,最后显示初始化(如this.nose = 1)
    3. 打印一个对象的时候默认调用对象的toString()方法。
    4. 局部变量可以用final修饰,感觉用处不大。更普遍的用法是成员变量同时加上static 和final修饰符,使其作为一个常量来使用。
    5. 对于A a = new B();// B extends A:
      则a拥有的是A的特性,而不是B的特性。如果向上转型的话,a能够使用的方法只会有A中的方法,B中自己的方法则不能够被使用。但是如果重写方法的话会在B的对象空间中重新给个方法,所以a调用B中重写了A的方法时,会调用B自己中的方法,不重写就去调用的父类的方法。
    6. 封装的好处:目前看来我觉得主要是代码的安全性。(封装可以指将一个生活中的一类事物封装为一个类,对其属性进行访问限制,即用private来修饰属性。然后给外界一个可以访问的方法,如protected和public访问修饰符,还有getter和setter方法,这样外界能够对属性进行操作,但是不会知道是怎么实现的。举个例子的话,就如银行中的钱。你的账户可以对钱进行存钱和取钱的操作,但是你不能知道存钱和取钱的具体实现,不然你可以去更改存钱的具体实现,只要你调用存钱的方法,就将你账户的钱增加个100W。这样会造成数据的不安全,所以采用封装就能减少这样的不安全性。?)
    7. 子类每次调用构造方法的时候,都会在子类的构造方法中默认调用父类的无参构造方法,但是如果自己将super()显示写出来,且传给super参数,那么super(参数) 会去调用符合这个参数列表的父类有参构造方法。当然如果只显式写super()或者不写,那么只会调用父类的无参构造方法。
  • 7.20
    学习内容:面向对象的多态,关键字static
    多态就是在不同的命令下产生不同的反应。而实现多态,有很多种情况。一个类中的方法重载,子类重写父类的方法,还有一种A a = new B();// B extends A;,今天主要是最后一种情况。B的对象new出来之后,父类的一个引用指向子类的对象。这种相当于子类对象当作父类对象来使用。所以此时只具有A的属性和方法。今天讲的各种形式的多态都是在这个表达式的基础上扩展的。这种子类对象当作父类对象来使用,主要是能够提升代码的灵活性。一个父类下面可以有多个子类,当不确定将来的对象将会是哪一个子类的时候,用父类的对象来表示,就能够代表子类的很多个对象而不用去一个个判断对象是一个什么样的子类类型。
    然后就是static这个关键字。
    static修饰成员变量的时候,代表这个类的所有对象的公有属性。所有这个类的对象都能够去访问这个静态属性。在内存中也只存在一个值。当没有加上final修饰符的时候,所有的对象都可以更改这个值,所有对象同步这个更改的值。所以也会叫类变量。因为整个类中只有一个。
    static修饰方法时,作为静态方法。而静态方法只能访问静态变量,不能访问实例变量。一般方法都可以访问。
    A a = new B();// B extends A;这句话在内存中会是一个什么情况?new B()创建一个对象,同时会先去创建A的对象,A将引用给new B(),同时B会创建属于自己的属性和方法。创建完毕后B将这个对象的引用给a,这个时候A a中的A类型是什么意思。以前是int a,就在栈的旁边写一个int型,而这里加上A,也只写一个A?所以这里只需要理解a是一个A类型的引用?
  • 7.21
    学习内容:简单工厂的实现.枚举的实现.
    对于简单工厂,在工厂类里面写一个静态方法,根据需求给能够区分子类的参数,再用一个swtich
    来根据不同的参数去创建不同的子类对象.结果返回一个父类类型.这样就能做到想要什么类型的子类,传入相对应的参数就能生产出不同的子类对象.不过子类都要重写父类的方法,实现多态!!!
    枚举的实现?在一个Season类中,定义一个String类型的变量.将构造方法私有化,将Getter方法公开化,给出几个public static final String SPRING = new Season(“春天”).这样外界不能更改SPRING的值.也不能创建新的Season对象.不过有点不理解的是,打印Season.SPRING会打印他的引用,还要去使用getSeason()才能获得传入的参数.我记得枚举应该是可以直接用的.难道我代码写错了?
    最后,经过自己试验,好像是构造方法和getSeason()都是私有的.创建的代码应该是public static final String SPRING = new Seasons("春天").getSeason(); 实际使用的时候可以直接使用Season.SPRING.

  • 7.22 7.23 周末还是做不到。。。

  • 7.24
    学习内容:今天主要讲了抽象类和接口的知识。
    觉得抽象类和接口才是OOP多态的核心体现。抽象类是对整个类的一个抽象,而接口是对类的一部分,即行为的抽象。接口的抽象程度更高。

    重要的是抽象类和接口的区别:
    1. 抽象类只能够被继承,而接口只能被实现。
    2. 抽象类可以有非抽象方法,而接口只能有抽象方法。接口中可以有变量,感觉用处不大。变量修饰符为public static final. 方法修饰符为:public abstract。
    3. 印象中应该是有三点的。。。。。!
    抽象类不能实例化:因为抽象类里面还有方法没有实现。
    abstract不能和static,final连用.(static没有实例,没有方法去实现)
    抽象类可以没有抽象方法,但是没有什么意义.

    在接口里面,可以不用写public abstract修饰符.
    应用的时候接口需要实现所有的方法,所以用一个抽象类去重写这个接口,有的需要实现的方法里面为空,子类继承抽象类之后,可以有选择性的重写抽象类方法。

    其实今天看了几个设计模式了的。但是到了晚上留下的印象很浅。
    1. 翻了翻PDF,才发现自己看了策略和简单工厂,不过感觉策略和简单工厂有点相似。
    2.装饰模式: 这几天对装饰模式看了这么久还是有点不理解他的思想。等过完一遍再来看。
    3. 代理模式:感觉实现起来挺简单。将相同的行为抽取成一个接口。将代理者和发送者都去实现这个接口,但是在代理者模式中,所有实现的方法都是去调用发送者的方法.
    4. 工厂方法模式:在简单工厂的基础上,为了不违反开放-封闭原则,进一步产生了工厂方法模式。每个类都有一个工厂方法。如果增加一个类,则要对应的去增加一个对应的工厂类。
    5. 原型模式:主要是对象的浅复制,只复制引用,和深复制,将对象的引用和数据都复制。
    感觉今天虽然看了一天的设计模式,但是收获并不大,到了晚上基本上啥都不知道了。设计模式还是要多看几遍的,然后在实际的应用中感觉这种设计模式~~~

  • 7.25
    学习内容:枚举,异常,序列化。
    1. 枚举里面还可以有构造方法的,但必须是私有的。感觉枚举知道会用就可以了~~~
    2. 异常:一切异常都是Throwable类及其子类。刚开始还以为Throwable是一个接口。
    3. throw是抛出一个异常,如throw new FileNotFoundException("文件找不到"),一般和throws连用。throws 是告诉调用者这个方法可能会有异常,要去处理。
    4. 在finally中一般不要有return语句,不管之前有没有return,最后都会执行finally中的return 语句,这样可能返回一个不是期望的值。
    5. 子类重写父类的方法,当父类方法中抛出了一个异常,则子类中重写的方法抛出的异常不能比父类的异常大,重写的时候不会多出别的异常,只能是在子类中将异常处理,缩小异常的范围。
    6. 运行时异常是指非检查异常,JVM不会去检查这类异常,即使在程序主动去throw new NullPointerException("空指针"),这样也不会出现编译错误。这类异常常用的就是算术异常(除数为0),数组下标越界,空指针,类型转换(ClassCastException)等。而检查异常指的是在编译的时候就能检查的出的错误,除RuntimeException的异常都算是非检查性异常。
    7. 今天自己还看了一点序列化的知识。序列化可以将一个对象写入到流中,进而可以将对象用于传输或者保存。一个类可以通过实现Serializale接口来让类可以被序列化。用ObjectOutputStream或者ObjectInputStream来进行写入或者读入.如果要写入多个对象的话,现在已经实现了的是将其用一个当前类的类型数组来保存,写入的时候用oos.writeObject( Employee[] es)来写入,读取的时候,es =(Employee[])ois.readObject().
  • 7.26
     学习内容:常用类Object,String,Date
    1. Object类里面可以根据hashCode()方法来判断两个对象是否相等。toString()返回的是hashCode()的十六进制等。clone()方法必须实现Cloneable接口才能调用clone()方法。
    2. finalize,final,finally三者的区别:
       finalize()是一个方法,作为垃圾回收器回收时调用的方法。final是一个修饰符,修饰变量时变量的值不能被修改,修饰方法时方法不能被重写,修饰类时类不能被继承。finally作为异常捕获里面的一个关键字。意义为不管之前如何操作,都会执行finally块中的语句。
    3. Date类,代表日期类。经常和SimpleDateFormat连用来显示自定义类型的日期.使用SimpleDateFormat的实例.format(date)来自定义日期样式.
    4. String类,截取字符串substring(),连接字符串感觉用的多的是StringBuffer,用append()方法来添加到字符串的末尾。String中要注意的是equals()方法和==,总结出来的是==比较的是地址,相同的地址值才会相等,而equals比较的是内容,不管地址是否相同,只要内容相同就会返回true.()
    5. 在LInux下安装SVN的时候,建立了一个版本仓库,向里面加入项目之后,里面竟然不会显示项目?!!!还是我根本就没有弄好?!!!
       现在能够实现就是上传一个项目,然后在服务器上下载下来。基本步骤:
       创建仓库:
      sudo mrdir project
      svnadmin create project
      导入仓库中:
      sudo svn import -m “Second Import” /home/z/eclipse-workspace/MyJavaBasic file:///home/svn/myproject3
      下载下来:
      svn co svn://192.168.10.154/myproject3
      但是我只要一个文件更新,不创建项目的时候,好像还要折腾。弄了半天才弄出这么点东西,难受ing….
  • (转眼间就过了5,6天,很难受,接着写~~~)

  • 7.31的学习内容:复习了Collection,还有集合的工具类Collections的使用。对日历类Calendar的使用。
    Queue的使用:add,remove,element方法抛出异常,offer,poll,peek方法返回null.
    下午学习了一点关于awt的内容,Java GUI程序做了解就好。

你可能感兴趣的:(Java笔记)