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 }
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 }
上一篇: 儿子不服输
下一篇: 吃野菜好吗,几大野菜的功效你知道吗
推荐阅读
-
foreach/equals/包装类/toString/static
-
初识String类中的toString()和equals()
-
PAI中的Object类、toString、equals方法
-
Java:object类 中常用equals()和 toString()方法的重写
-
java类中的equals、hashCode和toString方法
-
Object最高父类的方法应用 equals和toString
-
java中Object类的方法之toString 、equals
-
Object类中的equals()、toString()的使用和== 和 equals() 区别
-
foreach/equals/包装类/toString/static
-
Object类和类中常用的方法:hashCode(),getClass(),toString(),equals(Object obj)(默认),clone();