java 面向对象上

学习java疯狂讲义总结:

1.static修饰的成员变量和方法,既可以通过类访问也可以通过实例访问

   普通的方法和成员变量只能通过实例访问

(原因:类只有被实例化后,普通的成员变量才会分配内存,所以类无法直接访问普通成员变量,只能通过实例访问)

2 方法的参数传递机制

java的实参值是如何传入的呢?java里方法的参数传递方式只有一种:值传递,所谓值传递,就是讲实际参数值的副本(复制品)传入方法内而参数本身不会受到任何的影响

public class PrimitiveTransferTest {
	public static void swap(int a,int b)
	{
		int temp=a;
		a=b;
		b=temp;
		System.out.println("Swap方法里面的"+"a="+a+" b= "+b);
	}
	public static void main(String[] args) {
		int a=6;
		int b=9;
		swap(a,b);
		System.out.println("交换结束后,变量a的值和b的值"+a+"  "+b);
	}

}
结果:Swap方法里面的a=9 b= 6
          交换结束后,变量a的值和b的值6  9

解析:java程序总是从main方法开始执行,main方法中定义了ab两个局部变量,:当程序执行swap方法时,系统进入swap方法,并将main方法中ab变量作为参数值传入swap方法,传入swap方法的只是ab的副本,而不是ab本身(实际上是在swap栈去中重新产生了两个变量ab并将main房发展中的ab变量的值分别赋值给它们),进入swap方法后系统中产生了4个变量,这4个变量mian函数中ab存在main栈中,swap函数中的ab存在swap栈中,程序swap在交换ab值的时候实际上交换的是在swap栈中的ab值,mian栈中的值不发生改变。

上面是基本类型的值传递

下面是引用类型的参数传递同样是采用值传递方式

class DataWrap{
	public int a;
	public int b;
}
public class ReferenceTransferTest {
	public static void swap(DataWrap dw)
	{
		int temp=dw.a;
		dw.a=dw.b;
		dw.b=temp;
		System.out.println("swap方法里,a的值是:"+dw.a+"  b的值是:"+dw.b);
	}
	public static void main(String[] args) {
		DataWrap dw=new DataWrap();
		dw.a=6;
		dw.b=9;
		swap(dw);
		System.out.println("交换后,a的值是:"+dw.a+"  b的值是:"+dw.b);
	}
}

结果:

swap方法里,a的值是:9  b的值是:6
交换后,a的值是:9  b的值是:6


解析:程序从mian方法开始执行,main方法开始创建了一个DataWrap对象,并定义了一个dw引用变量来指向DataWrap对象,这是一个与基本类型不同的地方,当调用swap方法是,dw变量作为实参传入swap方法,同样采用值传递的方式,把main方法里的dw变量的值付给swap方法里的dw形参,(main方法中的dw是一个引用(也就是一个指针),它保存了Dataswap对象的地址值,当把dw的值付给swap方法的dw形参后,即让swap方法的dw形参也保存了这个地址值,即也会引用到对内存中DataWrap对象。所以才会产生这种结果)。

3.方法重载

什么才是方法重载呢?回答:两同一不同:同一个类中,方法名形同,参数列表不同。

参数列表不同:参数类型、参数个数、参数类型的顺序,下面就是参数类型顺序不同,但是参数个数相同的方法重载。

public static double  test(int a,double b)
	{
		return a+b;
	}
public static double test(double a,int b)
	{
		return a+b;
	}

4.成员变量和局部变量

成员变量包括两个:

类变量(static修饰):类变量从类的准备阶段起开始存在,到系统完全销毁这个类

实例变量(不用static修饰):实例变量从该类的实例被创建起开始存在,知道系统完全销毁这个实例。---------这也说明了为什么实例变量不能被类直接调用的原因。


成员变量不需要显示的初始化,系统在这个类的准备阶段或是创建该类的实例时进行默认的初始化。

局部变量则需要。

了解成员变量的初始化和在内存中的运行机制

以及局部变量的初始化和内存中的运行机制

5.深入构造器吐舌头

构造器最大的用处就是在创建对象时执行初始化操作,当创建一个对象时,系统为这个对象的成员变量进行默认的初始化,这种默认的初始化把所有的基本类型的成员变量设为0,把所有的引用类型的成员变量设为null

但是构造器并不是完全负责java对象的创建:构造器是创建java的重要途径,但对象并不是完全由构造器创建的,实际上,当程序调用构造器时,系统会先为该对象分配内存空间,并未这个对象执行默认初始化,这个对象已经产生了-------这些操作在构造器执行之前都完成了,也就是说,当系统开始执行构造器的执行体之前,系统已经创建了一个对象,只是这个对象还不能被外部程序访问,只能在该构造器中通过this来引用,当构造器的执行体执行结束后,这个对象作为构造器的返回值被返回,通常还会赋值给另一个引用类型的变量,从而让外部程序可以访问该对象。

构造器的重载

注意:如果一个构造器完全包含了另一个构造器,则可在方法一中调用方法二,但是构造器不能直接被调用,构造器必须使用new关键字来调用,但一旦使用new关键字来调用构造器的时候,将会导致系统重新创建了一个对象,为了在构造器一中调用构造器二,又不会重新创建一个java对象,可以使用this关键字来调用相应的构造器。

public class Apple {
	public String name;
	public String color;
	public double weight;
	public Apple(){}
	public Apple(String name,String color)
	{
		this.name=name;
		this.color=color;
	}
	public Apple(String name,String color,double weight)
	{
		this(name,color);//必须作为构造器执行体的第一条语句
		this.weight=weight;
	}
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值