1.equals(),hashCode(),toStrng():
/*
Object:所有类的根类
Object是不断抽取而来的,具备着所有对象都具备的共性内容。
部分共性方法:
1.equals(),判断对象的地址知否相等(==),没有意义。一般进行重写。
2.getClass(),获取该对象所属类的字节码对象,而字节码对象是Class类的对象。所有的类在加载时都是以Class类的对象形式加载的。
3.toString(); (默认添加)以文本的方式返回。建议所有子类都重写该方法。
*/
class Person
{
private int age;
Person(int age)
{
this.age = age;
}
//比较Person的年龄,是否是同龄人
//一般都会覆盖equals方法,根据对象的特有内容,建立判断对象是否相同的依据。 因为光比较地址没有意义。
public boolean equals(Object obj) //向上转型,子类方法被隐藏
{
if(!(obj instanceof Person))
{
//return false;
throw new ClassCastException("类型错误");
}
Person p = (Person)obj; //向下转型,注意转换异常
return this.age == p.age;
}
//注意:当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定.
//该协定声明相等对象必须具有相等的哈希码。 这才是真正的对象相等。内容相同,哈希码也相同。
public int hashCode()
{
return age;
}
public String toString()
{
return "Person: " + 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();
System.out.println(p1 == p2);
System.out.println(p1.equals(p2)); //指向同一个对象时,才返回true,和==功能一样,比较地址。源代码其实用的就是==。
System.out.println(p1); //对象类型和哈希码(16进制表示)
/*等效于:*/System.out.println(p1.getClass().getName() + "@" + Integer.toHexString(p1.hashCode()));
System.out.println(Integer.toHexString(p1.hashCode())); //对象的哈希码(10进制整数表示)
System.out.println(p1.hashCode()); //重写了hashCode()方法。
Class clazz1 = p1.getClass();
Class clazz2 = p2.getClass();
System.out.println(clazz1==clazz2); //true
System.out.println(clazz1.getName()); //获取Class类的名称。
}
}
2.包:
①对类文件进行分类管理
②给类提供多层命名空间(类文件会有所属包)
③写在程序文件的第一行(package 包名)
包名全部小写。
命令自动建包:javac -d . PackageDemo.java
④类名的全称是 包名.类名
⑤包也是一种封装形式
package mypack.haha;
class PackageDemo
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
3.包与包之间的访问:
1.注意:
①使用其他包的类时:
1)要么导入包:
import.packa.DemoA;
import.packa.*;(导入packa包中所有的类,但不包含子包。开发不建议写*)
import导包的作用 就是为了简化类名书写。
导包原则:用到哪个类,就导入哪个类。
2)要么写 包名.类名
②只能访问公共的包,即类必须设置为public,如果类不设置public,则是被包封装了。如果类中的方法不设置public,则也被包封装了。
③如果其他包不在classpath指定的目录下时,需要设置classpath的路径。
总结:包与包之间的访问,被访问的包中的类必须是public的,被访问的包中的类的方法也必须是public的。
不同公共包的类可以继承,当父类的方法被设置为protected时,只有该类或其子类才可以访问。
2.
4种权限:
public protected default private
同一类中 ok ok ok ok
同一包中 ok ok ok
子类中 ok ok
不同包中 ok
3.Jar包:
当把classpath设置为某个jar的路径时,可以不用解压直接运行里面的文件。
package pack;
/*
Jar : java的压缩包。
常用命令:
jar -cvf haha.jar pack 将包归档到指定名称的java压缩包 ,并生成详细输出v
jar -xvf haha.jar 将指定压缩包解压缩到当前目录,并生成详细输出v
jar -tvf haha.jar 列出指定jar的归档目录
*/
class JarDemo
{
public static void main(String[] args)
{
System.out.println("Hello Jar!");
}
}