用类型作为方法和返回值(是对象类型只想内存空间)
* 基本数据类型的变量是存储在栈内存中,
* 引用类型变量存储在栈内存中,保存的是实际对象在堆内存中的地址,实际对象中保存这内容。
*
* 回调函数,简称回调,是指通过函数参数传递到其他代码的某一块可执行代码的引用,这一设计允许了底层代码调用在高层定义的子程序。
* 简单来说:A 调用了 B 的 b()方法,那 b 方法如果包含对 A 中实现的逻辑的调用,这个过程就被称作回调。
引用类型作为数据类型可以在一切可以使用类型的地方使用
public class Demo {
public static void main(String[] args) {
Dog jinMao = new Dog();
go(jinMao);//对象回调
System.out.println(createDog().getName());
}
//引用类型作为方法的返回值
public static Dog createDog(){
Dog taiDi = new Dog();
taiDi.setName("泰迪");
return taiDi;
//return new Dog();
}
public static void go(Dog a){//引用类型作为参数
System.out.println("开始");
a.run();
System.out.println("结束");
}
}
class Dog{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void run(){
System.out.println("跑");
}
}
引用类型作为成员变量的类型(复合类型)
public class Demo2 {
public static void main(String[] args) {
Student student = new Student();
student.setName("狗蛋");
student.setAge(3);
Address addr = new Address("110", "天堂村", 1, 2);
student.setAddress(addr);
System.out.println(student.getAddress());
System.out.println(student.getName());
System.out.println(student.getAge());
}
}
class Address{
private String code;
private String name;
private double x;
private double y;
public Address(String code, String name, double x, double y) {
this.code = code;
this.name = name;
this.x = x;
this.y = y;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
@Override
public String toString() {
return "Address{" +
"code='" + code + '\'' +
", name='" + name + '\'' +
", x=" + x +
", y=" + y +
'}';
}
}
class Student{
private String name;
private int age;
private Address address; //引用类型作为成员变量
public Student() {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}