7.11

发布时间 2023-07-11 16:33:38作者: new菜鸟

十、 打印对象

class Student{

    public String name;

    public int age;

    public double weight;

 

    public Student(String name, int age, double weight) {

        this.name = name;

        this.age = age;

        this.weight = weight;

    }

 

    @Override //注解 重写了头toString()

    public String toString() {

        return "Student{" +

                "name='" + name + '\'' +

                ", age=" + age +

                ", weight=" + weight +

                '}';

    }

}

public class Test3 {

    public static void main(String[] args) {

        Student student = new Student("小明",10,36.3);

        //System.out.println(student);//打印demo1.Student@1b6d3586(demo1.Student表示在那个包下,@后面的字符串表示地址的哈希值)

        System.out.println(student);//打印Student{name='小明', age=10, weight=36.3}

 

    }

}

在没有重写toString()方法的时候会打印一个地址,这是为什么呢?我们通过查看println的原码可以得出,我们原本调用的是Object(所有类的祖先)类的toString()方法,而这toString()方法的返回值就如图第3副的返回值。

 

当我们从写了toString()方法方法后,编译器就会调用我们自己重写后的方法,打印我们初始化好了的值。

总结

类和对象

通过class创建类,通过new创建对象,一个类可以是实例化多个对象

通过对象的引用来访问创建的类的属性和方法

实例化对象会调用构造方法,编译器会提供构造方法,多个构造方法形成方法的重载(如果两个构造方法的有两个变量,变量定义的类型是一样的,那编译器识别不了)

构造方法有多个,可以重载,名字跟类名相同,没有返回值,实例化对象的时候就会调用构造方法(默认不带参数的构造方法),可以对成员变量初始化

this的注意事项

this.成员方法或成员变量(访问当前对象的属性,只能在方法的内部使用)

this();必须在构造方法里面,且是第一行,与super()不能共存,不能形成环的调用

赋值的方法

就地初始化(在定义成员变量的时候就初始化)

不初始化(对应的默认值)

通过对象的引用进行赋值

通过构造方法进行初始化      

通过set、get来初始化(private)                                                                                          

static注意事项

静态的方法是不能直接访问非静态的成员方法和变量