### java.lang包
不需要導入
***
### Object類
Object類是所有類的父類,也是唯一一個沒有父類的類
**常見方法:**
**①public boolean equals(Object obj)比較兩個引用數據類型是否相等**
***
**面試題:equals與==的區別**
==既能比較基本數據類型,又能比較引用數據類型,比較基本數據類型時,比較的是字面真值;比較引用數據類型時比較的是引用值是否相等(即地址是否相等)
equals只能比較引用數據類型,而且子類可以通過重寫的方式定制比較規則
***
**面試題:String s1 = "hello";與String s2 = new String("hello");的區別**
String s1 = "hello"只在字符串常量池中創建了一個對象;
String s2 = new String("hello");在在字符串常量池中和堆中各創建一個對象
#### 內存模型
String s1 = "hello";

String s2 = new String("hello");

***
**②public int hashCode()返回十進制整數,唯一標識一個對象**
如果兩個對象用equals方法比較返回true,這兩個對象的hashCode一定一樣;如果兩個對象的hashCode一樣,equals不一定返回true
***
**③public String toString() 返回 類名@hashcode**
***
**④protected void finalize() throws Throwable { }**
**面試題:final,finally,finalize有什么區別**
final能修飾類,方法,屬性
final修飾類,該類不能被繼承
final修飾方法,該方法不能被重寫
final修飾屬性(常量),程序運行時不可以改變
finally一般用于異常處理,存放一定要執行的代碼,大多數用于回收資源
finalize與垃圾回收機制有關,沒有引用指向的對象,JVM會視其為垃圾對象,JVM會自動調用這個對象的finalize方法,釋放內存空間
***
### 包裝類
在Java中,基本數據類型不被視為對象,包裝類可以將基本數據類型包裝成對象,從而可以調用一些方法
**基本數據類型對應的包裝類**

~~~
public class BaoZhuangClassDemo1 {
public static void main(String[] args) {
// 包裝類的功能
// 1.進行與字符串之間的相互轉換
// ①基本數據類型轉字符串
// int num1 = 200;
// String strNum1 = Integer.toString(num1);// 包裝類轉換
// System.out.println(strNum1+1);
// double num2 = 9.999;
// String strNum2 = Double.toString(num2);
// // String的valueOf()也能將基本數據類型轉成字符串
// String strNum3 = String.valueOf(num1);
// String strNum4 = String.valueOf(num2);
// boolean b1 = false;
// String strB1 = Boolean.toString(b1);
// System.out.println(strB1);
// char c[] = {'h','e','l','l','o'};
// String c1 = new String(c);
// System.out.println(c1);
// ②字符串轉基本數據類型
String strNum1 = "123";
int num1 = Integer.parseInt(strNum1);
// 特殊情況
boolean b1 = Boolean.valueOf(strNum1);
System.out.println(b1);
// 轉字符數組
char c[] = strNum1.toCharArray();
for(char c1:c) {
System.out.println(c1);
}
// 2.能夠像基本數據類型一樣存值
// int num = 1;
// num = null;// 基本數據類型不能為null
// 自動裝箱
// Integer num1 = 2;// 相當于Integer num1 = new Integer(2);
// Integer num2 = 5;
// 自動拆箱--默認調用intValue()轉成了基本數據類型
// System.out.println(num1+num2);
}
}
~~~
***
### String字符串常量
String代表一組不可變的字符串(對它的任何改動都不是在原有的基礎上進行的,都是在創建新的字符串)
**String是不能被繼承的,因為是final類**
**常用方法:**
~~~
public class StringDemo1 {
public static void testStr1() {
String str = "";
for(int i = 0;i < 100000;i++) {
str += i;
}
}
public static void testStr2() {
String str = "";
for(int i = 0;i < 100000;i++) {
str.concat(String.valueOf(i));
}
}
public static void main(String[] args) {
// 字符串常量
// String str1 = "hello";
// String str2 = new String("hello");
// str1 = str1 + "world";
// System.out.println(str1);
// byte[] b = str1.getBytes();
// for(byte b1:b) {
// System.out.println(b1);
// }
// System.out.println(new String(b));
// System.out.println(str1 == str2);
// System.out.println(str1.equals(str2));
// 常用方法
// 1.equalsboolean equals(String) 比較兩個字符串字面量是否相等
System.out.println("hello".equals("Hello"));
// 2.boolean equalsIgnoreCase(String) 忽略大小寫比較
System.out.println("hello".equalsIgnoreCase("Hello"));
System.out.println("hello".toUpperCase());
System.out.println("HELLO".toLowerCase());
// 3.char charAt(int) 返回指定索引處的字符
System.out.println("hello".charAt(3));
// 4.String substring(int begin) 截取begin之后的所有子串
System.out.println("abcdefghijklmn".substring(4));
// 5.String substring(int begin,int end) 截取begin到end-1的字串
System.out.println("abcdefghijklmn".substring(4,6));
// 6.String trim() 專門用來去開始和結尾的空格
System.out.println(" hello world ".trim());
String username = "abcde";
if(username == null || username.trim().equals("")) {
System.out.println("您的用戶名填寫有誤");
}
// 7.int length( ) 返回字符串長度
System.out.println(" hello".length());
// 數組.length 字符串.length()方法 集合.size()
for(int i = 0;i < username.length();i++) {
System.out.println(username.charAt(i));
}
// 8.int indexOf/lastIndexOf(char)
// indexOf返回參數在字符串當中第一次出現的索引值,找不到返回-1
System.out.println("fgdfgdhdsdfsdfghasdash".indexOf("z"));
System.out.println("fgdfgdhgddsdfsdfghasdash".lastIndexOf("gd"));
System.out.println("fgdfgd".indexOf("gd",2));
// lastIndexOf("gd",7),索引值7之前gd最后一次出現的索引值
System.out.println("fgdfgdaaaaadasd".lastIndexOf("gd",7));
// 9.String concat(String str) 連接--不重要
long start = System.currentTimeMillis();
testStr2();
long end = System.currentTimeMillis();
System.out.println((end-start)/1000);
// 10.String[] split(String regex) 切
String suit[] = "黑桃,紅桃,方片,草花".split(",");
for(String s:suit) {
System.out.println(s);
}
String s1[] = "黑桃^紅桃^方片^草花".split("\\^");
System.out.println(s1.length);
for(String s:s1) {
System.out.println(s);
}
String s2[] = "黑打發士大夫黑都發生黑水電費黑".split("黑");
System.out.println(s2.length);
for(String s:s2) {
System.out.println("^^"+s);
}
System.out.println("hello".replace('l', 'z'));
System.out.println("hello".startsWith("hee"));// false
System.out.println("hello".endsWith("llo"));// true
}
}
~~~
***
### StringBuffer類
StringBuffer代表一組可變的字符串面,對它所有的改動,都是在原有字符串基礎上進行的,不生成新的對象
***
### StringBuilder類
**面試題:String,StringBuffer,StringBuilder之間有什么區別?**
String是字符串常量,不可改變,對它的改動都不是在原有基礎上進行,都創建了新的對象;
StringBuffer與StringBuilder代表一組可以改變的字符串,StringBuffer是線程安全的(數據同步),StringBuilder是線程不安全的(數據不同步),效率高于StringBuffer,單線程操作建議使用StringBuilder
***
### Math類
**final類不能被繼承**
~~~
public class MathDemo1 {
public static void main(String[] args) {
// 常用方法
// 1.Math.random()生成一個[0,1)的隨機數
double num1 = Math.random();
double num2 = 9.9;
System.out.println(Math.abs(num2));
System.out.println(Math.ceil(num2));
System.out.println(Math.floor(num2));
System.out.println(Math.max(-7, 2));
System.out.println(Math.min(-7, 2));
System.out.println(Math.round(-4.6));
}
}
~~~
***
### Date與Calendar類
~~~
import java.util.Calendar;
import java.util.Date;
public class DateDemo1 {
public static void main(String[] args) {
// 1.java.util.Date類
Date date1 = new Date();
System.out.println(date1.getTime());
// date.getTime()得到的是從1970年1月1日00:00:00到系統當前時間經過的毫秒數字
// 2.Calendar
Calendar date2 = Calendar.getInstance();
System.out.println(date2.getTime().getTime());
// set方法設置時間,注意:月份從0開始,即0代表1月
date2.set(1989,9,8,17,36,55);
System.out.println(date2.getTime());
System.out.println(date2.get(Calendar.YEAR));
System.out.println(date2.get(Calendar.MONTH));
System.out.println(date2.get(Calendar.DATE));
System.out.println(date2.get(Calendar.DAY_OF_YEAR));
System.out.println(date2.get(Calendar.HOUR));
}
}
~~~
### SimpleDateFormat類
功能:字符串與日期之間的轉換
~~~
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo1 {
public static void main(String[] args) {
// 實例化SimpleDateFormat對象
// 參數--轉換格式
Date date1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM月-dd HH:mm:ss");
// format將Date轉成String
String strDate1 = sdf.format(date1);
System.out.println(strDate1);
// parse將String轉成Date
String strDate2 = "2018-4月-28 13:14:15";
try {
Date date2 = sdf.parse(strDate2);
System.out.println(date2);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
~~~
***
#### 總結:
①Object類,它是所有類的父類
②java.lang,不需要手動導入
③了解equals,hashCode,toString,finalize方法
④包裝類(與字符串之間的互相轉換)
**包裝類.toString(基本數據變量)**
**包裝類.valueOf(字符串)**
**包裝類.parseXXX(字符串)**
⑤字符串
String,StringBuffer,StringBuilder的區別?
String s = "hello"與String s = new String("hello")的區別?
**兩個StringBuffer或兩個StringBuilder比較字面量時,切記要調用toString()轉成字符串常量,再調用equals方法**
***
**常用方法:**
equals
equalsIgnoreCase
substring
length()
charAt()
trim()
indexOf(),lastIndexOf()
split-->返回值是一個String[]
startsWith(),endsWith()
append()追加--StringBuffer的方法
***
⑥Math類
⑦Date和Calendar日期
⑧SimpleDateFormat日期轉換類