黑马程序员--java基础--Object类中的几个方法、包的概念
来源:互联网 发布:软件使用许可证模板 编辑:程序博客网 时间:2024/05/29 17:34
------- android培训、java培训、期待与您交流! ----------
Object几个常用方法总结
Object::
是所有类的根类。
是不断抽取而来,具备着所有对象都具备的共性内容。
class Fu // extends Object在这里被省略了。{Fu(){super();}}class Zi extends Fu{Zi(){super();}}
jdk1.5中,描述了该类中的11个方法
其中equals、hashCode、getClass、toString比较常用,主要讲解这4个方法,其他的到后面也会讲到
1.equals方法
public boolean equals(Object obj);
某个其他对象是否与此对象“相等”。
参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
特点
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么
x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象
上 equals 比较中所用的信息没有被修改。
注意:对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
例子一:判断用法与==是否相等
<pre name="code" class="html">class Person extends Object{int age;Person(int age){this.age = age;}}public class Objecttttt {public static void main(String[] args) {Person p1 = new Person(60);Person p2 = new Person(60);System.out.println(p1==p2);System.out.println(p1.equals(p2));}}
打印结果是false 所以==与Object中equals效果一样 false例子二:覆盖equals方法
public class Objecttttt {public static void main(String[] args) {Person p1 = new Person(60);Person p2 = new Person(60);System.out.println(p1==p2);System.out.println(p1.equals(p2));}}/*一般都会覆盖Object中的equals方法,根据对象的特有内容,建立判断对象是否相同的依据。 */class Person extends Object{int age;Person(int age){this.age = age;}public boolean equals(Object obj)//Object obj = p2;{if(!(obj instanceof Person)){throw new ClassCastException("类型错误");}Person p = (Person)obj;return this.age == p.age;}}
打印结果是fault
true
2.hashCode
public int hashCode()
返回该对象的哈希码值。
例子一:直接打印出哈希值
public class Objecttt {public static void main(String[] args) {Person11 p1 = new Person11(60);System.out.println(p1);System.out.println(p1.hashCode());}}class Person11 extends Object{private int age;Person11(int age){this.age = age;}}打印结果:com.Myfly.Person11@15db9742 //@前面是类型,@后面是十六进制表现形式的哈希值
366712642 //直接打印出十进制的哈希值
例子二:覆盖hashCode方法
public class Objecttt {public static void main(String[] args) {Person11 p1 = new Person11(60);System.out.println(p1);System.out.println(p1.hashCode());}}class Person11 extends Object{private int age;Person11(int age){this.age = age;}public int hashCode(){return age;}}
打印结果是:com.Myfly.Person11@3c 60 //被赋予了特定的哈希值
3.getClass
这个方法是用来获取对象的字节码文件。
.java文件编译后就会生成.class文件(即字节码文件),然后编译器加载这个字节码文件,类加载器按类名加载文件中的类,执行入口main方法。
下面是原理图:
例子
public class Objecttttttt {public static void main(String[] args) {Person111 p1 = new Person111(60);Person111 p2 = new Person111(20);Class clazz1 = p1.getClass();Class clazz2 = p2.getClass();System.out.println(clazz1==clazz2);System.out.println(clazz1.getName());}}class Person111 extends Object{private int age;Person111(int age){this.age = age;}}
打印结果:true //因为是用的同一个类创建的对象所以字节码文件是同一个。 com.Myfly.Person111 //通过getName方法获取了字节码文件的类名
4.toString
例子
public class Objecttttttt {public static void main(String[] args) {Person1111 p1 = new Person1111(60);System.out.println(p1.toString());System.out.println(p1.getClass().getName()+"@"+Integer.toHexString(p1.hashCode()));}}class Person1111 extends Object{private int age;Person1111(int age){this.age = age;}}
打印结果:com.Myfly.Person1111@15db9742 com.Myfly.Person1111@15db9742
//打印结果一样证明了<span style="font-family: Arial, Helvetica, sans-serif;">toString与</span><span style="font-family: Arial, Helvetica, sans-serif;">getClass().getName()+"@"+Integer.toHexString(p1.hashCode())等效</span>
包
简述在java中包相当于文件夹。包里通常存放的是类文件,因为我们在编写程序的时候,难免会有类名相同的情况,在不同包中可以有相同的类名,调用的时候连同包名一起就行。
包也是一种封装形式。
作用
1、为避免多个类重名的情况。
2、对类文件进行分类管理。
3、给类提供多层命名空间。
4、包的出现可以将java的类文件和源文件相分离。
特点
1、包必须写在程序的第一行。因为要先有包,才知道类文件的存放地方。
2、类的全称:包名.类名。
3、编译定义了包的程序文件时,在编译时要指定包的存储目录。
4、要访问其他包中的类,需要定义类的全称:包名.类名。
5、包如果不在当前路径,需要使用classpath设定环境变量。
6、被访问的包中的类权限必须是public的。
7、类中的成员权限:public或者protected。protected是为其他包中的子类提供的一种权限。
8、不同包中的子类可以直接访问父类中被protected权限修饰的成员。
包的导入——import应用
import packa.DemoA;//导入了packa包中的DemoA类。import packa.*;//导入了packa包中所有的类。//导包的原则:用到哪个类,就导入哪个类。//import 干嘛用的啊?为了简化类名书写。class PackageDemo{public static void main(String[] args) {DemoA d = new DemoA();DemoAbc d = new DemoA();d.show();packb.DemoB b = new packb.DemoB();//没有导包就要写全类名b.method();System.out.println("Hello Package!");}}
下面介绍一下导包常见的异常处理
异常1
PackageDemo.java:8: 找不到符号符号: 类 DemoA位置: 类 mypack.PackageDemo DemoA d = new DemoA(); ^PackageDemo.java:8: 找不到符号符号: 类 DemoA位置: 类 mypack.PackageDemo DemoA d = new DemoA(); ^原因:类名写错。
因为DemoA类已经有包的所属,所以必须要明确其报名。
记住:DemoA这个名词错的。 正确名称是报名.类名 packa.DemoA
异常2
PackageDemo.java:8: 软件包 packa 不存在 packa.DemoA d = new packa.DemoA(); ^PackageDemo.java:8: 软件包 packa 不存在 packa.DemoA d = new packa.DemoA(); ^
原因是在当前目录下没找到,因为packa存放在其他目录下,
应该配置一个classpath。
异常3
PackageDemo.java:8: packa.DemoA 在 packa 中不是公共的;无法从外部软件包中对其进行访问 packa.DemoA d = new packa.DemoA(); ^PackageDemo.java:8: packa.DemoA 在 packa 中不是公共的;无法从外部软件包中对其进行访问 packa.DemoA d = new packa.DemoA();
原因:包与包之间的类进行访问,被访问的包中的类必须是public的,被访问的包中的类的方法也必须是public的。
- 黑马程序员--java基础--Object类中的几个方法、包的概念
- 黑马程序员-----java基础八(java中的Object类)
- 黑马程序员 Java Object类与包
- 黑马程序员---Java基础---Object类
- 黑马程序员Java基础第六章-----内部类,对象的产生过程,所有的超类Object,包,String类
- 黑马程序员-学习日记-JAVA中API中的Object类和包的含义及内部类
- JAVA中Object类中的几个方法
- 黑马程序员---------------java基础概念
- 黑马程序员-Java容易混淆的几个概念
- 黑马程序员——java-几个常用的类(Object,Scanner,String,StringBuffer/StringBuilder)
- 黑马程序员——Java包、内部类、Object类
- 黑马程序员-java基础 包
- 黑马程序员——Java基础——Object,包和多线程基础(一)
- 黑马程序员 java中的包
- 黑马程序员-----Object类中的重要方法总结*
- 黑马程序员---Java基础---Object类和String类
- 黑马程序员—java基础学习--Object类,内部类
- 黑马程序员 java基础常识 类的中的静态
- 典型的ELF可重定位目标文件
- hdu 4508 湫湫系列故事——减肥记I 完全背包。
- 机房收费系统(个人重构)——存储过程
- ListView 可以滑动的上下间距
- 使用Eclipse 编译含有多个main函数的项目
- 黑马程序员--java基础--Object类中的几个方法、包的概念
- Delphi 根据经纬度计算地球上两点之间的距离
- 2440平台,LED驱动模块,成功加载,rmmod可以卸载,但是总是报错
- MySQL中修改root密码的方式
- this 关键字
- 【javascript】脚本操作HTTP请求技术Ajax-1(GET请求)
- Android两次点击返回键退出应用
- delphi 获取某个页面所有的链接
- C语言 折半查找