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 }
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 }
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 }
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);
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 }
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 }
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 }