foreach/equals/包装类/toString/static




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 }
练习

猜你喜欢

转载自www.cnblogs.com/Fkuennhvo/p/8978407.html