java学习(四)
学号 20189214 《Java程序设计》第四周学习总结
教材学习内容总结
枚举
枚举是JDK1.5版本新增的特性(泛型、For-each等如今被广泛应用的特性也是由JDK1.5时所新增的),另外到了JDK1.6后switch语句支持枚举类型。
枚举与静态final区别
- 在保证变量只能被赋给一个有效值这方面,enum比静态final好。
- 枚举值是一个对象,会编译为一个.class文件,其行为就像对象一样,可以用作一个Map键。
枚举的好处以及与常量类的区别
枚举型可以直接与数据库打交道,我通常使用varchar类型存储,对应的是枚举的常量名。(数据库中好像也有枚举类型,不过也没用过)
switch语句支持枚举型,当switch使用int、String类型时,由于值的不稳定性往往会有越界的现象,对于这个的处理往往只能通过if条件筛选以及default模块来处理。而使用枚举型后,在编译期间限定类型,不允许发生越界的情况
当你使用常量类时,往往得通过equals去判断两者是否相等,使用枚举的话由于常量值地址唯一,可以用==直接对比,性能会有提高
常量类编译时,是直接把常量的值编译到类的二进制代码里,常量的值在升级中变化后,需要重新编译引用常量的类,因为里面存的是旧值。枚举类编译时,没有把常量值编译到代码里,即使常量的值发生变化,也不会影响引用常量的类。
枚举类编译后默认为final class,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,容易导致父类的不兼容。
valueOf()通过常量名获取对应的枚举实例。
shapType type = shapType.valueOf("OVAL");
System.out.println(type);
java.lang.Enum
enum具有如下的属性:
- 它们没有公有的构造函数,这使得不可能将其实例化。
- 它们隐式地是静态的。
- 每个enum常量只有一个实例。
泛型
泛型类型
泛型类型必须是java.lang.Throwable类的一个直接或间接子类。
public class GenericListDemo1 {
public static void main(String[] args) {
// without generics
List stringList1 = new ArrayList();
stringList1.add("Java");
stringList1.add("without generics");
// cast to java.lang.String
String s1 = (String) stringList1.get(0);
System.out.println(s1.toUpperCase());
// with generics and diamond
List<String> stringList2 = new ArrayList<>();
stringList2.add("Java");
stringList2.add("with generics");
// no type casting is necessary
String s2 = stringList2.get(0);
System.out.println(s2.toUpperCase());
}
}
使用?通配符
如果你声明一个List,可以存储如下的对象:
- aType的一个实例
- aType的一个子类的实例
- 实现了aType的一个类的实例
示例:
List<?> myList = new ArrayList<?>() 错误
List<Object> myList = new ArrayList<>()
List<? extends Number> 定义上界
List<? SUPER Integer> 作为一个方法参数的类型
public static final <T> List<T> emptyList()
集合框架
集合是将其他对象组织到一起的一个对象,集合也叫容器,它提供了一种方法来存储、访问和操作其元素。
Collection接口
- List(add,set,remove,asList)允许重复
- Set 不允许重复
- Queue (offer,Remove,Poll,Element,Peek)
- Map(keySet,values,entrySet)
使得对象可比较和可排序
需要通过Arrays.sort或Collections.sort来支持排序的任何类,都必须实现Comparable接口。
public class Elephant implements Comparable {
public float weight;
public int age;
public float tuskLength;
public int compareTo(Object obj) {
Elephant anotherElephant = (Elephant) obj;
if (this.weight > anotherElephant.weight) {
return 1;
} else if (this.weight < anotherElephant.weight) {
return -1;
} else {
// both elephants have the same weight, now
// compare their age
return (this.age - anotherElephant.age);
}
}
}
操作日期和时间
- Instant类表示时间线上的一个时间点,用来计时一项操作。
- LocalDate来建模没有时间部分的日期。(纪念日)
- Period表示基于日期的一个时间量,例如5天、一周或3年。
- LocalDataTime类表示一个没有时区的日期时间。
- ZonedDateTime类表示带有时区的日期时间。是不可变的。
- Duration类
- java.time.format.DateTimeFormatter可以格式化一个本地日期或带时区的日期时间。
教材学习中的问题和解决过程
- 问题1:集合框架的关系不清楚
- 问题1解决方案:查阅资料

所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类(实线表示),对接口的具体实现。
Collection 接口是一组允许重复的对象。
Set 接口继承 Collection,集合元素不重复。
List 接口继承 Collection,允许重复,维护元素插入顺序。
Map接口是键-值对象,与Collection接口没有什么关系。
9.Set、List和Map可以看做集合的三大类:
List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因)。
Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。
Collection接口是处理对象集合的根接口,其中定义了很多对元素进行操作的方法。Collection接口有两个主要的子接口List和Set。
代码调试中的问题和解决过程
- 问题1:从码云直接git本地的项目需要add configuration才可以编译。
- 问题1解决方案:如果项目与本地JDK不同,要更改JDK。还需要将import的包在依赖中添加。更改PATH设置OUT路径
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
1
double d = 0.1 + 0.1 + 0.1, System.out.println(i);的结果是0.3.
A .正确
B .错误
2
Java中,动态字符串优先使用()类
A .字符数组
B .StringBuffer
C .StringBuilder
D .String
查阅资料:
执行速度:StringBuilder > StringBuffer > String
线程安全:StringBuffer线程安全.StringBuilder线程不安全
String适用与少量字符串操作,StringBuilder适用单线程下在字符缓冲区下进行大量操作的情况,StringBuffer使用多线程下在字符缓冲区进行大量操作的情况。
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 150/200 | 2/2 | 20/20 | |
| 第二周 | 200/400 | 1/3 | 20/40 | |
| 第三周 | 100/500 | 1/4 | 10/50 | |
| 第四周 | 200/700 | 1/5 | 15/65 |
计划学习时间:15小时
实际学习时间:15小时
参考资料
java学习(四)的更多相关文章
- JAVA学习<四>
一. 数组: Java 中操作数组只需要四个步骤: 1. 声明数组 语法: 数据类型[ ] 数组名: 或者 数据类型 数组名[ ]: 其中,数组名可以是任意合法的变量名. 2. 分配空间 简单地 ...
- Java学习 (四)基础篇 Java基础语法
注释&标识符&关键字 注释 注释并不会被执行,其主要目的用于解释当前代码 书写注释是一个非常好的习惯,大厂要求之一 public class hello { public static ...
- java学习(四) excel读取
private static void readExcel() { String filePath = "C:/Standardzid.xls"; File file = new ...
- Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发
一.标准CRUD使用 对于标准的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢? 我们先来看张图: 1.1 环境准备 这里用的环境就是Java开发学习(四十)----MyBa ...
- 从.Net到Java学习第四篇——spring boot+redis
从.Net到Java学习系列目录 “学习java已经十天,有时也怀念当初.net的经典,让这语言将你我相连,怀念你......”接上一篇,本篇使用到的框架redis.FastJSON. 环境准备 安装 ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java实验四
20145113 Java实验四 快捷键 之前没怎么记ISDEA的快捷键,但是熟练使用快捷键可以带来很多的便利,于是先开始学习一些常用的快捷键,就采用它默认的快捷键,这样后期就不会出现冲突,一些and ...
- Java学习第一天
Java学习第一天 对于网络管理员或者黑客必须知道的八个cmd命令 详情请参考:http://www.2cto.com/os/201608/533964.html nbtstat ...
随机推荐
- oo第一次总结博客
一. 多项式求导问题描述 基本概念的声明: 带符号整数 支持前导 0 的带符号整数,符号可忽略,如:+02.-16.19260817 等. 因子 变量因子 幂函数 一般形式 由自变量x和指数组成,指数 ...
- IntelliJ IDEA 工程Java文件上红色的无效符
IntelliJ IDEA 工程Java文件上红色的无效符(红色表示该类是不可编译文件) 1.查看Java.resources文件夹 如图所示,是因为没有配置 2.在Java文件夹点击右键找到Mark ...
- day319 1、正则表达式的定义及使用 2、Date类的用法 3、Calendar类的用法
1.正则表达式的定义及使用2.Date类的用法3.Calendar类的用法 一.正则表达式 ###01正则表达式的概念和作用* A: 正则表达式的概念和作用* a: 正则表达式的概述* 正则表达式也是 ...
- 与大家分享学习微信小程序开发的一些心得
因为我也才开始学习微信小程序不久,下文也是现在的一时之言,大家有不同的想法也可以在评论里共同交流讨论,希望文章能给大家提供一点点帮助. 最近接触到了一些前端框架,像Vue.js,React,发现小程序 ...
- 微信小程序页面导航功能
页面导航功能无论是在app和web中都是一个极其常见的功能,如首字母导航,tabs导航等等.但是由于微信小程序无法都dom节点进行操作,所以怎么才能在小程序中快速的导航到用户的想要到达的地方呢. 那么 ...
- redis伪集群脚本
#安装redis伪集群脚本,先把redis-..gem及启动脚本放在/data1/redis-cluster目录下,然后执行该脚本即可 #!/bin/bash set -e #获取redis本机ip ...
- ExtJS4.2下将表单元素放在菜单时不能进行拷贝的问题解决办法
通过浏览器F12我们发现,在菜单对应的dom元素上面,有几个系统附加的事件处理函数,只要我们将它去掉就可以了.示意代码如下: { xtype: "button", scope: z ...
- vscode垂直选中列选中
VSCode列选择快捷键:Alt+Shift+左键
- cuda 配置要点
1. 安装驱动 :sudo apt-get install nvidia- 2. 安装cuda : cuda 文件中包含驱动程序,因此在安装过程中当被问及是否安装驱动时,选择no 3. 安装cudnn ...
- 利用ajax与input 上传与下载文件
html 部分代码<form action="" method="" class="form form-horizontal" nov ...