![f0c60f3180978edd502abb590f034610.png](https://i-blog.csdnimg.cn/blog_migrate/02d9ca0bf847c323056c6ded3a05dfa4.jpeg)
数组声明示例如下:
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分配数组内存空间后,数组类型的默认值如下所示:
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)方法。
//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包中都有一个相应的包装类,每个包装类对象封装一个基本数据类型数值。
自动装箱/拆箱
装箱能够自动地将基本数据类型的数值自动转换为包装类对象,而不需要使用构造方法。拆箱能够将包装类对象自动转换为基本数据类型的数值,而不需要使用intValue()或doubleValue()等方法。在自动装箱和拆箱时,要避免空对象。这是因为拆箱的过程本质上是调用intValue()方法实现的,试图访问空对象的方法和成员变量,就会抛出运行期NullPointerException异常。
舍入方法
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流设计理念
字节输入流
![37b9ea64cb3cfa2afa86114142793774.png](https://i-blog.csdnimg.cn/blog_migrate/c6ab39920a932c921ea6bdb442b93265.jpeg)