• java学习(四)


    学号 20189214 《Java程序设计》第四周学习总结

    教材学习内容总结

    枚举

    枚举是JDK1.5版本新增的特性(泛型、For-each等如今被广泛应用的特性也是由JDK1.5时所新增的),另外到了JDK1.6后switch语句支持枚举类型。
    枚举与静态final区别

    1. 在保证变量只能被赋给一个有效值这方面,enum比静态final好。
    2. 枚举值是一个对象,会编译为一个.class文件,其行为就像对象一样,可以用作一个Map键。

    枚举的好处以及与常量类的区别

    1. 枚举型可以直接与数据库打交道,我通常使用varchar类型存储,对应的是枚举的常量名。(数据库中好像也有枚举类型,不过也没用过)

    2. switch语句支持枚举型,当switch使用int、String类型时,由于值的不稳定性往往会有越界的现象,对于这个的处理往往只能通过if条件筛选以及default模块来处理。而使用枚举型后,在编译期间限定类型,不允许发生越界的情况

    3. 当你使用常量类时,往往得通过equals去判断两者是否相等,使用枚举的话由于常量值地址唯一,可以用==直接对比,性能会有提高

    4. 常量类编译时,是直接把常量的值编译到类的二进制代码里,常量的值在升级中变化后,需要重新编译引用常量的类,因为里面存的是旧值。枚举类编译时,没有把常量值编译到代码里,即使常量的值发生变化,也不会影响引用常量的类。

    5. 枚举类编译后默认为final class,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,容易导致父类的不兼容。

    6. 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接口

    1. List(add,set,remove,asList)允许重复
    2. Set 不允许重复
    3. Queue (offer,Remove,Poll,Element,Peek)
    4. 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);
        }
    }
    }
    

    操作日期和时间

    1. Instant类表示时间线上的一个时间点,用来计时一项操作。
    2. LocalDate来建模没有时间部分的日期。(纪念日)
    3. Period表示基于日期的一个时间量,例如5天、一周或3年。
    4. LocalDataTime类表示一个没有时区的日期时间。
    5. ZonedDateTime类表示带有时区的日期时间。是不可变的。
    6. Duration类
    7. 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小时

    参考资料

  • 相关阅读:
    User类 新增共有属性Current ID
    关于multi-label classification中评价指标的一些理解
    Improved Few-Shot Visual Classification草草阅读
    文献阅读:A New Meta-Baseline for Few-Shot Learning
    Windows 10系统在Anaconda下安装GPU版Pytorch
    第九章实验
    实验 5 编写、调试具有多个段的
    实验 4 [bx]和loop的使用
    实验三
    实验 2 用机器指令和汇编指令编程
  • 原文地址:https://www.cnblogs.com/Shambryce/p/10590944.html
Copyright © 2020-2023  润新知