20165220 Java第六周学习总结

教材学习内容总结

  • 正则表达式:正则表达式是一个String对象的字符序列,该字符序列中含有具备特殊意义的字符,这些特殊字符称做正则表达式的元字符。
  • 链表:由若干个称做结点的对象组成的一种数据结构,用于动态的减小或增长数据项。
  • String类是final类,也即意味着String类不能被继承,而且它的成员方法都默认为final方法。在Java中,被final修饰的类是不容许被继承的,而且该类中的成员方法都默认为final方法。
  • String对象:可使用String类声明对象并建立对象,例如:String s = new String("we are students");
    String t = new String("we are students");
  • 堆栈对象的建立以及压栈、弹栈的操做等
  • 链表:由若干个称做结点的对象组成的一种数据结构,用于动态的减小或增长数据项。
  • 获取堆栈顶端的数据,但不删除该数据: public int search(Object data);
  • 使用String类调用format方法对数字进行格式化;
  • 使用Date及Calendar处理和日期、时间相关的数据;
  • 泛型(Generics),其主要目的是能够创建具备类型安全的集合框架,如链表、散列映射等数据结构。
    可使用“class 名称<泛型列表>”声明一个类,为了和普通的类有所区别,这样声明的类称做泛型类,如:
    class People其中People是泛型类的名称,E是其中的泛型,也就是说咱们并无指定E是何种类型的数据,它能够是任何对象或接口,但不能是基本类型数据。
  •  java.lang.String类使用了final修饰,不能被继承。Java程序中的全部字面值,即双引号括起的字符串,如"abc",都是做为String类的实例实现的。String是常量,其对象一旦构造就不能再被改变。换句话说,String对象是不可变的,每个看起来会修改String值的方法,实际上都是创造了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。String对象具备只读特性,指向它的任何引用都不可能改变它的值,所以,也不会对其余的引用有什么影响。可是字符串引用能够从新赋值。java字符串在内存中采用unicode编码方式,任何一个字符对应两个字节的定长编码,即任何一个字符(不管中文仍是英文)都算一个字符长度,占用两个字节。
  • 常量池(constant pool)指的是在编译期被肯定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。Java为了提升性能,静态字符串(字面量/常量/常量链接的结果)在常量池中建立,并尽可能使用同一个对象,重用静态字符串。对于重复出现的字符串直接量,JVM会首先在常量池中查找,若是常量池中存在即返回该对象。
  • String、StringBuffer和StringBuilder的区别

    1.对象的可变与不可变html

      String类中使用字符数组来保存数据,由于有“final”修饰符,因此string对象是不可变的。以下:java

    private final char value[];git

      StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存数据,这两种对象都是可变的。以下:正则表达式

        char[] value;数组

    2.是不是线程安全安全

      String中的对象是不可变的,也就能够理解为常量,因此是线程安全数据结构

      AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操做,如expandCapacity、append、insert、indexOf等公共方法。多线程

      StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,因此是线程安全的app

    3.StringBuilder与StringBuffer共同点框架

      StringBuilder与StringBuffer有公共的抽象父类AbstractStringBuilder。

      抽象类与接口的一个区别是:抽象类中能够定义一些子类的公共方法,子类只须要增长新的功能,不须要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。

      StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。

    若是程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。

     

代码调试中的问题和解决过程

在编译的时候出现了这个错误提示;

解答:检查了代码没有任何问题出现,参考以前发生过的错误,我首先分析了缘由,这应该是须要多个文件共同编译致使的。随后我查阅资料并询问同窗,找到了一种办法,就是将相关的文件加以相同的前缀,而后统一编译、运行。就好比E9_1 E9_2 E9_3,而后用命令javac E9*.java来进行编译运行。虽然使得类名没意义,可是能解决问题。能够在此基础上再寻求更好的解决方案。

代码托管

上周考试错题总结

错题1:

父类中有个public void fight(),子类中有个public void fight( Weapon w),这两个方法的关系是Override.

A.true
B.false
解析:子类重写的方法,方法名字、参数个数、参数类型和父类的方法彻底相同。这里是重载.

错题2:
下列关于abstract关键字的说法,正确的是
A.可使用static修饰abstract方法。
B.非abstract类中不能够有abstract方法。
C.不能使用new建立abstract类的对象。
D.不容许使用final和abstract同时修饰一个方法.
E.可使用public abstract void eat(){};来声明抽象方法eat()。
F.抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。
解析:5.9节。A项:abstract关键字不能应用于static、private或final 方法。E项:不能有方法体。

感悟:

这周的内容比前两周明显多了很多,并且是过去没有接触过的新知识和新概念,理解起来须要必定的时间,编写代码也要一步一步地努力提升。我对这些新知识如今还掌握得不够熟练,但愿多花时间敲代码后可以熟练应用。我以为课前预习是很是有必要的,若是不及时掌握那么会被落下不少不少,跟着大部队一块儿前进才是最好的,结对学习也初次体验了乐趣,相信之后会愈来愈好!

参考资料

《Java学习笔记(第8版)》学习指导

相关文章
相关标签/搜索