java byte数组初始化_全栈开发之Java开发第六讲常用类

课程大纲 f0c60f3180978edd502abb590f034610.png        上篇文章介绍了Java的面向对象知识,讲到了常用的包,这节课我们讲常用的类,在实际开发过程中经常用到。 数组数组是引用数据类型,和PHP中的一样,引用数据类型在使用之前一定要做两件事情:声明和初始化。
数组声明示例如下:
int intArray[];float[] floatArray;String strArray[];Date[] dateArray;

数组初始化可以分为静态初始化和动态初始化。
静态初始化
静态初始化就是将数组的元素放到大括号中,元素之间用逗号(,)分隔。示例代码如下:

int[] intArray;//静态初始化int数组intArray = {21,32,43,45}; String[] strArray;//静态初始化Stirng数组strArray = {"张三","李四","王五","董六"}; //声明同时初始化数组int intArray[] = {21,32,43,45};String strArray[] = {"张三","李四","王五","董六"};

动态初始化
动态初始化使用new运算符分配指定长度的内存空间,示例代码如下:

int intArray[];// 动态初始化int数组intArray = new int[4];                      intArray[0] = 21;intArray[1] = 32;intArray[2] = 43;

new分配数组内存空间后,数组类型的默认值如下所示:

1a642f2403e3f6a2a400bb1571d6536e.png

字符串字符串
Java SE提供了三个字符串类:String、StringBuffer和StringBuilder。String是不可变字符串,StringBuffer和StringBuilder是可变字符串。 不可变字符串
Java中不可变字符串类是String,属于java.lang包,它也是Java非常重要的类。
常用的构造方法:
    String():使用空字符串创建并初始化一个新的String对象。
   String(String original):使用另外一个字符串创建并初始化一个新的 String 对象。
    String(StringBuffer buffer):使用可变字符串对象(StringBuffer)创建并初始化一个新的 String 对象。
    String(StringBuilder builder):使用可变字符串对象(StringBuilder)创建并初始化一个新的 String 对象。
    String(byte[] bytes):使用平台的默认字符集解码指定的byte数组,通过byte数组创建并初始化一个新的 String 对象。
    String(char[] value):通过字符数组创建并初始化一个新的 String 对象。
    String(char[] value, int offset, int count):通过字符数组的子数组创建并初始化一个新的 String 对象;offset参数是子数组第一个字符的索引,count参数指定子数组的长度。 字符串池
获得字符串对象时都是直接使用字符串常量,但Java中对象是使用new关键字创建,字符串对象也可以使用new关键字创建。
String类常用方法 字符串拼接
String字符串拼接可以使用+运算符或String的concat(String str)方法。+运算符优势是可以连接任何类型数据拼接成为字符串,而concat方法只能拼接String类型字符串。 字符串查找
在String类中提供了indexOf和lastIndexOf方法用于查找字符或字符串,返回值是查找的字符或字符串所在的位置,-1表示没有找到。 字符串比较
字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀等。
比较示例代码如下:
String s1 = new String("Hello");String s2 = new String("Hello");// 比较字符串是否是相同的引用System.out.println("s1 == s2 : " + (s1 == s2));// 比较字符串内容是否相等System.out.println("s1.equals(s2) : " + (s1.equals(s2)));String s3 = "HELlo";// 忽略大小写比较字符串内容是否相等System.out.println("s1.equalsIgnoreCase(s3) : " + (s1.equalsIgnoreCase(s3)));// 比较大小String s4 = "java";String s5 = "Swift";// 比较字符串大小 s4 > s5System.out.println("s4.compareTo(s5) : " + (s4.compareTo(s5)));                        // 忽略大小写比较字符串大小 s4 < s5System.out.println("s4.compareToIgnoreCase(s5) : " + (s4.compareToIgnoreCase(s5)));
字符串截取
String截取方法主要的方法如下:
    String substring(int beginIndex):从指定索引beginIndex开始截取一直到字符串结束的子字符串。
    String substring(int beginIndex, int endIndex):从指定索引beginIndex开始截取直到索引endIndex - 1处的字符,注意包括索引为beginIndex处的字符,但不包括索引为endIndex处的字符。

可变字符串
Java提供了两个可变字符串类StringBuffer和StringBuilder。
可变字符串在追加、删除、修改、插入和拼接等操作不会产生新的对象。
StringBuffer是线程安全的,它的方法是支持线程同步1 ,线程同步会操作串行顺序执行,在单线程环境下会影响效率。StringBuilder是StringBuffer单线程版本,Java 5之后发布的,它不是线程安全的,但它的执行效率很高。字符串追加
字符串追加方法是append,append有很多重载方法,可以追加任何类型数据,它的返回值还是StringBuilder。StringBuilder的追加法与StringBuffer完全一样,这里不再赘述。字符串插入、删除和替换
StringBuilder中实现插入、删除和替换等操作的常用方法说明如下:
    StringBuilder insert(int offset, String str):在字符串缓冲区中索引为offset的字符位置之前插入str,insert有很多重载方法,可以插入任何类型数据。
    StringBuffer delete(int start, int end):在字符串缓冲区中删除子字符串,要删除的子字符串从指定索引start开始直到索引end - 1处的字符。start和end两个参数与substring(int beginIndex, int endIndex)方法中的两个参数含义一样。
    StringBuffer replace(int start, int end, String str)字符串缓冲区中用str替换子字符串,子字符串从指定索引start开始直到索引end - 1处的字符。start和end同delete(int start, int end)方法。

枚举类Java枚举类型本质上是一种继承java.lang.Enum类,是引用数据类型,使用枚举可以提高程序的可读性,使代码更清晰且更易于维护。 最简单形式的枚举类
//WeekDays.java文件package com.a51work6;public enum WeekDays {    // 枚举常量列表    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY}
枚举类中成员变量和成员方法
枚举类可以像类一样包含成员变量和成员方法,成员变量可以是实例变量也可以是静态变量,成员方法可以是实例方法,也可以是静态方法,但不能是抽象方法。
//WeekDays.java文件package com.a51work6;public enum WeekDays {    // 枚举常量列表    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;        ①    // 实例变量    private String name;    private int index;    // 静态变量    private static int staticVar = 100;    // 覆盖父类中的toString()方法    @Override    public String toString() {                           ②        StringBuilder sb = new StringBuilder();        sb.append(name);        sb.append('-');        sb.append(index);        return sb.toString();    }    // 实例方法    public String getInfo() {        // 调用父类中toString()方法        return super.toString();    }    // 静态方法    public static int getStaticVar() {        return staticVar;    }}
Java根类java.lang.Object类,它是Java所有类的根类,Java所有类都直接或间接继承自Object类,它是所有类的“祖先”。
常用的几个方法:
    String toString():返回该对象的字符串表示。
    boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。 包装类Java提供包装类(Wrapper Class)来将基本数据类型包装成类,每个Java基本数据类型在java.lang包中都有一个相应的包装类,每个包装类对象封装一个基本数据类型数值。    

c1ecad970a869eba27005378187877c3.png

自动装箱/拆箱
装箱能够自动地将基本数据类型的数值自动转换为包装类对象,而不需要使用构造方法。拆箱能够将包装类对象自动转换为基本数据类型的数值,而不需要使用intValue()或doubleValue()等方法。在自动装箱和拆箱时,要避免空对象。这是因为拆箱的过程本质上是调用intValue()方法实现的,试图访问空对象的方法和成员变量,就会抛出运行期NullPointerException异常。

Math类Math类中包含用于进行基本数学运算的方法,如指数、对数、平方根和三角函数等,Math类是final的不能被继承。
舍入方法
    static double ceil(double a):返回大于或等于a最小整数。
    static double floor(double a):返回小于或等于a最大整数。
    static int round(float a):四舍五入方法。
最大值和最小值
    static int min(int a, int b):取两个int整数中较小的一个整数。
    static int min(long a, long b):取两个long整数中较小的一个整数。
    static int min(float a, float b):取两个float浮点数中较小的一个浮点数。
    static int min(double a, double b):取两个double浮点数中较小的一个浮点数。
max方法取两个数中较大的一个数,max方法与min方法参数类似也有4个版本,这里不再赘述。
绝对值
    static int abs(int a):取int整数a的绝对值。
    static long abs(long a):取long整数a的绝对值。
    static float abs(float a):取float浮点数a的绝对值。
    static double abs(double a):取double浮点数a的绝对值。
三角函数:
    static double sin(double a):返回角的三角正弦。
    static double cos(double a):返回角的三角余弦。

大数值

对货币等大值数据进行计算时,int、long、float和double等基本数据类型已经在精度方面不能满足需求了。为此Java提高了两个大数值类:BigInteger和BigDecimal,这里两个类都继承自Number抽象类。
1 BigInteger
java.math.BigInteger是不可变的任意精度的大整数。BigInteger提供比较、加减乘除等运算,继承了抽象类Number,那么它还有实现抽象类Number的6个方法
2 BigDecimal
java.math.BigDecimal是不可变的任意精度的有符号十进制数。提供比较、加减乘除等运算,除法运算,该方法需要指定舍入模式,如果不指定舍入模式那么会发生运行期异常ArithmeticException,舍入模式BigDecimal.ROUND_HALF_UP是四舍五入。BigInteger继承了抽象类Number,那么它还有实现抽象类Number的6个方法 日期时间相关类Java 8之前日期类是java.util.Date,Date类比较古老,其中的很多方法现在已经废弃了,但是目前仍然有很多程序还在使用Date类,考虑到还有很多程序使用Date类,因此本节还是介绍一下Date类及日期时间相关类的使用。
此外,Java 8之前与日期时间相关类还有DateFormat、Calendar和TimeZone,DateFormat用于日期格式化,Calendar日历类,TimeZone是时区类。
Java8之后提供了新的日期时间类有三个:LocalDate、LocalTime和LocalDateTime,它们都位于java.time包中,LocalDate表示一个不可变的日期对象;LocalTime表示一个不可变的时间对象;LocalDateTime表示一个不可变的日期和时间。

Java 8提供的日期格式化类是java.time.format.DateTimeFormatter。

集合

集合本质是基于某种数据结构数据容器。常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。
List集合
List接口的实现类有:ArrayList 和 LinkedList。ArrayList是基于动态数组数据结构的实现,LinkedList是基于链表数据结构的实现。ArrayList访问元素速度优于LinkedList,LinkedList占用的内存空间比较大,但LinkedList在批量插入或删除数据时优于ArrayList。
Set集合
Set集合是由一串无序的,不能重复的相同类型元素构成的集合。Set接口直接实现类主要是HashSet,HashSet是基于散列表数据结构的实现。
Map集合
Map(映射)集合表示一种非常复杂的集合,允许按照某个键来访问元素。Map集合是由两个集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是Set类型,因此不能有重复的元素。而值集合是Collection类型,可以有重复的元素。Map集合中的键和值是成对出现的。类似于PHP中的关联数组。
Map接口直接实现类主要是HashMap,HashMap是基于散列表数据结构的实现。 文件管理与I/O流Java将数据的输入输出(I/O)操作当作“流”来处理,“流”是一组有序的数据序列。“流”分为两种形式:输入流和输出流,从数据源中读取数据是输入流,将数据写入到目的地是输出流。
Java流设计理念

9eb699437f4732042b457800456d5771.png

以字节为单位的流称为字节流,以字符为单位的流称为字符流。Java SE提供4个顶级抽象类,两个字节流抽象类:InputStream和OutputStream;两个字符流抽象类:Reader和Writer。
字节输入流

11a3b5c5fa0f2815afb180995625c7fb.png

字节输出流

4f9cf92979925241b9c33ced13dcf2ad.png

字符输入流

19598e1b53d6673246d3877d4ff77fd8.png

字符输出流

f5acf7b919533e912d7703e1e342fc58.png

37b9ea64cb3cfa2afa86114142793774.png 既有技术又有健康关注我们,学习技术获得健康
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值