object类的概述
.object 是类层次结构的根(root),每个类都可以将object作为超类,所有类都直接或间接的继承自该类
构造方法
.public object()
.回想面对对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法
因为他们的顶级父类object只有无参构造方法
查看方法的源码
.eclipse 选中方法,右键 打开声明 或者按下 F3
.idea 选中方法,按下ctrl+b
为什么我student s =new student();System.out.println(s);后,控制台的返回值是object.student@1d8d30f7
.System.out.println(s) 的底层源码是public void println(Object x)此时这个x就等于s等于new student()
.valueOf(x)的底层源码就是public static String valueOf(Object obj) 这个obj就等于=x=s=new student()
.public static String valueOf(Object obj) 方法里面有这么一句话return (obj == null) ? "null" : obj.toString();运用了三元运算符,因为obj不等于null,所以直接执行了表达式三,也就是obj.toString(),
.toString()的底层源码是public String toString();方法里面有这么一句话return getClass().getName() + "@" + Integer.toHexString(hashCode());,也就是你的在控制台出现的值了
解决办法
.在student类里面面重写toString的方法
.eclipse的快捷键是 shift+alt+s
在eclipse中添加toString的方法
在我的这篇文章中有介绍
Java 直接输出对象 变成@.....的解决办法_我的猴子的博客-CSDN博客
三元运算符
.expression1 可以是计算为 boolean 值的任何表达式。如果 expression1 是 true ,那么将评估 expression2 。否则,将评估 expression3 。
以下有两个类
student类 和objectdemo类
objectdemo类
package object;
import java.io.PrintStream;
public class objectdemo {
/*
object类的概述
.object 是类层次结构的根(root),每个类都可以将object作为超类,所有类都直接或间接的继承自该类
构造方法
.public object()
.回想面对对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法
因为他们的顶级父类object只有无参构造方法
查看方法的源码
.eclipse 选中方法,右键 打开声明 或者按下 F3
.idea 选中方法,按下ctrl+b
为什么我student s =new student();System.out.println(s);后,控制台的返回值是object.student@1d8d30f7
.System.out.println(s) 的底层源码是public void println(Object x)此时这个x就等于s等于new student()
.valueOf(x)的底层源码就是public static String valueOf(Object obj) 这个obj就等于=x=s=new student()
.public static String valueOf(Object obj) 方法里面有这么一句话return (obj == null) ? "null" : obj.toString();运用了三元运算符,因为obj不等于null,所以直接执行了表达式三,也就是obj.toString(),
.toString()的底层源码是public String toString();方法里面有这么一句话return getClass().getName() + "@" + Integer.toHexString(hashCode());,也就是你的在控制台出现的值了
解决办法
.在student类里面面重写toString的方法
.eclipse的快捷键是 shift+alt+s
三元运算符
.expression1 可以是计算为 boolean 值的任何表达式。如果 expression1 是 true ,那么将评估 expression2 。否则,将评估 expression3 。
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
student s =new student();
s.setAge(30);
s.setName("林青霞");
System.out.println(s); //object.student@1d8d30f7
System.out.println(s.toString());//object.student@1d8d30f7 object.student@1d8d30f7 默认在底层调用了object的tostring方法
// public void println(Object x) { //System.out.println(s)->(object x)中的 x=s
// String s = String.valueOf(x);
//
// }
/* public static String valueOf(Object obj) { //System.out.println(s)->(object x)中的 x=s->(object obj)obj=x=s=new student()
return (obj == null) ? "null" : obj.toString();
}
*/
/* public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
*/
}
}
student类
package object;
public class student extends Object {
private String name;
private int age;
/**
* @param name
* @param age
*/
public student(String name, int age) {
this.name = name;
this.age = age;
}
/**
*
*/
public student() {
super();
}
/**
* @return name
*/
public String getName() {
return name;
}
/**
* @param name 要设置的 name
*/
public void setName(String name) {
this.name = name;
}
/**
* @return age
*/
public int getAge() {
return age;
}
/**
* @param age 要设置的 age
*/
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "student [name=" + name + ", age=" + age + "]";
}
}