Java内存空间:栈 堆 方法区 本地方法区
1.带有native 修饰的就是本地方法,调用的是系统内的有关C的东西
2.println():这也是一个方法,输出的都是字符串
3.println(P):打印一个对象(自动调用了toString() 方法),结果为:对象对应的类名@和对应的哈希值——class@哈希值
当P=null时:输出——null
在Object中有一个将对象转化为字符串的方法 toString(无参);可以在子类中重写这个方法输出你想输出的
【1】比较对象是否相等:public boolean equals(Object obj)
根据判断的准则不同重写自定义比较方法
【2】自定义输出:重写toString() (格式输出:输出字符串) 输出自己想要的内容
代码示例:
package Exercises;
/*
任何一个类都是Object 的子类都具有父类的方法
介绍两种方法的使用:1.比较对象是否想到等
2.字符串输出
参考工具:1.Java的 API文档——看见包和类(有相应的解释说明)
2.Java的源码:jdk——lib——java.base——java.util(通过类名找相对应的源代码)
*/
class Person extends Object/*默认所有的类都是继承这个根类的*/{
private int age;
Person(int age){
this.age=age;
}
//比较两个人是否为同龄人——使用Object 中的比较方法equals()
public boolean equals(Object obj){ //多态
/*
当直接使用:this.age==P.age;时——在父类中并没有age 这个变量——此要使用向下转化——要进行判断
*/
if(this==obj)
return true;//当比较的是同一个变量时不再进行类型的转化和判断
if(obj instanceof Person){
Person P=(Person)obj;
return this.age==P.age;
}
else {
throw new ClassCastException("类型错误!!");
/*
当传入的的类型不为Person 时单纯的定义为不一样不太合理,则定义为抛出异常
*/
}
}
//自定义输出
public String toString(){
//return " "+this.age;
return "person's age is "+this.age;
}
}
public class exerObject {
public static void main(String[] args){
Person P1=new Person(12);
Person P2=new Person(14);
System.out.println(P1.equals(P2));
//输出
System.out.println(P1);//输出:Exercises.Person@282ba1e
//System.out.println(P1.toString());//输出:Exercises.Person@282ba1e
/*
在Java中println() 方法中就自动调用了toString()方法
toString():将对象转化为(类名@哈希值)字符串输出——按规定格式输出
*/
System.out.println(P1.toString());
}
}
/*
******总结:在父类中有比较和格式输出两个能,子类自然具有这两个功能,当使用时一般要重写,当用得到子类数据是要对多态向下转化和类型判断
*/
Java的源码查看:jdk-lib--java.base--java.util--(通过类名找源码)