Java常用类

```java
```java
1.字符串相关的类:String
 	String :字符串,使用一对""引起来表示。
 	1.String 声明为 final 的,不可被继承。
 	2.String 实现了 Serializable 接口:表示字符串是支持序列化的。
 			 实现了 Comparable 接口:表示 String 可以比较大小。
 	3.String 内部定义了 final char[] value 用于存储字符串数据。
 	4.String : 代表不可变的字符序列。简称不可变性。【方法区(字符串常量池)】
 		体现:1.当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的 value 进行赋值。
 			 2.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能在原有的 value 上操作。
 			 3.当调用 String 的 replace() 方法修改指定字符或字符串时,也必须重新指定内存区域赋值。
 	5.通过字面量的方式(区别于 new )给一个字符串赋值,此时的字符串值声明在字符串常量池中。
 	6.字符串常量池中是不会存储相同内容的字符串的。
 	7.String 对象的创建:
 		内存:
 			1.字符串常量存储在字符串常量池,目的是共享。
 			2.字符串非常量对象存储在堆中。
 		实例化方式:
 			1.通过字面量定义的方式
 			2.通过 new + 构造器的方式
面试题:String s = new String("abc");  创建了几个对象?
	1.一个是堆空间 new 结构创建的对象。(堆内存)
	2.char[] 数对应的常量池中的数据:"abc".(方法区)
	
	
1.常量与常量的拼接结果在常量池中。且常量池中不会存在相同内容的常量。
2.只要其中有一个是变量,结果就在堆中。
3.如果拼接的结果是调用 intern() 方法,返回值就在常量池中。

常用方法:
	1.int length() : 返回字符串的长度 return value.length
	2.char charAt(int index) : 返回某索引处的字符return value[index]
	3.boolean isEmpty() : 判断是否为空字符串 : return value.length == 0
	4.String toLowerCase() : 将 String 中的所有字符转化为小写
	5.String toUpperCase() : 将 String 中的所有字符转换为大写
	6.String trim() : 返回字符串的副本,忽略首尾步空白
	7.booelan equals() : 比较字符串的内容是否相同
	8.boolean equalsIngnoreCase(String anotherString):忽略大小写比较字符串的内容是否相同。
	9.String concat(String str) : 将指定字符串连接到此字符串的结尾。
	10.int compareTo(String anotherString) : 比较两个字符串的大小
	11.String substring(int beginIndex):返回一个新的字符串,它是此字符串的从 beginIndex 开始截取到最后一个子字符串。
	.....
	
	
字符数组 ——> 字符串
	String 类的构造器:String(char[]) 和 String(char[] , int offset, int length) 分别用字符数组中的全部字符和部分字符创建字符串对象。
字符串 ——> 字符数组
	1.public char[] toCharArray() : 将字符串中的全部字符存放在一个字符数组中的方法。
	2.public void getChars(int srcBegin,int srcEnd, char[] dst, int dstBegin):
		提供了将指定索引范围内的字符串存放到数组中的方法。
		
		
String 与 byte[] 之间的转换:
	String  ——> byte[] : 调用 String 的 getBytes()
	
String 的算法考察:
	1.模拟一个 trim 方法,去除字符串两端的空格。
	2.将一个字符串进行反转。将字符串中指定部分进行反转。比如"abcdefg"反转为"abfedcg".
	3.获取一个字符串在另一个字符串中出现的次数:
		比如:获取"ab"在"abkkcadkabkebfkabkskab"中出现的次数。
	4.获取两个字符串中最大相同子串。比如:str1="abcwerthelloyuiodef";
		str2 = "cvhellobnm";
		提示:将短的那个串进行长度依次递减的子串与较长的串比较。
	5.对字符串中字符进行自然顺序排序。
		提示:
			1.字符串变成字符数组。
			2.对数组排序,选择,冒泡,Arrays.sort().
			3.将排序后的数组变成字符串。


StringBuffer:
	1.java.lang.StringBuffer 代表可变的字符序列,jdk1.0中声明,可以对字符串内容进行增删,此时不会产生新的对象。
	2.很多方法与 String 相同。
	3.作为参数传递时,方法内部可以改变值。
	

String, StringBuffer 和 StringBuilder 三者的异同? 
	1.String : 不可变的字符序列;底层使用 char[] 存储;
	2.StringBuffer : 可变的字符序列;线程安全,效率低;底层使用 char[] 存储;
	3.StringBuilder : 可变的字符序列;jdk5.0 新增的,线程不安全的,效率高;底层使用 char[] 存储;
	4.String,StringBuffer,StringBuilder 效率对比
		从高到低排列: StringBuilder > StringBuffer > String
	
	StringBuffer 源码分析:
		String str = new String();   // new char[0];
		String str1 = new String("abc");  //  new char[]{'a','b','c'};
		
		StringBuffer sb1 = new StringBuffer(); 
					// char[] value = new char[16] : 底层创建了一个长度是16的数组。
		sb1.append('a');    // value[0] = 'a';
		sb1.append('b');    // value[1] = 'b';
		sb1.append('c');    // value[2] = 'c';
		
		StringBuffer sb2 = new StringBuffer("abc");   //char[] value = new char["abc".length];
		
	扩容问题:
		如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。默认情况下,扩容为原来容量的 2 倍 + 2,同时将
	原有数组中的元素复制到新的数组中。
		当 append 和 insert 时,如果原来 value 数组长度不够,可扩容。
		方法链的原理:
		public StringBuilder append(String str) {
			super.append(str);
			return this;
		}
	
	StringBuffer 类的常用方法:
		1.StringBuffer append(xxx) : 提供了很多的 append() 方法,用于进行字符串拼接。
		2.StringBuffer delete(int start, int end) : 删除指定位置的内容
		3.StringBuffer replace(int start, int end, String str) : 把[start, end) 位置替换为 str.
		4.StringBuffer insert(int offset, xxx);  在指定位置插入 xxx
		5.StringBuffer reverse() : 把当前字符序列逆转
		
		总结:
			增:append(xxx)
			删:delete(int start, int end)
			改:setCharAt(int n, char ch) / replace(int start, int end, String str)
			查:charAt(int n)
			插:insert(int offset, xxx)
			长度:length()
			遍历:for() + charAt()/toString()
	
		在开发中建议大家使用:StringBuffer(int capacity) 或 StringBuilder(int capacity);
		

JDK8 之前日期时间 API:
	1.java.lang.System 类:
		System 类提供的 public static long currentTimeMills() 用来返回当前时间与 1970年1月1日0时0分0秒之间
		以毫秒为单位的时间差。时间戳。
			此方法适于计算时间差。
		计算世界时间的主要标准:
			UTC
			GMT
			CST
			
	2.java.util.Date 类
		表示特定的瞬间,精确到毫秒
		构造器:
			Date() : 使用无参构造器创建的对象可以获取本地当前时间。
			Date(long date)
		常用方法:
			getTime() : 返回自 1970年1月1日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
			toString() : 把此 Date 对象转换为以下形式的 String : dow mon dd hh:mm:ss zzz yyy 
				其中: dow 是一周中的某一天(sun, mon,tue,wed,thu, fri,sat), zzz 是时间标准。
				
	3.java.text.SimplateDateFormat 类
		1.Date类的 API 不易于国际化,大部分被废弃了,java.text.SimpleDateFormat 类是一个不与语言环境有关的方式来格式化
			和解析日期的具体类。
		2.它允许进行格式化:日期 ——> 文本、 解析:文本 ——> 日期
		3.格式化:
			SimpleDateFormat() : 默认的模式和语言环境创建对象
			public SimpleDateFormat(String pattern) : 该构造方法可以用参数 pattern 指定的格式创建一个对象,该对象调用:
				public String format(Date date) : 方法格式化时间对象 date
		4.解析:
			public Date parse(String source) : 从给定的字符串的开始解析文本,以生成一个日期。
	
	4.java.util.Calendar(日历)类
		1.Calendar 是一个抽象基类,主要用于完成日期字段之间相互操作的功能。
		2.获取 Calendar 实例的方法
			1.使用 Calendar.getInstance()方法。
			2.调用它的子类 GregorianCalendar 的构造器
		3.一个 Calendar 的实例是系统时间的抽象表示,通过 get(int field) 方法来取得想要的时间信息。
			比如:YEAR,MONTH,DAY_OF_WEEK,HOUR_OF_DAY,MINUTE,SECOND
			public void set(int field, int value)
			public void add(int field, int amout)
			public final Date getTime()
			public final void setTime(Date date)
		注意:
			获取月份时:一月是0,二月是1,以此类推,12月是11
			获取星期时:周日是1,周二是2,,,周六是7
			
			
Instant : 瞬时
	时间线上的一个瞬时点。可能被用来记录应用程序中的事件时间。
	
Java 比较器:
	Java 实现对象排序的方式有两种:
		1.自然排序:java.lang.Comparable
		2.定制排序:java.util.Comparator
		
	说明:
		Java 中的对象,正常情况下,只能进行比较 == 或 !=.不能使用 > 或 < 的。
		但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。
		如何实现?
		使用两个接口中的任何一个:Comparable 或 Comparator
		
	Comparable 接口的使用
		1.像String,包装类等实现了 Comparable 接口,重写了 compareTo() 方法,给出了比较两个对象大小的方式
		2.像 String,包装类重写 compareTo() 方法以后,进行了从小到大的排列。
		3.重写 compareTo() 的规则:
			1.如果当前对象 this 大于形参对象 obj, 则返回正整数,
			2.如果当前对象 this 小于形参对象 obj, 则返回负整数,
			3.如果当前对象 this 等于形参对象 obj, 则返回零。
		4.对于自定义类来说,如果需要排序,我们可以让自定义类实现 Comparable 接口,重写 compareTo(obj) 方法,
			在 compareTo(obj) 方法中指明如何排序。
			
			
	定制排序:java.util.Comparator
		1.当元素的类型没有实现 java.lang.Comparable 接口而又不方便修改代码,或者实现了 java.lang.Comparable 接口的排序规则
			不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序,强行对多个对象进行整体排序的比较。
		2.重写 compareTo(obj1,obj2)方法,比较 obj1 和 obj2 的大小:
			如果方法返回正整数,则表示 obj1 大于 obj2;
			如果返回 0,表示相等;
			返回负整数,表示 obj1 小于 obj2.
		3.可以将 Comparator 传递给 sort 方法,从而允许在排序顺序上实现精确控制。、
		4.还可以使用 Comparator 来控制某些数据结构的顺序,或者为那些没有自然顺序的对象 collection 提供排序。
Comparable 接口与 Comparator 的使用对比:
   		1.Comparable 接口的方式一旦确定,保证 Comparable 接口实现类的对象在任何位置都可以进行比较大小。
   		Comparator 接口属于临时性的比较。
   		
System、Math、
BigInteger:表示不可变的任意精度的整数。
BigDecimal: 要求数字精度比较高。

你可能感兴趣的:(Java,基础)