Java学习08

封装
面向对象的三大特征:
封装
继承
多态
有了封装才有继承,有了继承才有多态。

面向对象的首要特征:封装
一个类体当中的数据,假设封装之后,对于代码的调用人员来说,不需要关心代码的复杂实现,只需要通过一个简单的入口就可以访问了。另外,类体中安全级别较高的数据封装起来,外部人员不能随意访问,来保证数据的安全性。

访问对象的属性,通常包括两种操作,一种是读数据(get),一种是改数据(set)。

不使用封装机制,程序存在什么缺点?
类的属性对外暴露,可以在外部随意访问,导致了不安全。

进行封装
不再对外暴露复杂的数据,封装起来。
对外只提供简单的操作入口。
优点:第一数据安全了,第二调用者使用方便。

怎么进行封装,代码怎么实现?
第一步:属性私有化(使用private关键字进行修饰。)
第二步:对外提供简单的操作入口。(对外提供公开的get方法和set方法作为操作入口,并且都不带static。)
数据被关键字 “private” 修饰之后,该数据只能本类中访问,出了这个类就无法访问了。

对象被称为实例。
实例相关的有:实例变量、实例方法。
实例相关的都需要先new对象,通过“引用.”的方式去访问。

带有static的方法通过“类名.”的方式访问。
没有static的方法叫做:实例方法。(对象方法,对象级别的方法)通过“引用.”的方式进行访问。

实例方法
实例方法相对于静态方法(或者叫类方法)而言,它就是没有 static 前缀的一类一般方法,被对象拥有(这也是称之为“实例”方法的原因)。
特点是定义的时候前面没有 static 前缀,本类中直接调用的时候必须也在实例方法内,否则调用前必须先new出一个对象。

实例方法的调用也必须有对象的存在。
只要是方法,不管是静态方法、实例方法、构造方法,它们在运行的时候都是需要压栈的。

set方法和get方法
注意:Java开发规范中有要求,set方法和get方法要满足以下格式:
get方法的要求:
public 返回值类型 get+属性名首字母大写(无参数){
  return 实例变量;
}
set方法的要求:
public void set+属性名首字母大写(有一个参数){
  实例变量 = 参数;
}

static关键字
所有static关键字修饰的都是类相关的,类级别的。
所有static修饰的,都采用“类名.”的方式访问。
static修饰的变量:静态变量。static修饰的方法:静态方法。

变量的分类:
变量根据声明的位置进行划分:
 在方法体中声明的变量叫做:局部变量(栈内存)。
 在方法体外声明的变量叫做:成员变量。
成员变量又可以分为:
 实例变量(堆内存)
 静态变量(方法区)

静态变量在类加载时初始化,不需要new对象,静态变量的空间就开出来了,静态变量储存在方法区。

什么时候变量声明为实例的,什么时候声明为静态的?
  如果这个类型的所有对象的某个属性值都是一样的,不建议定义为实例对象,浪费内存空间。建议定义为静态变量,在方法区保留一份,节省内存开销。

一个对象一份为实例变量;
所有对象一份为静态变量。

实例的:一定要使用“引用.”来访问。
静态的:建议使用"类名."来访问,但使用“引用.”也行(不建议使用“引用.”)。
只有在“空引用”访问“实例”相关的,都会出现空指针异常。

什么时候定义为实例方法?什么时候定义为静态方法?
当这个方法体当中,直接访问了实例变量,这个方法一定为实例方法。
开发过程中,大部分情况下,如果是工具类的话,工具类当中的方法一般都是静态的。(静态方法有一个优点,是不需要new对象,直接采用类名调用,及其方便,工具类就是为了方便,所以工具类中的方法一般都是static)

使用static可以定义:静态代码块
什么是静态代码块,语法是什么?
static {
  java语句;
  java语句;
}

static静态代码块在什么时候执行呢?
类加载时执行。并且只执行一次。

注意:静态代码块在类加载时执行,并且在main方法执行之前执行。静态代码块一般自上而下执行。

静态代码块有啥作用,有什么用?
第一:静态代码块不是那么常用。(不是每一个类中都要写的东西。)
第二:静态代码块这种语法机制实际上是sun公司给我们java程序员的一个特殊时刻/时机,这个时机叫做:类加载时机。

{
栈:方法只要执行,就会压栈。(局部变量)
堆:new出来的对象都在堆中,垃圾回收器主要针对。(实例变量)
方法区:类的信息,字节码信息,代码片段。
方法的片段放在方法区,但是方法执行过程需要的内存在栈中。
}

静态代码块和静态变量都在类加载的时候执行,时间相同,只能靠代码的顺序来决定谁先谁后。

到目前为止,遇到的所有的java程序,有顺序要求的是哪些?
第一:对于一个方法来说,方法体中的代码是有顺序的,遵循自上而下的顺序执行。
第二:静态代码块1和静态代码块2是有先后顺序的。
第三:静态代码块和静态变量是有先后顺序的。

除了静态代码块之外,还有一种语句块叫做:实例语句块
实例语句块在类加载时是没有执行的
实例语句块的语法
{
  java语句;
}

实例语句块在什么时候执行?
只要是构造方法执行,必然在构造方法执行之前,自动执行“实例语句快”中的代码。


this
this是一个关键字,全部小写。
this是什么,在内存方面是怎样的?
  一个对象一个this
  this是一个变量,是一个引用。this保存当前对象的内存地址,指向自身。
  所以,严格意义上说,this代表的就是“当前变量”
  this储存在堆内存当中对象的内部。
this.大部分情况下都可以省略。
this只能使用在实例变量中。谁调用这个实例方法,this就是谁,所以this代表的是当前对象。

this除了可以使用在实例方法中,还可以用在构造方法中。
在当前构造方法中去调用另一个本类的构造方法,可以使用以下语法格式:
  this(实际参数列表);

通过以上语法,可以做到代码复用,但需要注意的是:两个构造方法必须在同一个类中。
this()的调用只能出现在构造方法的第一行,不能出现两次。

  在实例方法或者构造方法中,为了区分局部变量和实例变量,这种情况下, this. 不能省略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值