lesson Twelve 2018-05-02 01:24:19 foreach: JAVA5的新特征之一,在遍曆數組、集合方面 語法:foreach( part1:part2 ) {part3} 的語法: part1:定義一個局部變數,類型與part2中的對象元素的類型一致. part2:被遍歷 ...
lesson Twelve 2018-05-02 01:24:19
foreach:
JAVA5的新特征之一,在遍曆數組、集合方面
語法:foreach( part1:part2 ) {part3} 的語法:
part1:定義一個局部變數,類型與part2中的對象元素的類型一致.
part2:被遍歷對象obj,一個數組對象,或者是帶有泛性的集合.
part3:迴圈體
1 String str[] = new String[5];
2 str[0]="字元串數組1";
3 str[1]="字元串數組2";
4 str[2]="字元串數組3";
5 str[3]="字元串數組4";
6 str[4]="字元串數組5";
7 for (String string : str) {
8 System.out.println(string);
9 }
foreach
equals:
位於java.lang.Object類下,java.lang.Object類是所有類的根父類。
1.只能處理引用類型變數
2.equals 比較兩個引用類型變數的地址值是否相等
==:
1.基本數據類型,根據基本數據類型的值判斷是否相等,相等返回true,反之返回false,兩端數據類型可以不同,在不同的情況下,也可以返回true/false
2.引用數據類型,比較引用類型變數的地址值是否相等
1 public static void main(StringDemo1[] args) {
2 String str1 = "AA";
3 String str2 = "AA";
4 String str3 = new String("AA");
5
6 System.out.println(str1 == str2);//true
7 System.out.println(str1.equals(str2));//true
8
9 System.out.println(str1==str3);//false 因為是引用數據類型,比較的是首地址值
10 System.out.println(str1.equals(str3));//true 因為String已經重寫了equals方法,比較的是內容
11
12
13 }
equals
1 //重寫equals方法
2 public boolean equals(Object obj) {
3 if (this == obj) {
4 return true;
5 } else if (obj instanceof Order) {
6 Order o1 = (Order) obj;
7 return this.orderId == o1.orderId&& this.orderName.equals(o1.orderName);
8 }
9 return false;
10
11 }
嘗試重寫equals方法
String類對象的記憶體結構
包裝類:
8種基本數據類型各對應著一個類,此類即為包裝類。
1.裝箱:基本數據類型與包裝類之間的轉換。基本數據類型--->對應的包裝類 :調用包裝類的構造器。
1 //裝箱:基本數據類型--->對應的包裝類 :調用包裝類的構造器。
2 Integer integer = new Integer(i);
3 System.out.println(integer.toString());
4
5 integer = new Integer("123abc");
6 // 異常: java.lang.NunberFormatException
7 System.out.println(integer.toString());
8
9 Float f = new Float("12.3f");
10 System.out.println(f);
11
12 boolean b = false;
13 Boolean b1 = new Boolean("false");
14 System.out.println(b1);
裝箱:基本數據類型--->對應的包裝類
2.折箱:包裝類與基本數據類型之間的轉換。包裝類--->基本數據類型: 調用包裝類的XXXValue()方法
1 int i1 = integer.intValue();
2 float f1 = f.floatValue();
3 boolean b2 = b1.booleanValue();
4 System.out.println(i);
5 System.out.println(f1);
6 System.out.println(b2);
折箱:包裝類--->基本數據類型
3.基本數據類型,包裝類,及String之間的轉換:
1 int i1 = 10;
2
3 String str1 = String.valueOf(i1);//基本數據類型、包裝類--->String類:調用String類的靜態的重載的valueOf()方法
4 System.out.println(str1);
5
6 int i2 =Integer.parseInt(str1);//String類--->基本數據類型、包裝類:調用包裝類的parseXXX()方法
7 System.out.println(i2);
基本數據類型、包裝類,和String之間的轉換
1 //JDK5.0以後,自動裝箱和折箱
2 int a = 20;
3 Integer a1 = a;//自動裝箱
4
5 int a2 = a1;//自動折箱
toString:
toString() java.lang.Object 類的toString()方法的定義如下:
public String toString() {
return getClass().getName() +
"@" + Integer.toHexString(hashCode());
}
1.當列印一個對像的引用時,實際上預設調用的就是這個對像的toString()方法
2.當列印的對像所在的類,沒有重寫object中的toString()方法,那麼,調用的就是object中定義的toString方法,
返回此對像所在的類及對應的堆空間對像實體的首地址值
3.當我們列印的對像所在的類重寫了toString()方法,調用的就是重寫的toString方法
通常這樣重寫,將對像的屬性信息返回。
1 public class demo1 {
2 public static void main(String[] args) {
3 Person person = new Person();
4 System.out.println(person);
5 System.out.println(person.toString());
6 }
7 }
8
9 class Person {
10 private String name = "XiaoMing";
11 private int age = 22;
12
13 @Override
14 // 自動生成
15 public String toString() {
16 return "Person [name=" + name + ", age=" + age + "]";
17 }
18
19 //手動實現
20 // public String toString() {
21 // return "name:" + name + " age:" + age;
22 // }
23 }
toString的重寫
static:
靜態的,可以修飾屬性(類變數)、方法、代碼塊(初始化塊)、內部類。
修飾屬性:
1.1.由類創建的所有對像,都共用這一個屬性
1.2.當其中一個對像對此屬性進行修改,會導致其它對像對此屬性的一個調用。
1.3.類變數,static修飾的屬性,隨著類的載入而載入,而且獨一份
1.4.實例變數,非static修飾的屬性,各個對像都獨立擁有,隨著對像的創建而載入
1.5.靜態的變數可以直接通過“類.類變數”的形式來調用
1.6.類變數的載入是要早於對像。
1.7.類變數存在於靜態域中。
修飾方法(類方法):
2.1.隨著類的載入而載入,在記憶體中也是獨一份
2.2.可以直接通過“類.方法”的方式調用
2.3.內部可以調用靜態的屬性或靜態的方法,而不能調用非靜態的屬性或方法。反之,非靜態的方法是可以調用靜態的屬性或靜態的方法
靜態的方法內是不可以有this或super關鍵字的!
註:靜態的結構(static的屬性、方法、代碼塊、內部類)的生命周期要早於非靜態的結構,同時被回收也要晚於非靜態的結構
1 public class demo1 {
2 public static void main(String[] args) {
3 sportsMan m1 = new sportsMan("aa", 23);
4 sportsMan m2= new sportsMan("bb", 21);
5 m1.name= "cc";
6 m2.age= 22;
7 m1.nation="China";
8
9 System.out.println(m1);
10 System.out.println(m2);
11 System.out.println(m1.nation);
12 System.out.println(m2.nation);
13 System.out.println(sportsMan.nation);
14 }
15 }
16
17 class sportsMan{
18 //實例變數
19 String name;
20 int age;
21 //類變數
22 static String nation;
23 public sportsMan(String name, int age) {
24 super();
25 this.name = name;
26 this.age = age;
27 }
28 @Override
29 public String toString() {
30 return "sportsMan [name=" + name + ", age=" + age + ", nation="
31 + nation + "]";
32 }
33 }
static
1 public class TestScore {
2
3 Vector v = new Vector();
4
5 @Test
6 public void Score(){
7 //創建Scanner對像
8 Scanner scanner = new Scanner(System.in);
9 System.err.println("請輸入成績,以輸入負數代表結束:");
10 int maxScore = 0; //存放最高分
11
12 for(;;){
13 //1.從鍵盤輸入成績(以負數代表輸入結束)
14 int score = scanner.nextInt();
15 if (score<0) {
16 break;
17 }
18 //2.求出所有輸入的正的成績中的最高分
19 if (maxScore<score) {
20 maxScore = score;
21 }
22 //3.把輸入的成績填入由 Vector v = new Vector創建的對像v中。
23 Integer score1 = score;//把基本數據類型轉為包裝類
24 v.addElement(score1);//addElenment方法的參數須為對像
25 }
26
27 //4.通過v.elementAt(i)依次獲取填入v中的元素並判斷分數等級同時輸出。
28 for (int i = 0; i < v.size(); i++) {
29 int score = (int)v.elementAt(i);
30 System.out.println(score);
31 // System.out.println( v.elementAt(i));
32 char level;
33 if(maxScore - score <= 10){
34 level = 'A';
35 }else if(maxScore - score <= 20){
36 level = 'B';
37 }else if(maxScore - score <= 30){
38 level = 'C';
39 }else{
40 level = 'D';
41 }
42 System.out.println("學生成績為:" + score + ",等級為:" + level);
43 }
44 }
45 }
練習