欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

foreach/equals/包装类/toString/static

程序员文章站 2022-05-03 23:04:34
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:循环体

foreach/equals/包装类/toString/static
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.引用数据类型,比较引用类型变量的地址值是否相等

foreach/equals/包装类/toString/static
 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
foreach/equals/包装类/toString/static
 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类对象的内存结构

foreach/equals/包装类/toString/static


包装类:

8种基本数据类型各对应着一个类,此类即为包装类。

  1.装箱:基本数据类型与包装类之间的转换。基本数据类型--->对应的包装类 :调用包装类的构造器。

foreach/equals/包装类/toString/static
 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()方法

foreach/equals/包装类/toString/static
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之间的转换:

foreach/equals/包装类/toString/static
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方法

通常这样重写,将对像的属性信息返回。

foreach/equals/包装类/toString/static
 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的属性、方法、代码块、内部类)的生命周期要早于非静态的结构,同时被回收也要晚于非静态的结构

foreach/equals/包装类/toString/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

foreach/equals/包装类/toString/static




foreach/equals/包装类/toString/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 }
练习