一.面向对象的使用步骤:
①创建类
②类的实例化
③通过对象调用类的结构:对象.属性、对象.方法
二.面向对象的内存结构:
最主要的就是对象(包含类中的属性)在堆里,变量(包括局部变量)在栈里。栈里面的不同变量指向不同的对象。
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"是存在字符串常量池中