20175314 《Java程序设计》第七周学习总结

教材学习内容总结

第八章:常用实用类

  • String()类代表字符串:Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

  • String()类的构造方法:初始化一个新创建的 String 对象,使其表示一个空字符序列。

  • String(byte[] bytes)

    通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。

  • String(byte[] bytes, Charset charset)

    通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。

  • String(byte[] bytes, int offset, int length)

    通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。

  • String(byte[] bytes, int offset, int length, Charset charset)

    通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String。

  • String(byte[] bytes, int offset, int length, String charsetName)

    通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。

  • String(byte[] bytes, String charsetName)

    通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。

  • String(char[] value)

    分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。

  • String(char[] value, int offset, int count)

    分配一个新的 String,它包含取自字符数组参数一个子数组的字符。

  • String(int[] codePoints, int offset, int count)

    分配一个新的 String,它包含 Unicode 代码点数组参数一个子数组的字符。

  • String(String original)

    初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。

  • String(StringBuffer buffer)

    分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。

  • String(StringBuilder builder)

    分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。

  • String()类的常用方法

  • 字符串与基本数据的相互转化:方法public static int parse*(String s)将数字组成的字符序列转化为相应指定类型的数;

    方法public static String valueOf(* n)将指定类型的数转化为字符序列。

  • 对象的字符串表示:使用public String toString()方法,获得当前对象的字符串表示,可以进行重写。

  • 使用public void getChars(int i,int j,char c[],int begin)来讲字符序列的第i个到j-1个字符存放在字符数组c中,从begin位置开始存放;public char[] toCharArray()来创造一个字符数组c里面存放着当前对象的字符序列。将字符序列转化为字节数组也是相似的用法。

  • 正则表达式及字符串的替换与分解

    正则表达式:正则表达式是一个String对象的字符序列,一般用来检查某段字符是否与正则表达式匹配。用public boolean matches(String s)来检查是否匹配

    字符串的替换:public String replaceAll([正则表达式],[要代替的内容]);,把当前字符序列中满足正则表达式的部分替换成相应的内容。

    字符序列的分解:public String[] split([正则表达式]);来以匹配正则表达式的序列为间隔,分解出当前字符序列的一些字符串,放在字符串数组中。

  • StringTokenizer类:该类创造的对象(也称字符串分析器)也是用来分解当前字符序列,有两种构造方法:①StringTokenizer(String s)使用默认的分隔标记(空格、换行、回车等)②StringTokenizer(String s,String delim),参数delim中的任意排列组合被作为分隔标记。字符串分析器可以调用nextToken()方法来获得下一个单词,hasMoreTokens()方法来获得分析器中计数变量的状态。

  • Scanner类:该类的对象也可以用来从字符序列中解析出程序所需数据,Scanner对象可以调用useDelimiter(正则表达式)把正则表达式作为分隔标记。

  • Scanner类与StringTokenizer类的区别:

    ①Scanner类速度慢,省内存;StringTokenizer类速度快,占用较多内存;

    ②Scanner类没法直接指导单词个数,需要一个个取出来。

  • StringBuffer类:该类的对象可以用来存放一个可变的字符序列(之前的String类是不可以的),可以使用append方法追加字符序列在原有序列后面,

    三种构造方法:

    ①StringBuffer();分配初始容量,可以容纳16个字符;

    ②StringBuffer(int size);按指定大小分配初始容量;

    ③StringBuffer(String s);分配初始容量为s的长度加16。

  • Date类和Calendar类的区别

    Date类:使用无参数的构造方法可以获取创建对象时本地计算机的时间和日期;带参数时,如果参数为正,得到公元时间加上该参数的时间,如果参数为负,得到公元时间减去该参数的时间。

    Calendar类可以调用方法getInstance()可以初始化日历对象,然后可以调用set(年,月,日,时,秒,分)方法来翻日历。

  • 日期格式化:使用format方法对日期进行格式化format(Locale locale,格式化模式,日期列表)可以按格式输出指定地域的时间表示。

  • 可以调用Math类来进行许多数学上的计算;可以调用BigInteger类来处理特别大的整数;可以调用Random来获得指定范围和形式的随机数。

  • 数字格式化 :仍然使用format方法来对数字进行格式化:format("格式",数字);,默认顺序为从左到右,但也可以使用[数字]$对指定位置进行格式化。

    格式化整数与浮点数与C语言的方法相似。

  • Class类也可以用来创建对象(平常使用new运算符+类的构造方法);Console类的对象调用readPassword()方法来使得输入的文本不回显。

教材学习中的问题和解决过程

  • 问题:习题8阅读程序第6题上机实习,代码全部输入且没有错误但是编译失败

  • 解决方案:将import java.util,**;改为import java.util,*;

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

修改第6题程序使其能够自定义想要向后滚动的天数,并借此更深理解Calendar类的用法

import java.util.*;
import java.util.Scanner;
public class RollyDayInMonth {
public static void main(String args[]) {
Calendar calendar=Calendar.getInstance();
calendar.setTime(new Date());
String s=String.format("%tF(%<tA)",calendar);
System.out.println(s);
int n;
System.out.println("输入想要向后滚动的天数(回车确定)");
Scanner reader=new Scanner(System.in);
n = reader.nextInt();
System.out.println("向后滚动(月内)"+n+"天");
calendar.roll(calendar.DAY_OF_MONTH,n);
s=String.format("%tF(%<tA)",calendar);
System.out.println(s);
System.out.println("再向后滚动(年内)"+n+"天");
calendar.roll(calendar.DAY_OF_YEAR,n);
s=String.format("%tF(%<tA)",calendar);
System.out.println(s);
}
}
  • Calendar类常用用法:
package com.test.calendar;
import java.util.Calendar;
import org.junit.Before;
import org.junit.Test;
public class CalendarDemo {
Calendar calendar = null;
@Before
public void test() {
calendar = Calendar.getInstance();
} // 基本用法,获取年月日时分秒星期
@Test
public void test1() {
int year = calendar.get(Calendar.YEAR);// 获取年
int month = calendar.get(Calendar.MONTH) + 1;// 获取月,这里需要需要月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值
int day = calendar.get(Calendar.DAY_OF_MONTH);// 获取日
int hour = calendar.get(Calendar.HOUR);// 获取时
//24小时制表示为int hour = calendar.get(Calendar.HOUR_OF_DAY)
int minute = calendar.get(Calendar.MINUTE);// 获取分
int second = calendar.get(Calendar.SECOND);// 获取秒
int weekday = calendar.get(Calendar.DAY_OF_WEEK);// 星期,英语国家星期从星期日开始计算
System.out.println("现在是" + year + "年" + month + "月" + day + "日" + hour + "时" + minute + "分" + second + "秒" + "星期" + weekday);
} // 一年后的今天
@Test
public void test2() {
calendar.add(Calendar.YEAR, 1);// 同理换成下个月的今天calendar.add(Calendar.MONTH, 1);
int year = calendar.get(Calendar.YEAR);// 获取年
int month = calendar.get(Calendar.MONTH) + 1;// 获取月
int day = calendar.get(Calendar.DAY_OF_MONTH);// 获取日
System.out.println("一年后的今天:" + year + "年" + month + "月" + day + "日");
} // 获取任意一个月的最后一天
@Test
public void test3() {
int currentMonth = 6;// 假设求6月的最后一天
calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);// 先求出7月份的第一天,实际中这里6为外部传递进来的currentMonth变量
calendar.add(Calendar.DATE, -1);
int day = calendar.get(Calendar.DAY_OF_MONTH);// 获取日
System.out.println("6月份的最后一天为" + day + "号");
} // 设置日期
@Test
public void test4() {
calendar.set(Calendar.YEAR, 2000);
System.out.println("现在是" + calendar.get(Calendar.YEAR) + "年");
calendar.set(2008, 8, 8);
int year = calendar.get(Calendar.YEAR);// 获取年
int month = calendar.get(Calendar.MONTH);// 获取月
int day = calendar.get(Calendar.DAY_OF_MONTH);// 获取日
System.out.println("现在是" + year + "年" + month + "月" + day + "日");
}
}

代码托管

本周考试错题总结

  • 面向对象三要素是什么?

    封装,继承,多态
  • 实现多态面向对象三要素之间的关系是什么?

    封装是继承的基础 继承是多态的基础
  • 如何实现多态?

    (1)要有继承关系(2)子类要重写父类的方法(3)父类引用指向子类对

心得体会

从第七章开始我就越来越感觉到我们所学Java的实用性了,而第八章更犹为显著,例题中一道涉及密码学加密解密的程序深入人心:



在接下来的学习中,如果想要再进一步则一定需要更深学习理解使用API:



本周的学习任务依然繁重但是收获值得付出,正则表达式依然需要巩固加强继续学习。这周最大的收获就是现在逐渐喜欢修改书本或是网络上例题程序的代码以实现自己想要的功能,这样能够不断驱使自己学习探索,正如老师所倡导的“做中学”。

学习进度条

代码行数 博客量 学习时间 重要成长
目标 5000行 16篇 320小时
第一周 51/100 1/1 12/20 基本掌握了Linux的简单指令
第二周 173/200 1/1 18/20 学习了Java重要基本语法
第三周 672/800 1/1 18/20 学习了包含多个类的Java程序及类的包机制
第四周 436/600 1/1 12/20 学习程序父类和子类的继承规则
第五周 573/600 1/1 10/20 学习通过类来实现接口和接口回调
第六周 1182/1200 1/1 20/20 学习内部类、匿名类、异常类和File类
第七周 491/600 1/1 14/20 学习了Java的常用实用类
  • 计划学习时间:14小时

  • 实际学习时间:20小时

参考资料

20175314 《Java程序设计》第七周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第七周学习总结

    1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...

  2. 20175314 《Java程序设计》第九周学习总结

    20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...

  3. 20175314 《Java程序设计》第二周学习总结

    20175314 <Java程序设计>第二周学习总结 教材学习内容总结 我在APPstore上发现了一个可以支持我们在IOS系统上学习实践Java程序的开发环境,只需要购买专业版就可以使用 ...

  4. 20175314 《Java程序设计》第一周学习总结

    20175314 <Java程序设计>第一周学习总结   教材学习内容总结       除了学院统一购买的<Java 2 实用教程(第5版)>我还在网上买了一本<Head ...

  5. 201871010106-丁宣元 《面向对象程序设计(java)》第七周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  6. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  7. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  8. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  9. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  10. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

随机推荐

  1. 20164310Exp1 PC平台逆向破解和BOF基础

    1.逆向及Bof基础实践说明        1.1实践目标 实践对象:pwn1的linux可执行文件 实践目的:使程序执行另一个代码(ShellCode) 实践内容: 手工修改可执行文件,改变程序执行 ...

  2. VMware与Centos系统安装

    Linux介绍 1. Linux Linux和windows一样都是操作系统,Linux是开源的.免费的.自由传播的类Unix操作系统软件. 是一个基于POSIX和UNIX的多用户.多任务.支持多线程 ...

  3. springmvc读取服务器磁盘图片,显示于前台页面

    在项目中的config目录下有一个文件,在后台程序中获取 它并使用. springmvc提供一个方法:File file = new ClassPathResource("NonTaxVou ...

  4. Listen and Write 18th Feb 2019

    Weighted blanket has becomes very popular in many homes. they claim it can provide better sleep and ...

  5. JSON 序列化与反序列化, 与XML相互转换.

    方式一: 使用于 JavaScriptSerializer类 适用于普通场景, Excel导入导出, 前台传输查询参数直接处理等. JavaScriptSerializer serializer = ...

  6. 应用程序嵌入PowerBI报表登陆认证问题解决

    https://github.com/AzureAD/azure-activedirectory-library-for-java/issues/144

  7. Java 环境配置 与 碰到的问题

    小白记录,希望各位指点,长期整理修改 不定期更新,碰到的与之相关的会添加,做个小笔记,再次碰到可以更好的解决. JDK 下载:Oracle 配置方法:菜鸟教程 - Java 开发环境配置 作用 JAV ...

  8. ADT工具使用详解

    备注:一下内容为本人手工翻译官方文档注解,如有翻译不到位的地方,欢迎批评指正; ADT(Android开发工具)是Eclipse的插件,它提供了一套与Eclipse IDE集成的工具.它可以让您访问许 ...

  9. VS2017 ASP.NET MVC 5.0 开部署问题汇总

    1[SqlException (0x80131904): 拒绝了对对象 '****' (数据库 '***',架构 'dbo')的 EXECUTE 权限.] “/”应用程序中的服务器错误. SQL 20 ...

  10. extentreports

    关于extentreports使用的一些个人见解 首先导入jar包, 使用maven导入,我再次首先导入的是 <version>4.0.5</version>版本的jar包,但 ...