day09 面向对象(上)b

一.面向对象的使用步骤:

①创建类

②类的实例化

③通过对象调用类的结构:对象.属性、对象.方法

二.面向对象的内存结构:

最主要的就是对象(包含类中的属性)在堆里,变量(包括局部变量)在栈里。栈里面的不同变量指向不同的对象。

JVM(JAVAZ虚拟机)中是运行的时候才加载到内存中(才有堆,栈什么的)

 

 注意:所有的引用类型值不是NULL就是地址(引用类型包括类(字符串)、数组、接口)

对象能代表的事情很多

 匿名对象

public class InstanceTest {
    public static void main(String[] args) {
        mall m=new mall();
        m.showPhone(new phone());//这里的new phone()就是一个匿名对象,因为没有变量作为他的名字
    }
    
}

class mall{
    public void showPhone(phone p){//这里的形参phone p相当于给传进来的匿名对象一个名字即p
        p.price=10;
        p.call();
        p.phonePrice();
    }
}
class phone{
    double price;
    public void call() {
        System.out.println("手机打电话");
    }
    public void phonePrice() {
        System.out.println("手机价格为"+price);
    }
}

 方法的增加知识点:

重载概括为:

两同一不同:

1.类和方法名相同

2.参数列表不同(参数个数,类型)

注意:

①返回值,方法体,限定词都不能作为区分标志

②所以用对象如果想调用指定方法就两步:方法名----》参数列表

可变形参的方法(jdk5.0新增):

1.使用:(数据类型 ... 变量名),使用时可传入参数:0个,1个,2个........

2.类似于数组:

例如:public void sum(String ... strs)与 public void sum(String[] strs)效果相同,要使用传入的参数都是strs[1],strs[2].....

注意:

①可变形参必须放在末尾(意味着一个方法只能有一个可变形参)

方法参数的值传递机制:

变量赋值的理解:

基本数据类型和引用类型是有差别的:基本类型是把值给过去,引用类型是把地址值给过去

当作为参数传递时,基本数据类型和引用类型也不同,方法形参的传递机制:值传递(分为数据值和地址值)

1.如果参数是基本数据类型,则实参传给形参的是实参的真实数据

2.如果参数是引用类型,则实参传给形参的是实参的地址

上述两种,形参和实参都会在栈中分配内存

public class TransferTest1 {
public static void main(String[] args) {
    int m=10;
    int n=20;
    TransferTest1 test=new TransferTest1();
    test.swap(m, n);
    System.out.println("值传递:m="+m+" n="+n);
    
    Data data=new Data();
    data.m=10;
    data.n=20;
    test.swap(data);
    System.out.println("地址传递:m="+data.m+" n="+data.n);
}

public void swap(int m,int n) {
    int temp=m;
    m=n;
    n=temp;
}

public void swap(Data data) {
    int temp=data.m;
    data.m=data.n;
    data.n=temp;
}

}
class Data{
    int m;
    int n;
}

练习

 

 

 扩展:

对于string这个引用类型,不同的是虽然传递地址,但是String="hello";这种赋值方式时,"hello"是存在字符串常量池中

原文地址:https://www.cnblogs.com/miaobo/p/12572853.html