java.lang.Object类1.Object类是所有Java类的根父类2.如果不使用extends在类声明中关键字指定其父类,默认父类为java.lang.Object类3.Object类中的功能(属性、方法)是通用的。属性:None方法:equals()/toString()getClass()hashCode()clone()/finalize()wait(),notify(),notifyAll()4.Object类只声明了一个构造函数Order,参数order为空=新订单();System.out.println(order.getClass().getSuperclass());面试题:final、finally、finalize有什么区别?面试题:==和equals()的区别\==:运算符(可用于基本数据类型变量和引用数据类型变量)如果比较的是基本数据类型变量:比较两者中存储的数据是否相同变量相等。(不一定是同一类型)(自动类型提升)如果比较的是引用数据类型变量:比较两个对象的地址值是否相同。即两个引用是否指向同一个对象实体补充:当使用==符号时,必须保证该符号左右两侧的变量类型相同。以上内容我们实际测试如下:referencetype:Customercust1=newCustomer("Tom",21);客户cust2=newCustomer("Tom",21);System.out.println(cust1==cust2);//falseStringstr1=newString("atguigu");Stringstr2=newString("atguigu");System.out.println(str1==str2);//falseequals()方法的使用1.它是一个方法,Not运算符,只对引用数据类型起作用。2.Object类中equals()的定义:publicbooleanequals(Objectobj){return(this==obj);}解释:Object类中定义的equals()和==的作用是一样的:比较两个对象的地址值是否相同。即两个引用是否指向同一个对象实体3、String、Date、File、包装类等重写了Object类中的equals()方法。改写后,比较的不是两个引用的地址是否相同,而是两个对象的“实体内容”是否相同。4.通常,如果我们的自定义类使用equals(),通常会比较两个对象的“实体内容”是否相同。然后,我们需要重写Object类中的equals()。重写的原则:比较两个对象的实体内容是否相同\=====================================================================equals()方法:System.out.println(cust1.equals(cust2));//false--->true多态无处不在(参数对象,这里是它的子类)System.out.println(str1.equals(str2));//true重写了equals()方法中的Object类1.自动生成equals()已经掌握------>生成构造方法,生成get()和set()方法,生成equals()和hash()2.手动实现重写equals()@Override//自动生成equals()publicbooleanequals(Objectobj){//Objectobj多态无处不在if(this==obj)returntrue;如果(obj==null)返回false;如果(getClass()!=obj.getClass())返回false;//正式比较Customerother=(Customer)obj;if(age!=other.age)返回false;if(name==null){if(other.name!=null)返回false;}elseif(!name.equals(other.name))返回false;返回真;}覆盖原则:比比较两个对象的实体内容(即:姓名和年龄)是否相同。手动实现equals()的重写@Overridepublicbooleanequals(Objectobj){//System.out.println("Customerequals()....重写的方法被执行");如果(this==obj){返回真;}if(objinstanceofCustomer){Customercust=(Customer)obj;//比较两个对象的每个属性是否相同//if(this.age==cust.age&&this.name.equals(cust.name)){//returntrue;//}else{//returnfalse;//}//或者returnthis.age==cust.age&&this.name.equals(cust.name);//基本数据类型age只能用==引用数据类型name只能用equals()方法}else{returnfalse;}}在Object类中toString()的使用1、当我们输出一个对象的引用时,其实是调用了当前对象的toString()。客户cust1=newCustomer("Tom",21);//com.atguigu.java1.Customer@15db9742System.out.println(cust1.toString());//com.atguigu.java1.Customer@15db9742System.out.println(cust1);2.字符串()定义:publicStringtoString(){returngetClass()。getName()+"@"+整数。类中的toString()方法在调用对象的toString()时返回“实体内容”信息。4.自定义类也可以覆盖toString()方法。调用此方法时,返回对象的“实体内容”手动实现@OverridepublicStringtoString(){return"Customer[name="+name+",age="+age+"]";}自动实现@OverridepublicStringtoString(){return"Customer[name="+name+",age="+age+"]";}JUnit单元测试hamcrest-core-1.3.jarinJava下载43KBjar包并且需要在单元测试方法上声明注解:@Test,并在单元测试类中导入:importorg.junit.Test;声明单元测试方法后,就可以在方法体中测试相关代码了。1.如果执行结果没有异常:绿条2.如果执行结果有异常:红条Wrapperuse1.Java提供了8种基本数据类型对应的wrapper类,让基本数据类型的变量have类特性总结:基本类型、包装类、String类之间的相互转换2、基本数据类型、包装类、String相互转换总结:(看看这个)1、JDK5.0新特性:自动装箱和自动拆箱intnum2=10;integerin1=num2;//自动装箱intnum3=in1;//自动拆箱2、基本数据类型、包装类--->String类型:调用StringheavyValueOf(Xxxxxx)floatf1=12.3f;Stringstr2=String.valueOf(f1);//"12.3"3.字符串类型--->基本数据类型,包装类:调用parseXxx(Strings)Stringstr1="123";intnum2=Integer.parseInt(str1);System.out.println(num2+1);//124========================================================================================================================基本数据类型,包装类--->字符串类型:调用String重载valueOf(Xxxxxx)@Testpublicvoidtest4(){整数1=10;//方法一:拼接操作Stringstr1=num1+"";//方法二:调用valueOf(Xxxxxx)floatofStringf1=12.3f;Stringstr2=String.valueOf(f1);//"12.3"双d1=新双(12.4);字符串str3=String.valueOf(d1);System.out.println(str2);System.out.println(str3);//"12.4"}String类型--->基本数据类型,包装类:调用包装类的parseXxx(Strings)@Testpublicvoidtest5(){Stringstr1="123";//错误情况://intnum1=(int)str1;//Integerin1=(Integer)str1;//可能会报NumberFormatExceptionintnum2=Integer.parseInt(str1);System.out.println(num2+1);字符串str2="true1";布尔b1=Boolean.parseBoolean(str2);System.out.println(b1);}JDK5.0新特性:自动装箱和自动拆箱@Testpublicvoidtest3(){//intnum1=10;////基本数据类型-->包装类Object//method(num1);//自动装箱:基本数据类型--->wrapperclassintnum2=10;Integerin1=num2;//自动装箱booleanb1=true;Booleanb2=b1;//Autoboxing//自动拆箱:包装类--->基本数据类型System.out.println(in1.to细绳());intnum3=in1;//自动拆箱}publicvoidmethod(Objectobj){System.out.println(obj);}基本数据类型--->包装类:调用包装类的构造函数intnum1=10;//System.out.println(num1.toString());错误整数in1=新整数(num1);System.out.println(in1.toString());//10整数in2=newInteger("123");System.out.println(in2.toString());//123//报异常NumberFormatException:Forinputstring:"123abc"//Integerin3=newInteger("123abc");//System.out.println(in3.toString());//============================================================Floatf1=newFloat(12.3f);Floatf2=newFloat("12.3");System.out.println(f1);//12.3System.out.println(f2);//12.3//========================================================布尔b1=newBoolean(true);Booleanb2=newBoolean("TrUe");System.out.println(b2);//真的Booleanb3=newBoolean("true123");System.out.println(b3);//falseBoolean类型特殊:优化包装类--->基本数据类型:调用包装类Xxx的xxxValue()@Testpublicvoidtest2(){Integerin1=newInteger(12);inti1=in1.intValue();System.out.println(i1+1);Floatf1=newFloat(12.3);floatf2=f1.floatValue();System.out.println(f2+1);}面试题@Testpublicvoidtest1(){Objecto1=true?新整数(1):新双(2.0);System.out.println(o1);//1.0}@Test//为什么??publicvoidtest2(){对象o2;如果(真)o2=新整数(1);否则o2=newDouble(2.0);System.out.println(o2);//1}@Testpublicvoidtest3(){Integeri=newInteger(1);整数j=新整数(1);System.out.println(i==j);//falseInteger内部定义了IntegerCache结构(内部类),IntegerCache定义了Integer[],保存-128到127范围内的整数。如果我们使用自动装箱,在-128到127范围内给Integer赋值,我们可以直接使用数组中的元素,而不用去new。目的:提高效率@TestIntegerm=1;整数n=1;System.out.println(m==n);//trueIntegerx=128;//相当于一个新的Integer对象Integery=128;//相当于一个新的Integer对象System.out.println(x==y);//false}
