您的位置:首页 > 编程语言 > Java开发

面向对象思想(一)

2016-06-16 22:26 218 查看
一(类和对象)

回顾:

类是一种引用数据类型! 

类中成员通常由:构造器,方法,成员组成(类成员和实例成员)

类中的Field用于定义 "类" 或该"类实例"的 状态数据;

默认具有构造方法,如果覆写则不使用该默认构造方法!

特别注意:

Static修饰的成员表明属于类本身而不属于单个实例!由于这一点,所以理论上,类的实例,是没有资格访问和调用Static修饰的类成员和方法的!

例如如下例子:

<span style="font-family:FangSong_GB2312;font-size:18px;">class Example{
public static String   leiNumber;
public String  instanceNumber;
}
class test{
public  static void main (String[] args){
Example e1=new Example;
e1.instanceNumber="修改";  //这个是修改实例成员  ,正确调用类成员和类方法的做法应该是Example.leiNumber,而不是下面的:
e1.leiNumber="修改";   //这种做法理论上是错误的,同理,调用类方法也是不应该的,因为本质上,这个类成员和类方法是不属于这个实例的。
}
}</span>

类变量的引用 存放在栈内存中;(引用存放在栈内存中)

而实际对象则存放在内存中!(这很重要)

Java不允许直接访问堆内存中的对象,只能通过引用访问。

当堆内存中的对象,没有引用指向它时,则启用垃圾回收机制,将内存释放。

二(对象this的理解)

概念:总是指向调用该方法的对象!

回顾:

使用场景

1.在构造器中引用该构造器初始化对象:

eg:

<span style="font-family:FangSong_GB2312;font-size:18px;">class ThisInstance{
public int foo;
public ThisInstance(){
int foo=0;
this.foo=6;
}
}</span>
则如上创建的每一个实例对象foo都等于6,因为this.foo指向的是当前正在初始化的实例

2.在方法中引用该方法的对象:

因为方法的调用是需要调用者的,

所以在A方法中调用该类的B方法需要一个引用,这里就用this.表示当前对象,在同一类中通常情况下可以省略this,默认就是当前对象进行的调用

特别注意:

this依赖于对象存在,由于静态方法创建时不需要实例对象,所以Static修饰的方法无法使用this关键字,因此静态方法不能访问非静态方法

三(方法参数传递机制)

回顾:

方法的形参只是实参的复制品,并不是真正的实参

Java中方法参数的传递方式只有一种:值传递!

值传递的本质就是另外分配一个栈,复制了原来的栈

对于基本参数类型原来栈的值还是原来的值。

特别注意:

而对引用类型的参数传递方式仍然是值传递。但是由于只是复制了引用(另外复制了一个栈),而实际指向的对象是在堆内存中

以每一次操作都是对同一个对象进行操作的,但是其实参数的传递方式仍然是值传递只不过造成了一种假象。

四(成员变量和局部变量)

回顾:

成员变量分为:类Field 和实例Field;

局部变量分为: 形参,方法局部参数(在方法中定义), 代码块局部变量(在代码块中定义)

成员变量生命周期和所占内存位置:

类Field,生命周期最长当类开始编译时,类Field就开始初始化,随类生随类死;(堆内存中)

实例Field,当实例创建时,初始化,随实例生,随实例死(堆内存中)

二者都会被默认初始化

局部变量生命周期和所占内存位置:

只有当被赋值时系统才会为其分配内存,切局部变量的初始化必须手动完成!(栈内存中)

局部变量的生命周期只在自己的作用域中,当方法或代码块执行完毕,则内存会被释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息