----------android培训、java培训期待与您交流!-----------
在java中所有的类都有一个公共的父类Object,一个类只要没有明显的继承一个类,则肯定是Object类的子类。
常用方法
Object() 构造方法
equals(Object obj) 对象比较
hashCode() 取得hash码
toString() 打印对象信息
直接使用toString打印信息
class Demo1{ //定义Demo类,实际上就是继承了Object类
};
public class Demo{
public static void main(String args[]){
Demod = new Demo() ; //实例化Demo对象
System. out.println("不加toString()输出:" +d) ;
System. out.println("加上toString()输出:" +d.toString()) ;
}
};
结果:
不加toString()输出:demo.Demo@6af62373
加上toString()输出:demo.Demo@6af62373
PS:此时打印出的信息,不适合用户查看,所以需要覆写toString方法
覆写toString方法输出信息
class Person{
private String name ; //定义name属性
private int age ; //定义age属性
public Person(String name, int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
};
public class Demo{
public static void main(String args[]){
Personper = new Person("hello" ,30) ; // 实例化Person
System. out.println("对象信息:" + per) ;
}
};
使用equals()方法
此方法功能就是对象的比较,实际上String也是Object的子类,所以在String中已经实现了此方法,如果现在一个类需要实现对象的比较操作,则直接在类中覆写此方法即可
PS:Object类提供的equals方法默认是比较地址的,不能进行内容的比较
对象的比较操作
class Person{
private String name ; //定义name属性
private int age ; //定义age属性
public Person(String name, int age){
this.name = name ;
this.age = age ;
}
public boolean equals(Object obj){
if(this ==obj){ //地址相等
return true ; //肯定是同一个对象
}
if(!(obj instanceof Person)){ //不是Person对象
return false ;
}
Personper = (Person) obj ; //向下转型
if(per.name .equals(this.name)&&per. age == this.age ){
return true ; //依次比较内容
} else{
return false ;
}
}
public String toString(){
return "姓名:" + this.name + ";年龄:" + this.age ;
}
};
public class Demo{
public static void main(String args[]){
Personper1 = new Person("hello" ,30) ; // 实例化Person
Personper2 = new Person("hello" ,30) ; // 实例化Person
System. out.println(per1.equals(per2)?"是同一个人!" : "不是同一个人!" ) ;
System. out.println(per1.equals("hello" )?"是同一个人!" : "不是同一个人!" ) ;
}
};
结果:
是同一个人!
不是同一个人!
接收任意引用类型的对象
Object类所有对象的父类,则所有的对象都可以向Object进行转换,一切的引用数据都可以使用Object进行接收
使用Object接收接口实例
interface A{
public String getInfo();
}
class B implements A{
public String getInfo(){ //覆写方法
return "Hello World!!!" ;
}
};
public class Demo{
public static void main(String args[]){
Aa = new B() ; //向上转型,为接口实例化
Object obj =a ; //使用Object接收,向上转型
Ax = (A)obj ; //向下转型
System. out.println(x.getInfo()) ;
}
};
结果:Hello World!!!
PS:虽然接口不能继承一个类,但是依然是Object的子类,因为接口本身是引用数据类型,所以可以进行向上转型的操作
包装类
就是将基本数据类型进行包装成对象类。包装类和基本数据类型的关系如下
基本数据类型 包装类
int Integer
char Character
short Short
long Long
float Float
double Double
boolean Boolean
byte Byte
从JDK中可以发现,Integer,Byte,Float,Double,Short,Long都属于Number,Character和Boolean都属于Object的直接子类
Number类是一个抽象类,主要是将数字包装类中的内容变为基本数据类型,Number类中常用方法如下
byteValue():以byte形式返回指定的数值
doubleValue();以double形式返回指定的数值
floatValue();以float形式返回指定的数值
intValue();以int形式返回指定的数值
longValue();以long形式返回指定的数值
shortValue();以short形式返回指定的数值
装箱和拆箱的概念
将一个基本数据类型,变为包装类,称为装箱。
将包装类变为基本数据类型,称为拆箱.
public class Demo {
public static void main(String args[]) {
int x = 30; //基本数据类型
Integeri = new Integer(x) ; //装箱:将基本数据类型变为包装类
int temp = i.intValue() ; //拆箱:将一个包装类变为基本数据类型
}
}
包装类的应用
包装类在实际中用的最多的还是字符串变为基本数据类型的操作
在Integer和Float类中分别提供了以下2种方法
1 Integer(字符串转int型)
public static int parseInt(Strings)
2 Float (字符串转float型)
public static float parseFloat(String s)
代码实例
public class Demo {
public static void main(String args[]) {
Stringstr1 = "10" ; //由数字组成的字符串
Stringstr2 = "10.3" ; //由数字组成的字符串
int x = Integer.parseInt(str1); //将字符串变为int型
float f = Float.parseFloat(str2); //将字符串变为int型
System. out.println("整数乘方:" + x + " * " + x + " = " + (x * x)) ;
System. out.println("小数乘方:" + f + " * " + f + " = " + (f * f)) ;
}
}
结果:整数乘方:10 * 10 = 100
小数乘方:10.3 * 10.3 = 106.090004
小结:
1 对于一个设计良好的类来说,最好覆写Object类中的equals,hashCode,toString方法。
2 包装类主要用于将字符串转换为基本数据类型