目录
常用类
一、String类
1.String类的特点
2.String对象的创建方式
3.String类的常用方法
4.字符串内存分析编辑
5.字符串对象的不可变性编辑
二、StringBuilder和StringBuffer类
三、数学相关类
BigInteger
BigDecimal
四、日期时间API
五、系统相关类
六、数组工具类
七、包装类
八、枚举Enum
常用类 一、String类
java.lang.String类的实例表示字符串,因为字符串太常用,所以字面量"abc"也表示字符串的一个实例。
1.String类的特点-
字符串是一个常量,一旦创建不可改变。即字符串对象不可改变。
-
String类内部使用char[]存储字符数据,jdk9之后改为byte[]
-
字符串字面量"abc"存储在字符串常量池,内容相同的字符串在常量池中只有一份。
-
String类是final不能被继承
-
String s = "abc";
-
public String()
:初始化新创建的 String对象,以使其表示空字符序列。 -
String(String original)
: 初始化一个新创建的String
对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。 -
public String(char[] value)
:通过当前参数中的字符数组来构造新的String。 -
public String(char[] value,int offset, int count)
:通过字符数组的一部分来构造新的String。 -
public String(byte[] bytes)
:通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String。 -
public String(byte[] bytes,String charsetName)
:通过使用指定的字符集解码当前参数中的字节数组来构造新的String。 -
String s = ""+123+true;
-
(1)boolean isEmpty():字符串是否为空
-
(2)int length():返回字符串的长度
-
(3)String concat(xx):拼接,等价于+
-
(4)boolean equals(Object obj):比较字符串是否相等,区分大小写
-
(5)boolean equalsIgnoreCase(Object obj):比较字符串是否相等,不区分大小写
-
(6)int compareTo(String other):比较字符串大小,区分大小写,按照Unicode编码值比较大小
-
(7)int compareToIgnoreCase(String other):比较字符串大小,不区分大小写
-
(8)String toLowerCase():将字符串中大写字母转为小写
-
(9)String toUpperCase():将字符串中小写字母转为大写
-
(10)String trim():去掉字符串前后空白符
-
(11)boolean contains(xx):是否包含xx
-
(12)int indexOf(xx):从前往后找当前字符串中xx,即如果有返回第一次出现的下标,要是没有返回-1
-
(13)int lastIndexOf(xx):从后往前找当前字符串中xx,即如果有返回最后一次出现的下标,要是没有返回-1
-
(14)String substring(int beginIndex) :返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
-
(15)String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
-
(16)char charAt(index):返回[index]位置的字符
-
(17)char[] toCharArray(): 将此字符串转换为一个新的字符数组返回
-
(18)String(char[] value):返回指定数组中表示该字符序列的 String。
-
(19)String(char[] value, int offset, int count):返回指定数组中表示该字符序列的 String。
-
(20)static String copyValueOf(char[] data): 返回指定数组中表示该字符序列的 String
-
(21)static String copyValueOf(char[] data, int offset, int count):返回指定数组中表示该字符序列的 String
-
(22)static String valueOf(char[] data, int offset, int count) : 返回指定数组中表示该字符序列的 String
-
(23)static String valueOf(char[] data) :返回指定数组中表示该字符序列的 String
-
(24)byte[] getBytes():编码,把字符串变为字节数组,按照平台默认的字符编码进行编码
-
byte[] getBytes(字符编码方式):按照指定的编码方式进行编码
-
(25)new String(byte[] ) 或 new String(byte[], int, int):解码,按照平台默认的字符编码进行解码
-
new String(byte[],字符编码方式 ) 或 new String(byte[], int, int,字符编码方式):解码,按照指定的编码方式进行解码
-
(26)boolean startsWith(xx):是否以xx开头
-
(27)boolean endsWith(xx):是否以xx结尾
-
(28)boolean matches(正则表达式):判断当前字符串是否匹配某个正则表达式
-
(29)String replace(xx,xx):不支持正则
-
(30)String replaceFirst(正则,value):替换第一个匹配部分
-
(31)String repalceAll(正则, value):替换所有匹配部分
-
(32)String[] split(正则):按照某种规则进行拆分
-
与String类的区别
String对象是不可变的,如果要频繁修改字符串那么效率会比较低。所以Java提供了可变长字符串StringBuilder和StringBuffer类。如果要频繁修改字符串可以使用这两个类。
StringBuffer:老的,线程安全的(因为它的方法有synchronized修饰),效率低
StringBuilder:线程不安全的,效率高
-
常用API
常用的API,StringBuilder、StringBuffer的API是完全一致的
(1)StringBuffer append(xx):拼接,追加
(2)StringBuffer insert(int index, xx):在[index]位置插入xx
(3)StringBuffer delete(int start, int end):删除[start,end)之间字符
StringBuffer deleteCharAt(int index):删除[index]位置字符
(4)void setCharAt(int index, xx):替换[index]位置字符
(5)StringBuffer reverse():反转
(6)void setLength(int newLength) :设置当前字符序列长度为newLength
(7)StringBuffer replace(int start, int end, String str):替换[start,end)范围的字符序列为str
(8)int indexOf(String str):在当前字符序列中查询str的第一次出现下标
int indexOf(String str, int fromIndex):在当前字符序列[fromIndex,最后]中查询str的第一次出现下标
int lastIndexOf(String str):在当前字符序列中查询str的最后一次出现下标
int lastIndexOf(String str, int fromIndex):在当前字符序列[fromIndex,最后]中查询str的最后一次出现下标
(9)String substring(int start):截取当前字符序列[start,最后]
(10)String substring(int start, int end):截取当前字符序列[start,end)
(11)String toString():返回此序列中数据的字符串表示形式
//创建对象
StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append(123).append(true).append('abc');
String s = sb.toString();
三、数学相关类
-
java.lang.Math类封装了一些基础数学运算功能
-
public static final double PI:返回圆周率
-
public static double abs(double a)
:返回 double 值的绝对值。 -
public static double ceil(double a)
:返回大于等于参数的最小的整数。 -
public static double floor(double a)
:返回小于等于参数最大的整数。 -
public static long round(double a)
:返回最接近参数的 long。(相当于四舍五入方法) -
public static double pow(double a,double b):返回a的b幂次方法
-
public static double sqrt(double a):返回a的平方根
-
public static double random():返回[0,1)的随机值
-
public static double max(double x, double y):返回x,y中的最大值
-
public static double min(double x, double y):返回x,y中的最小值
-
-
java.util.Random类,用于生成伪随机数流
-
public Random():创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同。(没有真正的随机数,需要种子产生随机数,同一个种子产生的伪随机数序列相同)
-
public Random(long seed):使用单个 long 种子创建一个新的随机数生成器。该种子是伪随机数生成器的内部状态的初始值,该生成器可通过方法 next(int) 维护。
-
boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。
-
void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。
-
double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。
-
float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。
-
double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0。
-
int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
-
int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
-
long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
//创建对象 Random r = new Random(); //产生一个随机整数[0,50) int num = r.nextInt(50);
-
- BigInteger
不可变的任意精度的整数。
-
BigInteger(String val)
-
BigInteger add(BigInteger val)
-
BigInteger subtract(BigInteger val)
-
BigInteger multiply(BigInteger val)
-
BigInteger divide(BigInteger val)
-
BigInteger remainder(BigInteger val)
-
int intValue():将此 BigInteger 转换为 int。
-
long longValue():将此 BigInteger 转换为 long。
-
float floatValue():将此 BigInteger 转换为 float。
-
- BigDecimal
不可变的、任意精度的有符号十进制数。
-
BigDecimal(String val)
-
BigDecimal add(BigDecimal val)
-
BigDecimal subtract(BigDecimal val)
-
BigDecimal multiply(BigDecimal val)
-
BigDecimal divide(BigDecimal val)
-
BigDecimal divide(BigDecimal divisor, int roundingMode)
-
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
-
BigDecimal remainder(BigDecimal val)
-
double doubleValue():将此 BigDecimal 转换为 double。
-
-
java.util.Date日期类
Date date = new Date();//创建Date对象,表示当前系统的日期时间 long time = date.getTime();//从1970.1.1 8:0:0到现在的毫秒值 Date date2 = new Date(0L);//根据指定的毫秒值,创建Date对象
-
java.util.Calendar日历类
//创建Calendar对象,表示当前系统日期时间 Calendar c = Calendar.getInstance(); //获取日期时间等信息 int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH);
-
java.text.SimpleDateFormat日期时间格式类
用于把Date对象格式化为字符串,或这个把字符串解析为Date对象
//创建格式化类对象,并指定一种格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //格式化: String s = sdf.format(new Date());//"2022-09-17 08:48:12" //解析: Date date = sdf.parse("2022-09-17 08:48:12");
-
JDK8日期时间API
-
LocalDate日期类,LocalTime时间类,LocalDateTime类
-
ZoneDateTime,ZoneId时区相关类
-
Period日期间隔类,Duration时间间隔类
-
DateTimeFormatter日期时间格式化类
方法 描述 now() / now(ZoneId zone) 静态方法,根据当前时间创建对象/指定时区的对象 of() 静态方法,根据指定日期/时间创建对象 getDayOfMonth()/getDayOfYear() 获得月份天数(1-31) /获得年份天数(1-366) getDayOfWeek() 获得星期几(返回一个 DayOfWeek 枚举值) getMonth() 获得月份, 返回一个 Month 枚举值 getMonthValue() / getYear() 获得月份(1-12) /获得年份 getHours()/getMinute()/getSecond() 获得当前对象对应的小时、分钟、秒 withDayOfMonth()/withDayOfYear()/withMonth()/withYear() 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象 with(TemporalAdjuster t) 将当前日期时间设置为校对器指定的日期时间 plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours() 向当前对象添加几天、几周、几个月、几年、几小时 minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours() 从当前对象减去几月、几周、几天、几年、几小时 plus(TemporalAmount t)/minus(TemporalAmount t) 添加或减少一个 Duration 或 Period isBefore()/isAfter() 比较两个 LocalDate isLeapYear() 判断是否是闰年(在LocalDate类中声明) format(DateTimeFormatter t) 格式化本地日期、时间,返回一个字符串 parse(Charsequence text) 将指定格式的字符串解析为日期、时间 //创建LocatDateTime对象 LocalDateTime now = LocalDateTime.now();//表示当前系统日期时间 LocalDateTime dateTime = LocalDateTime.of(1999,9,9,10,10,10);//根据指定日期时间创建对象 //创建格式化类对象,并指定格式 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime now = LocalDateTime.now(); //格式化: String s = dtf.format(now); String s1 = now.format(dtf); //解析: LocalDateTime dateTime = LocalDateTime.parse("2022-09-17 08:48:12",dtf);
-
-
java.lang.System系统类
系统类中很多好用的方法,其中几个如下:
-
static long currentTimeMillis() :返回当前系统时间距离1970-1-18:0:0的毫秒值
-
static void exit(int status) :退出当前系统
-
static void gc() :运行垃圾回收器。
-
static String getProperty(String key):获取某个系统属性
-
-
java.lang.Runtime运行时类
每个 Java 应用程序都有一个
Runtime
类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime
方法获取当前运行时。 应用程序不能创建自己的 Runtime 类实例。public static Runtime getRuntime(): 返回与当前 Java 应用程序相关的运行时对象。
public long totalMemory():返回 Java 虚拟机中的内存总量。此方法返回的值可能随时间的推移而变化,这取决于主机环境。
public long freeMemory():回 Java 虚拟机中的空闲内存量。调用 gc 方法可能导致 freeMemory 返回值的增加。
public long maxMemory(): 返回 Java 虚拟机试图使用的最大内存量。
Process exec(String command):在单独的进程中执行指定的字符串命令。
//获取运行时类的实例,单例的 Runtime r = Runtime.getRuntime(); Runtime r1 = Runtime.getRuntime(); System.out.println(r==r1);//true
java.util.Arrays数组工具类,提供了很多静态方法来对数组进行 *** 作,而且如下每一个方法都有各种重载形式,以下只列出int[]类型的,其他类型的数组类推:
-
static int binarySearch(int[] a, int key) :要求数组有序,在数组中查找key是否存在,如果存在返回第一次找到的下标,不存在返回负数
-
static int[] copyOf(int[] original, int newLength) :根据original原数组复制一个长度为newLength的新数组,并返回新数组
-
static int[] copyOfRange(int[] original, int from, int to) :复制original原数组的[from,to)构成新数组,并返回新数组
-
static boolean equals(int[] a, int[] a2) :比较两个数组的长度、元素是否完全相同
-
static void fill(int[] a, int val) :用val填充整个a数组
-
static void fill(int[] a, int fromIndex, int toIndex, int val):将a数组[fromIndex,toIndex)部分填充为val
-
static void sort(int[] a) :将a数组按照从小到大进行排序
-
static void sort(int[] a, int fromIndex, int toIndex) :将a数组的[fromIndex, toIndex)部分按照升序排列
-
static String toString(int[] a) :把a数组的元素,拼接为一个字符串,形式为:[元素1,元素2,元素3。。。]
-
Java针对每种基本数据类型都提供了对应的引用数据类型,即包装类类型。
Java提供了两大类数据类型,基本类型与引用类型,使用基本类型在于效率,但是缺少像引用数据类型一样的丰富API,那么Java提供了针对基本数据类型的保证类,以提供更加便捷的 *** 作功能,包装类就是把基本数据类型包装成对应的引用数据类型。
序号 基本数据类型 包装类(java.lang包) 1 byte Byte 2 short Short 3 int Integer 4 long Long 5 float Float 6 double Double 7 char Character 8 boolean Boolean 9 void Void -
自动装箱与拆箱
-
自动装箱:把基本数据类型包装成了对应的引用数据类型
-
自动拆箱:把包装类类型转换为对应的基本数据类型
int a = 10; Integer b = a;//自动装箱 int c = b;//自动拆箱 Integer x = new Integer(123); Integer x = 123;
-
-
相关API
//整数转字符串的方法 Integer i = 123; String s = i.toString(); String s1 = String.valueOf(456); String s2 = "" + 789; String s3 = Integer.toString(789); //把整数转为其他进制字符串 String s4 = Integer.toBinaryString(15); System.out.println("s4 = " + s4);//1111 String s5 = Integer.toHexString(15); System.out.println("s5 = " + s5);//F //字符串转整数的方法 int i = Integer.parseInt("123"); Integer i1 = Integer.valueOf("456"); Integer i2 = new Integer("789");
-
包装类的缓存问题
包装类的数据在缓存数值范围内时,直接从内存中取出对象,超过范围会创建新的对象
包装类 缓存对象 Byte -128~127 Short -128~127 Integer -128~127 Long -128~127 Float 没有 Double 没有 Character 0~127 Boolean true和false Integer a = 10;//从缓存中取出Integer对象 Integer b = 10;//从缓存中取出Integer对象 System.out.println(a == b);//true Integer x = 200;//创建新Integer对象 Integer y = 200;//创建新Integer对象 System.out.println(x == y);//false Integer m = new Integer(20);//直接创建Integer对象 Integer n = new Integer(20);//直接创建Integer对象 System.out.println(m == n);//false
-
枚举的理解:只有固定几个对象的类。JDK5之后支持直接使用enum关键字定义枚举类型
-
定义格式:
【修饰符】 enum 枚举类型{ 常量名1,常量名2,...; } public enum Season{ SPRING,SUMMER,AUTUMN,WINTTER }
-
枚举类的要求和特点
-
枚举类的常量对象列表必须在枚举类的首行,因为是常量,所以建议大写。
-
如果常量对象列表后面没有其他代码,那么“;”可以省略,否则不可以省略“;”。
-
编译器给枚举类默认提供private的无参构造
-
如果需要也可以定义有参构造,默认也是private修饰,常量对象名后面加(实参列表)调用有参构造器。
-
枚举类默认继承自java.lang.Enum类,不能再继承其他的类型;枚举类默认是final修饰的也不能被继承。
-
JDK1.5之后switch,提供支持枚举类型,case后面可以写枚举常量名。
-
枚举类型如有其它属性,建议这些属性也声明为final的,因为常量对象在逻辑意义上应该不可变。
-
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)