java小记3

本周的学习内容主要集中在了常用类,部分容器的学习,自我感觉上是这部分内容有些难度了,应用并不熟练,想要融会贯通仍需要很多的练习,尤其是io流,此部分的学习完成后要进行图书馆管理系统的项目练习,仍旧感觉没什么头绪,仍须加强练习。

目录

常用类

包装类

String类

时间处理类

Math类

File类

枚举

容器

list容器


常用类

包装类

用途:(官网定义)

1. 作为和基本数据类型对应的类型存在,方便涉及到对象的操作,如Object[]、集合等的操作。

2. 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作用是在基本数据类型、包装类对象、字符串之间提供相互之间的转化!)。

自动装箱和拆箱:

简单地讲就是基本数据类型和包装类之间进行自动的互相转换。

内容不难,直接上代码

自动装箱

Integer i = 100;//自动装箱
Integer i = Integer.valueOf(100);//调用的是valueOf(100),而不是new Integer(100)

自动拆箱

Integer i = 100;
int j = i;//自动拆箱
//相当于编译器自动为您作以下的语法编译:
int j = i.intValue();

注意:

包装类会有缓存问题,要进行缓存处理

缓存处理的原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或者手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。

现可以自动添加

Integer i = 100;  int j = new Integer(100);

自动装箱调用的是valueOf()方法,而不是new Integer()方法。

自动拆箱调用的xxxValue()方法。

还有equal方法的使用。

String类

 其实String类本身指的就是对象内部的成员变量的值无法再改变

下面进行简单的测试

public class App {
    public static void main(String[] args) {
        String s1 = new String("abcdef");
        String s2 = s1.substring(2, 4);
   
        System.out.println(Integer.toHexString(s1.hashCode()));
     
        System.out.println(Integer.toHexString(s2.hashCode()));
    }
}

  StringBuffer和StringBuilder

均代表可变的字符序列

下列是官网对其详细介绍

  1. 重载的public StringBuilder append(…)方法

        可以为该StringBuilder 对象添加字符序列,仍然返回自身对象。

      2. 方法 public StringBuilder delete(int start,int end)

        可以删除从start开始到end-1为止的一段字符序列,仍然返回自身对象。

      3. 方法 public StringBuilder deleteCharAt(int index)

        移除此序列指定位置上的 char,仍然返回自身对象。

      4. 重载的public StringBuilder insert(…)方法

        可以为该StringBuilder 对象在指定位置插入字符序列,仍然返回自身对象。

      5. 方法 public StringBuilder reverse()

        用于将字符序列逆序,仍然返回自身对象。

      6. 方法 public String toString() 返回此序列中数据的字符串表示形式。

时间处理类

打印现在的时间


long now = System.currentTimeMillis();

DateFormat类

定义:

    把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。

     DateFormat是一个抽象类,一般使用它的的子类SimpleDateFormat类来实现。

格式化字符的具体含义

Math类

常用方法

      1. abs 绝对值

      2. acos,asin,atan,cos,sin,tan 三角函数

      3. sqrt 平方根

      4. pow(double a, double b) a的b次幂

      5. max(double a, double b) 取大值

      6. min(double a, double b) 取小值

      7. ceil(double a) 大于a的最小整数

      8. floor(double a) 小于a的最大整数

      9. random() 返回 0.0 到 1.0 的随机数

      10. long round(double a) double型的数据a转换为long型(四舍五入)

      11. toDegrees(double angrad) 弧度->角度

      12. toRadians(double angdeg) 角度->弧度

File类

该部分建议学习io流时配合api查看,此处不多赘述。

枚举

enum  枚举名 {
      枚举体(常量列表)
}
enum Season {
    SPRING, SUMMER, AUTUMN, WINDER 
}

 作用

枚举实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的。可以直接通过枚举类型名使用它们。

容器

本章的学习主要是用来容纳和管理数据的一种方法,前面学习的数组也是一种容器,不过其不够灵活和强大,所以出现了容器的概念。

      为了能够更好的学习容器,我们首先要先来学习一个概念:泛型。

      它可以帮助我们建立类型安全的集合。在使用了泛型的集合中,遍历时不必进行强制类型转换。从而提高了代码的可读性和安全性。

首先是对泛型的声明

class MyCollection<E> {
    Object[] objs = new Object[5];
 
    public E get(int index) {
        return (E) objs[index];
    }
    public void set(E e, int index) {
        objs[index] = e;
    }
}

在日常的使用中都需要对泛型进行使用

如下

public class Test {
    public static void main(String[] args) {
        // 以下代码中List、Set、Map、Iterator都是与容器相关的接口;
        List<String> list = new ArrayList<String>();
        Set<Man> mans = new HashSet<Man>();
        Map<Integer, Man> maps = new HashMap<Integer, Man>();
        Iterator<Man> iterator = mans.iterator();
    }
}

list容器

   List是有序、可重复的容器

其中常用的实现类有三个:ArrayList、LinkedList和Vector。

本周学习内容较少,主要是感到吃力了,担心有点贪多,加上油考试就内容少了一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protobuf是一种高效的序列化协议,可以用于数据交换和数据存储。它的主要优势是大小小,速度快,可扩展性强。下面是使用Protobuf的一些小记: 1. 定义消息格式 首先,需要定义消息格式,以便Protobuf可以将数据序列化和反序列化。消息格式定义在.proto文件中,使用protobuf语言编写。例如,下面是一个简单的消息格式定义: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 这个消息格式定义了一个名为Person的消息,包含两个字段:name和age。 2. 生成代码 一旦消息格式定义好,就可以使用Protobuf编译器生成代码。编译器将根据消息格式定义生成相应的代码,包括消息类、序列化和反序列化方法等。可以使用以下命令生成代码: ``` protoc --java_out=. message.proto ``` 这将生成一个名为message.pb.javaJava类,该类包含Person消息的定义以及相关方法。 3. 序列化和反序列化 一旦生成了代码,就可以使用Protobuf序列化和反序列化数据。例如,下面是一个示例代码,将一个Person对象序列化为字节数组,并将其反序列化为另一个Person对象: ``` Person person = Person.newBuilder() .setName("Alice") .setAge(25) .build(); byte[] bytes = person.toByteArray(); Person deserializedPerson = Person.parseFrom(bytes); ``` 这个示例代码创建了一个Person对象,将其序列化为字节数组,然后将其反序列化为另一个Person对象。在这个过程中,Protobuf使用生成的代码执行序列化和反序列化操作。 以上是使用Protobuf的一些基本步骤和注意事项,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值