JavaSE面向对象的三大特征(上)---封装,javase面向对象
JavaSE面向对象的三大特征(上)---封装,javase面向对象
-
面向对象的三大特征:
1. 封装性:所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或 者对象操作,对不可信的进行信息隐藏。简而言之就是,内部操作对外部而言不可见(保护性) 。
2. 继承性:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对 这些功能进行扩展。
3. 多态性(*):所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内 部结构的对象可以共享相同的外部接口。
-
类与对象的定义与使用
类:指的是共性的概念,而对象是一个具体的,可以使用的事物。
首先先有类(类是生产对象的蓝图),然后才可以产生对象。对象所具有的所有行为与属性,一定是在类中进行了完整的定义。
类中的组成:
a.方法(操作的行为)
b.属性(操作的数据,每个对象应该具有的特征)
范例:定义Person类
此时,方法不再由主类直接调用,而需要由对象调用。
实例化Person类对象:
此时,就可以通过对象调用Person类中的方法。
实例化对象应该注意,只要出现了new关键字,就开辟了内存。
-
对象内存分析
我们可以简单的将java中的内存区域分为栈内存和堆内存两块区域(实际Java内存区域的划分远比这个复杂)
1. 栈内存(虚拟机局部变量表):存放的是局部变量(包含编译期可知的各种基本数据类型、对象引用-即堆 内存的地址,可以简单的理解为对象的名称),Java栈是与线程对应起来的,每当创建一个线程,JVM就会 为这个线程创建一个对应的Java栈。
2. 堆内存:保存的是真正的数据。即对象的属性信息。
分析如下代码:
上面已经讲过了,只要出现了关键词new,表明在堆上分配了内存并且产生了Person类的对象per引用这部分内存。
内存图如下:
通过per引用设置堆中属性值,内存图如下:
对象(引用数据类型)必须在实例化后调用,否则会出现NullPointerException(运行时异常)。如若出现此类异常,根据出错位置查看引用类型变量是否初始化。
-
private实现封装处理
让内部操作对外部不可见(在类的外部不能直接使用对象来操控属性),可以用private对属性进行封装,称为类的私有属性。
封装上述Person类中的属性:
JAVA规范:所有私有属性要想访问与设置内容,提供对应的getter与setter方法。
getter方法:取得属性内容。
setter方法:进行属性内容的设置与更改。
类的设计原则:
a.类中的所有属性必须使用private封装。
b.属性若要被外部访问,必须定义相应的getter与setter方法。
-
构造方法
所谓的构造方法就是使用关键字new实例化新对象时来进行调用的操作方法。
对于构造方 法的定义,也需要遵循以下原则:
1. 方法名称必须与类名称相同
2. 构造方法没有返回值类型声明
3. 每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
注意:构造方法方法名和类名一致,没有返回值类型 !!!!
可以使用构造方法初始化对象,避免多次调用setter( )方法。
构造方法的重载:参数类型或个数不同。
建议:若干构造方法,按照参数个数升序或降序。
-
this关键字
a.this调用本类属性
this.属性名 明确表示调用类中同名属性
分析以下代码:
通过以上代码我们发现,当参数与类中属性同名时,类中属性无法被正确赋值(就近原则)。
此时我们加上this关键字便可以正 确给对象属性赋值。
规范:在类的普通方法中访问本类属性,一定要加this关键字
b.this调用本类方法
调用普通方法: this.方法名称(参数)
调用构造方法: this(参数)
(1)this调用本类其他构造方法必须放在首行调用 ---编译期语法错误
(2)this调用构造方法不允许成环 ---编译期语法错误
构造方法可以互相调用(在满足上述两个条件的基础上)
c.this表示当前对象
同样的方法,调用对象不同,输出结果也不同,this代表的是当前的对象。
-
static关键字(!!!)可以修饰属性和方法。
static修饰属性(内部属性)
描述共享属性,只需在属性前添加static关键字即可 。
static属性又称为类属性,保存在全局数据区的内存之中,所有对象都可以进行该数据区的访问。
此时,如果我们修改了country属性值,则Person类所有的对象的country属性都被改变。
结论:
1.访问static属性(类属性)应使用类名称.属性名
2.所有的非static属性(实例变量)必须在对象实例化后使用,而static属性(类属性)不受对象实例化控制
static修饰方法(类方法) 使用static定义的方法,直接通过类名称访问。
关于static方法有以下两点说明:
1. 所有的static方法不允许调用非static定义的属性或方法 (因为被static修饰的方法与对象无关,直接通过类名调用,而非static修饰的属性或方法与对象强相关)。
2. 所有的非static方法允许访问static方法或属性。 使用static定义方法只有一个目的:某些方法不希望受到类的控制,即可以在没有实例化对象的时候执行。
相关文章
- 暂无相关文章
用户点评