面向对象思想(一)
2016-06-16 22:26
218 查看
一(类和对象)
回顾:
类是一种引用数据类型!
类中成员通常由:构造器,方法,成员组成(类成员和实例成员)
类中的Field用于定义 "类" 或该"类实例"的 状态数据;
默认具有构造方法,如果覆写则不使用该默认构造方法!
特别注意:
Static修饰的成员表明属于类本身而不属于单个实例!由于这一点,所以理论上,类的实例,是没有资格访问和调用Static修饰的类成员和方法的!
例如如下例子:
类变量的引用 存放在栈内存中;(引用存放在栈内存中)
而实际对象则存放在堆内存中!(这很重要)
Java不允许直接访问堆内存中的对象,只能通过引用访问。
当堆内存中的对象,没有引用指向它时,则启用垃圾回收机制,将内存释放。
二(对象this的理解)
概念:总是指向调用该方法的对象!
回顾:
使用场景:
1.在构造器中引用该构造器初始化对象:
eg:
2.在方法中引用该方法的对象:
因为方法的调用是需要调用者的,
所以在A方法中调用该类的B方法需要一个引用,这里就用this.表示当前对象,在同一类中通常情况下可以省略this,默认就是当前对象进行的调用
特别注意:
this依赖于对象存在,由于静态方法创建时不需要实例对象,所以Static修饰的方法无法使用this关键字,因此静态方法不能访问非静态方法!
三(方法参数传递机制)
回顾:
方法的形参只是实参的复制品,并不是真正的实参。
Java中方法参数的传递方式只有一种:值传递!
值传递的本质就是另外分配一个栈,复制了原来的栈。
对于基本参数类型原来栈的值还是原来的值。
特别注意:
而对引用类型的参数传递方式仍然是值传递。但是由于只是复制了引用(另外复制了一个栈),而实际指向的对象是在堆内存中,
所以每一次操作都是对同一个对象进行操作的,但是其实参数的传递方式仍然是值传递只不过造成了一种假象。
四(成员变量和局部变量)
回顾:
成员变量分为:类Field 和实例Field;
局部变量分为: 形参,方法局部参数(在方法中定义), 代码块局部变量(在代码块中定义)
成员变量生命周期和所占内存位置:
类Field,生命周期最长当类开始编译时,类Field就开始初始化,随类生随类死;(堆内存中)
实例Field,当实例创建时,初始化,随实例生,随实例死(堆内存中)
二者都会被默认初始化;
局部变量生命周期和所占内存位置:
只有当被赋值时系统才会为其分配内存,切局部变量的初始化必须手动完成!(栈内存中)
局部变量的生命周期只在自己的作用域中,当方法或代码块执行完毕,则内存会被释放。
回顾:
类是一种引用数据类型!
类中成员通常由:构造器,方法,成员组成(类成员和实例成员)
类中的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,当实例创建时,初始化,随实例生,随实例死(堆内存中)
二者都会被默认初始化;
局部变量生命周期和所占内存位置:
只有当被赋值时系统才会为其分配内存,切局部变量的初始化必须手动完成!(栈内存中)
局部变量的生命周期只在自己的作用域中,当方法或代码块执行完毕,则内存会被释放。
相关文章推荐
- php7 扩展类的写法[2]
- php7 类的方法传参[3]
- 一个简单的asp数据库操作类
- Ruby面向对象编程中类与方法的基础学习
- C#实现用于操作wav声音文件的类实例
- C#类的多态性详解
- 在线管理数据库 类
- Lua面向对象之类和继承浅析
- Lua中类的实现原理探讨(Lua中实现类的方法)
- Lua中的类编程代码实例
- C#常用目录文件操作类实例
- c# 类和成员的修饰详细介绍
- C#中实现判断某个类是否实现了某个接口
- C#类的创建与初始化实例解析
- C#基础语法:结构和类区别详解
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍
- C#中类与结构的区别实例分析
- C#实现读写ini文件类实例
- C#自定义的字符串操作增强类实例