day13
方法重寫
對于一個方法而言: 區分方法 通過方法名找方法 通過參數清單來确定方法
方法重寫:
發生繼承關系、實作關系 父類不滿足子類的需求 子類重寫父類中的方法
什麼情況下會發生:
1:發生繼承
2:方法名同名
3:參數清單要一模一樣 (順序 個數 類型)
4:子類的傳回值類型<=父類的傳回值類型(引用) 基本類型一模一樣
5:子類的修飾符>=父類的修飾符 (父類中的修飾符不能是private)
6:子類抛出的異常<=父類抛出的異常 (了解:可以認為任意一個方法都會對外抛出運作時異常)
參一反小修大異小
main()
- public:保證能夠調用到
- static:保證外界調用無需建立對象
- void: jvm無需傳回值
- String[] args: 可以傳入 調用main方法時 可以傳入實際參數
常用類
Scanner
學習使用Scanner
- hasNextXXX 擷取掃描到的資料是否是XXX類型
- nextXXX 擷取下一個掃描到的内容轉為XXX類型(轉換過程中有可能存在問題)
重新建立Scanner對象 指定檔案作為輸入源
Scanner sc = new Scanner(new File(“C:\Users\wawjy\Desktop\a.txt”));
String
String:
字元串: 一組字元序列 (不可變的串)
建立String對象:
- new String();
- new String(“abc”);
- "love";
- new String(buf,2,2);//通過位元組數組建立
常見方法
public class Test02 {
public static void main(String[] args) {
// 建立一個String對象
String str = "ilovejavaandlaoxue";
//charAt(int index);
char ch = str.charAt(3);
System.out.println("傳回目前索引位置上的指定字元:"+ch);
//codePointAt(index)
int num = str.codePointAt(0);
System.out.println("傳回指定索引位置上元素的代碼點:"+num);
//compareTo(String)
String cStr = "ilovejavaandlaoxu";
num = str.compareTo(cStr);
System.out.println("比較兩個字元串的大小:"+num);
//compareToIgronCase(String)
cStr = "ILOVEJAVAANDLAOXUE";
num = str.compareToIgnoreCase(cStr);
System.out.println("比較兩個字元串的大小(忽略大小寫):"+num);
//concat(String)
cStr = "andgirl";
str = str.concat(cStr);
System.out.println("拼接之後的結果是:"+str);
//copyValueOf(char[])
char[] chs = new char[] {'i','l','o','v','e'};
str = String.copyValueOf(chs);
System.out.println("建立新的字元串:"+str);
str = String.copyValueOf(chs,1,4);
System.out.println("建立新的字元串:"+str);
str = "憨憨.avi";
boolean flag = str.endsWith(".avi");
System.out.println("str是否是.avi格式:"+flag);
//getBytes
byte[] buf = str.getBytes();
System.out.println("擷取字元串的位元組數組:"+Arrays.toString(buf));
//getChars();
chs = new char[10];
// 從str的2索引處開始 到str的第5個索引結束(不包含) 複制到chs字元數組中 從第1個位置開始
str.getChars(2,6, chs, 1);
System.out.println("擷取字元串的字元數組:"+Arrays.toString(chs));
//indexOf 傳回負數代表未找到
str = "hehe.avi.png";
int index = str.indexOf(".");
System.out.println(".在string中第一次出現的位置是:"+index);
index = str.indexOf(100);
System.out.println("e在string中第一次出現的位置是:"+index);
index = str.indexOf(".",5);
System.out.println(".在string中第5個索引位置開始計算,第一次出現的位置是:"+index);
index = str.lastIndexOf(".");
System.out.println(".在string中最後一次出現的位置是:"+index);
//isEmpty()
System.out.println("檢視數組是否為null:"+str.isEmpty());
//repleace
str = "hehe.avi.png";
str = str.replace(".", "+");
System.out.println("替換之後的結果:"+str);
//splite:
str = "login?unme=zs&pwd=zs";
String[] strs = str.split("\\?");
for(String string:strs) {
System.out.println(string);
}
System.out.println("======");
String parms = strs[1];
strs = parms.split("&");
for(String string:strs) {
String[] ss = string.split("=");
System.out.println(ss[1]);
}
//subString
str = "login?unme=zs&pwd=zs";
str = str.substring(4);// 從4索引開始截取到結束
System.out.println("截取字元串:"+str);
str = str.substring(2, 7);//從2索引開始截取 到索引為7結束不包含7
System.out.println("截取字元串:"+str);
//大小寫轉換
str = "login?unme=zs&pwd=zs";
str = str.toUpperCase();
System.out.println("轉為大寫:"+str);
str = str.toLowerCase();
System.out.println("轉為小寫:"+str);
//通過靜态方法建立String對象
String str1 = String.valueOf(123);
System.out.println(str1);
//對象轉字元串 其實就是調用目前對象的toString方法
User u = new User(10);
String str2 = String.valueOf(u);
System.out.println(str2);
}
}
class User{
private int age;
public User() {
// TODO Auto-generated constructor stub
}
public User(int age) {
super();
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [age=" + age + "]";
}
}
StringBuffer
之是以能夠可變的原因,底層就是一個字元數組,動态數組。
public class Test04 {
public static void main(String[] args) {
// 建立StringBuffer
StringBuffer sb = new StringBuffer();
// 容量16
System.out.println("通過空構造器建立的StringBuffer的容量:"+sb.capacity());
//添加元素
sb.append(true);
sb.append(false).append("123").append("134");// 鍊式程式設計
System.out.println(sb);
System.out.println("目前sb對象中的字元串長度:"+sb.length());
//添加元素
sb.insert(1, "heihei");
System.out.println(sb);
}
}
StringBuilder
StringBuilder和StringBuffer 都繼承了AbstractStringBuilder
StringBuffer效率低于StringBuilder
StringBuffer安全性要高于StringBuilder
一般情況下使用StringBuilder
jdk9之後 String中存儲資料通過byte數組存儲 + 變量
jdk中對于String存儲時的内容消耗極大降低
包裝類
8大基本資料類型 -> 8個包裝類
byte->Byte short->Short long ->Long float->Float double->Double boolean->Boolean
char ->Character int ->Integer
jdk12 Integer中的所有構造器都過時 通過valueOf方法擷取int對應的Integer對象
- String->int Integer.parseInt();// 可能報異常
- int ->String String.valueOf()
jdk1.5之後支援自動拆裝箱,本質上就是調用了
裝箱:Integer.valueOf()
拆箱:對象.intValue()
9**
反之會重新建立一個新的Integer對象
public class Test02 {
public static void main(String[] args) {
Integer in1 = 123;//jdk1.5之後支援自動裝箱 Integer.valueOf(123);
int num = in1;//jdk1.5之後支援自動拆箱 in1.intValue();
Integer in2 = 88;
Integer in3 = 88;
System.out.println(in2==in3);
in2 = 127;
in3 = 127;
System.out.println(in2==in3);
}
}
tips:
字面值建立Boolean對象時 隻能指定true和false 并且建立的對象也是對應的true和false
字元串建立Boolean對象是 隻要字元是true/false 無所謂大小寫 得到對應的Boolean對象就是與之對應的true和false
其它所有字元串指派都是false
時間Date
空構造器對象建立出的是目前系統時間對象
public class Test01 {
public static void main(String[] args) {
//建立Date對象
Date d = new Date();
System.out.println(d);
//通過帶參構造器建立對象
Date date = new Date(1563960432618L);
System.out.println(date);
System.out.println(d.after(date));
System.out.println(d.before(date));
//擷取毫秒數
long dateTime = System.currentTimeMillis();
System.out.println(dateTime);
}
}
格式化輸出時間:
public class Test02 {
public static void main(String[] args) {
//建立時間對象
Date date = new Date();
//創SimpleDateFormat對象
SimpleDateFormat sd = new SimpleDateFormat();
//設定一下輸出的内容格式
sd.applyPattern("yyyy年MM月dd日 HH時mm分ss秒 是一年中的第D天 W w");
//調用格式化方法格式化日期
String str = sd.format(date);
System.out.println(str);
//建立對象并且指定格式化的内容
SimpleDateFormat ss = new SimpleDateFormat("yy/MM/dd hh:mm:ss");
System.out.println(ss.format(date));
}
}