1、注释
注释不会编译成字节码,习惯写注释,写功能函数前写函数功能。
java程序都定义在类中,java程序都是以类的形式存在的,类的形式其实就是一个字节码文件最终体现。public static void main(String[] args)是固定格式便于jvm认识。
2.Object的方法
通常需要重写(覆盖)原生方法
getClass() equals() toString() HashCode()
通过字节码文件类可以取到里面的该字节码文件中的其他类以及方法、属性,相当于就是类文件中的类成了Class类的属性了。
/*
Object:所有类的根类
Object是不断抽取而来,具备着对所有对象都具备的共性内容
常用的共性内容(Object类的方法):equals
toString方法==类.getClass().getName()+"@"+Inter.toHexString(类.HasCode())
*/
/*
class Fu //extends Object
{
Fu()
{
super();
}
}
class Zi extends Fu
{
Zi()
{
super();
}
}
*/
class Person
{
private int age;
Person(int age)
{
this.age=age;
}
/*
一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据
*/
//比较Peroson的年龄,是否是同龄人
public boolean equals(Object obj)//覆盖Object类的方法
{
if(!(obj instanceof Person))
{
//return false;
throw new ClassCastException("类型错误");
}
Person p=(Person)obj;//Object向下转换,拓展对象的属性
return this.age==p.age;//通过重写父类的方法实现比较不同的属性,默认是比较对象,即p1==p2 p1.equals(p2)两者等价,都是比较的内存地址是否指向同一个地方,而不是比较的内容
}
public int hashCode()
{
return age;
}
}
class Demo
{
}
class objectDemo
{
public static void main(String[] args)
{
Person p1=new Person(20);
Person p2=new Person(20);//两者的地址不相等,仅内容相等
Demo d=new Demo();
Person p3=p1;
Class clazz1=p1.getClass();
Class clazz2=p2.getClass();
Class clazz3=d.getClass();
System.out.println(p1);//打印的是:Person@14 14是16进制的哈希码,实质上是调用的父类(Object的hashCode方法),默认调用的是toString方法
System.out.println(p1.hashCode());
System.out.println(p1==p2);
System.out.println(p1.equals(p2));
System.out.println(clazz1==clazz2);//相等,返回True,因为这个Person类字节码文件中的所有的类会被编译成字节码而形成Class的对象,所以p1.getClass()其实是调用的是Object的方法,返回的是这个字节码文件类,所以相等
System.out.println(clazz1.getName());//返回的是Person
System.out.println(clazz3==clazz2);//不相等,不是同一个类的字节码文件,该d类的字节码文件是Demo.class
System.out.println(p1.toString());//打印的是:Person@14
System.out.println(p1.equals(d));
}
}