一、package
在Java开发过程中,为了避免类命名冲突问题,语法中设立了“包”机制,类似于现实世界中的姓氏(单姓,复姓)
包(单包,复包)
语法:
package 包名
package语句只能出现在Java源文件的第一行
包命名规范:公司域名倒序.项目名.模块名
二、import
import引入其他类型,这样的语句只能出现在package之下,class之上
Java常用开发包:
java.lang,此包Java语句标准包,使用此包中的内容无需import引入
Java.sql,提供jdbc接口
java.util,提供常用工具类
java.io,提供各种输入输出流
package com.JavaStudy.packageImport05191; import com.JavaStudy.packageImport0519.User1; /** * @Author wufq * @Date 2020/5/19 14:58 */ public class User2 { public static void main(String[] args){ //调动另外一个包的类,完整的写法:包名.类名 com.JavaStudy.packageImport0519.User1 user1 = new com.JavaStudy.packageImport0519.User1(); //省略的写法,先用import把User1类导入到User2类里面,然后才能使用 User1 user11 = new User1(); } }
三、访问权限修饰符
举例验证default和protected的区别:
同一个包内以及子类是可以调用protected和default修饰的数据的
不同的类,protected修饰的数据子类可以访问,default修饰的数据子类不能访问
四、Object类中的方法
1、关于Object类中的equals方法:
|-- equals方法的设计目的:比较两个对象是否一样
|-- Object中的equals方法比较的是两个对象的内存地址,但在现实的业务逻辑中,应当比较两个对象的内容,所以object中的equals方法需要重写
|-- java规范要求:所有的Java对象都要去重写equals方法
|-- 等号(==)可以比较基本类型和引用类型,等号比较的是值,特别是比较引用类型,比较的是引用的
package com.JavaStudy.studyObject0519; public class Test01 { public static void main(String[] args){ Object o1 = new Object(); Object o2 = new Object(); Boolean b1 = o1.equals(o2); System.out.println(b1);//equals比较的是两个对象是否一致 MyTime mt1 = new MyTime(2020,5,21); MyTime mt2 = new MyTime(2020,5,21); System.out.println(mt1.equals(mt2));//真是业务中比较的是两个对象的值,正常返回的应该是true,但是equals比较的是对象的内存地址,多以返回的是false //如何解决这个问题:对equals方法进行重写(由内存地址的比较转换成内容的比较) } } class MyTime{ int year; int month; int day; MyTime(int year,int month,int day){ this.year = year; this.month = month; this.day = day; } //重写equals方法 public boolean equals(Object obj){ if(this == obj){ return true; } if(obj instanceof MyTime){ MyTime myTime = (MyTime) obj; if(this.year == myTime.year&& this.month == month&& this.day==myTime.day){ return true; } } return false; } } /* equals本来是Object的方法,查询的是父类Object的内存地址 要比较子类中的内容就必须要父类Object强制转换成子类对象,只有转换了后,子类在调用equals方法时才是子类的内容对比 */
2、深入equals
String中的equals对Object中的equals进行覆盖(无需手动进行方法重写)
一般api的类Java默认会对equals进行重写,自定义的类就需要手动进行重写
package com.JavaStudy.studyObject0519; /** * @Author wufq * @Date 2020/5/22 10:23 */ public class Ttest03 { public static void main(String[] args){ String st1 = new String("Abc"); String st2 = new String("Abc"); System.out.println(st1.equals(st2)); //true } }
五、HashCode方法
hashCode()返回对象的哈希码值
不同的对象对应不同的哈希码值
package com.JavaStudy.studyObject0519; /** * @Author wufq * @Date 2020/5/22 10:53 */ public class HashCode { public static void main(String[] args){ Object obj1 = new Object(); int has1 = obj1.hashCode(); System.out.println(has1); Object obj2 = new Object(); int has2 = obj2.hashCode(); System.out.println(has2); } } ====执行结果==== 621009875 1265094477
六、toString方法
1、tostring()方法的作用:返回堆中对象的字符串表示,
2、Java的规范要求:实际情况中结果应该是一个简单易于读懂的表达式,所以子类都需要对toString方法进行重写
3、该字符串应该由类名.@.哈希码的十六进制标书组成。getClass().getName() + '@' + Integer.toHexString(hashCode())
package com.JavaStudy.studyObject0519; /** * @Author wufq * @Date 2020/5/22 15:35 */ public class ToString { public static void main(String[] args){ Time time = new Time(2020,5,22); System.out.println(time.toString());//重写前com.JavaStudy.studyObject0519.Time@2503dbd3 //重写后:2020年5月22日 } } class Time{ int year; int month; int day; Time(int year,int month,int day) { this.year = year; this.month =month; this.day = day; } //重写toString方法 public String toString(){ return year+"年"+month+"月"+day+"日"; } }