20165231 2017-2018-2 《Java程序设计》第6周学习总结
教材学习内容总结
第八章
String类
Java专门提供了用来处理字符序列的String类。
String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用String类。
需要注意的是Java把String类声明为final类,因此用户不能扩展String类,即String类不可以有子类。
可以使用String类声明对象并创建对象,例如:String s = new String("we are students");
String t = new String("we are students");
用户无法输出String对象的引用:
Syste.out.println(s);
输出的是对象的实体。
例如:
char a[] = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; String s = new String(a,2,4); 相当于 String s = new String("贰叁肆伍");
String 类的常用方法:
- public int length():获取一个字符串的长度
- public boolean equals(String s):判断当前String对象的字符序列是否与参数s指定的String对象的字符序列相同
- public boolean startsWith(String s)
判断当前String对象的字符序列前缀是否是参数指定的String对象s的字符序列 - public int compareTo(String s):按字典序与参数s指定的字符序列比较大小。
- 5.public boolean contains(String s):String对象调用contains方法判断当前String对象的字符序列是否包含参数s的字符序列
public int indexOf (String str):String对象调用方法从当前String对象的字符序列的0索引位置开始检索首次出现str的字符序列的位置,并返回该位置。如果没有检索到,该方法返回的值是–1
public String trim() :得到一个新的String对象,这个新的String对象的字符序列是当前String对象的字符序列去掉前后空格后的字符序列。
符串与基本数据的相互转化
Java.lang包中的Integer类调用其类方法:public static int parseInt(String s)
可以使用String 类的类方法:
public static String valueOf(byte n) public static String valueOf(int n) public static String valueOf(long n) public static String valueOf(float n) public static String valueOf(double n)
对象的字符串表示
所有的类都默认是java.lang包中Object类的子类或间接子类。
Object类有一个public String toString()
- String 类的构造方法:
String(char[]);
String(char[],int offset,intlength)
分别用字符数组中的全部字符和部分字符创建字符串对象 - 将String对象的部分字符序列存放到数组中的方法:
public void getChars(int start,int end,char c[],int offset )
将String对象的字符序列存放到数组中的方法
public char[] toCharArray()
- String(byte[])用指定的字节数组构造一个字符串对象。
- String(byte[],int offset,int length) 用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。
- public byte[] getBytes()使用平台默认的字符编码,将当前String对象的字符序列存放到字节数组,并返回数组的引用。
public byte[] getBytes(String charsetName)使用参数指定字符编码,将当前String对象的字符序列存放到字节数组,并返回数组的引用。
第十五章
泛型
泛型(Generics),其主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。
可以使用“class
名称<泛型列表>”声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,如:class People<E>
其中People
是泛型类的名称,E
是其中的泛型,也就是说我们并没有指定E
是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据。
泛型类声明和创建对象时,类名后多了一对“<>”,而且必须要用具体的类型替换“<>”中的泛型。例如:
Cone<Circle> coneOne; coneOne =new Cone<Circle>(new Circle());
LinkedList
LinkedList
创建一个空双链表。
add(E obj) 向链表依次增加节点
LinkedList
public boolean add(E element)
向链表末尾添加一个新的节点,该节点中的数据是参数elememt指定的数据。
-public void add(int index ,E element)
向链表的指定位置添加一个新的节点,该节点中的数据是参数elememt指定的数据。public void clear()
删除链表的所有节点,使当前链表成为空链表。public E remove(int index)
删除指定位置上的节点。
-public boolean remove(E element)
删除首次出现含有数据elemen的节点。
-public E get(int index)
得到链表中指定位置处节点中的数据。public E getFirst()
得到链表中第一个节点中的数据。
-public E getLast()
得到链表中最后一个节点中的数据。public E removeFirst()
删除第一个节点,并返回这个节点中的数据。
链表
public static void shuffle(List<E> list)
将list中的数据按洗牌算法重新随机排列。static void rotate(List<E> list, int distance)
旋转链表中的数据。public static void reverse(List<E> list)
翻转list中的数据
堆栈
public E push(E item);
实现压栈操作public E pop();
实现弹栈操作。public boolean empty();
判断堆栈是否还有数据。public E peek();
获取堆栈顶端的数据,但不删除该数据。public int search(Object data);
获取数据在堆栈中的位置
代码调试中的问题和解决过程
教材中代码调试有问题先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,如果别人没有提出相同问题,可以编辑文档添加,然后把自己提出的问题复制到下面:
- 问题1:编译XXX.java文件提示使用了未经检验或不安全的操作
问题1解决方案:通过网上搜索得知
JAVA是一门安全性比较高的语言,它在编译之类要进行类型等一系列的检查。如果你使用了注解就可以告诉编译器不用检查,这样子就可以避过编译时期间的安全检查,这样子的效率会提高 。但同时 安全性就大打折扣了。
方法一: 在main方法面前加@SuppressWarnings("unchecked")
方法二:就是采用泛型。ArrayList<String> list = new ArrayList<String>();
例如:
import java.util.*; public class ListDemo { //@SuppressWarnings("unchecked") public static void main(String[] args) { StringBuilder buf = new StringBuilder("美丽"); //字符串生成器 buf.append("中"); // 输出: 美丽中 buf.append("国"); //输出:美丽中国 buf.insert(1,"达"); //输出:美达丽中国 buf.insert(0,"欢迎"); //输出:欢迎美达丽中国 System.out.println(buf); //ArrayList list = new ArrayList(); ArrayList<String> list = new ArrayList<String>(); list.add("中"); System.out.println(list); } }
- 问题2:编译XXX完成,运行程序时提示:NO X11 DISPLAY variable was set,but this program perforemed an operation which requires it.
- 问题2解决方案:翻译为
没有设置X11 DISPLAY变量,但该程序执行了需要它的操作。
网上说大致说法为没有配置可视图形化界面变量,我使用的是Windows下子系统,所以只有命令行不存在可视化界面,如需要界面需要调用第三方软件,具体情况可使用虚拟机查看。 - 问题3:编译XXX完成,运行是提示:Exception in thread "main" java.lang.NoSuchMethodError:Student.
- 问题3解决方案:提示有同类名的类在同一个包或工程中,改变类名,保存即可正常运行。
代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/4 | 10/10 | |
第二周 | 300/500 | 1/5 | 10/20 | |
第三周 | 800/1300 | 1/6 | 20/40 | |
第四周 | 700/2000 | 2/8 | 20/60 | |
第五周 | 1100/ 3100 | 2/10 | 30 /90 | |
第六周 | 1100 /4200 | 1/ 11 | 15 /105 | |
第七周 | ||||
第八周 |
计划学习时间:15小时
实际学习时间:15小时
改进情况:
参考资料
Java学习笔记(第8版)
《Java学习笔记(第8版)》学习指导