小小雷利

Satan's book

06_java面向对象—封装


 
前言:复杂到简单,执行者到指挥者,在Java中,一切皆对象。

面向对象的三个特征:封装继承,多态。

java开发中其实就是在:找对象,建立对象,使用对象,维护对象的关系

类和对象的关系
● class:对事物的描写  
● 对象:在堆内存中用new建立事物的实体

描述事物其实就是描述事物的属性和行为
● 属性:类中的变量
● 行为:类中的函数(方法)

匿名对象
● 方式一:对象的函数调用一次时,可以用匿名对象来完成。
● 方式二:可以将匿名对象作为实际参数进行传递。




封装 
1. 将变化隔离
2. 便于使用
3. 提高重用性
4. 提高安全性

原则:
 将不必要对外提供的内容隐藏起来。
● 把属于隐藏,提供公共方法对其访问。





private(私有):封装:权限修饰符。(成员变量,成员函数)
作用:用于修饰类中的成员,private自在本类中有效,外界无法直接访问。

成员变量私有化后,成员变量一般提供两种访问方式
例子:

class feng
{
     private  int  num;   //将成员变量私有化
    
    public  void   setNum (int a)    //设置;访问方式
    {
         num=a;    
    }

     public  int  getNum ()              //获取;访问方式
     {
          return num;    
     }
}    
         




构造函数

特点:函数名与类名相同,不用定义返回值类型,不可以写return语。
作用:可以用于给对象初始化。
小细节当一个类中没有构造函数时,那么系统会自动给该类默认加入一个空参数的构造函数式「构造函数名{}{}」默认的构造函数权限与所属类一致


构造函数与一般函数的不同:
构造函数:对象一建立就运行,给对象初始化。
一般函数:是对调用才执行,给对象添加对象具备的功能。  
构造函数:一个对象建立,构造函数只运行一次。
一般函数:一般函数可以被该对象调用多次。


构造函数代码块
作用:给对象进行初始化。对象建立就运行,而且优先于构造函数执行。
区别:构造代码块是给所有对象进行统一初始化,构造函数是给对应的对象初始化。
如何使用:可以对不同对象的共性进行初始化。

例子:

{
     System.out.println("xxxxxxxxx")  //这就是构造函数代码块
}



 

this:代表本类的对象。
this:到底代表哪个对象?代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表那个对象。

作用⑴:用于区分局部变量和成员变量同名的情况。
作用⑵:用于构造函数间互相调用,但只能定义在构造函数的第一行。



 
static(静态):共享:修饰符:用于修饰成员(成员变量和成员函数)
作用:当成员被静态修饰后,就多了一个调用方式,除了被对象调用外,还可以直接被类名调用类名.静态成员

【 static特点 】
 1,静态随着类的加载而加载,随着类的消失而消失,说明它的生命周期最长。
 2,优先于对象的存在。类一加载到内存后,静态就存在,所以静态可以用类名直接调用的方式。
 3,被所有对象共享。也就是说静态修饰的是对象的共性特征。
 4,可以直接被类名调用。


【 实例变量和类变量的区别】
存放位置
1,类变量随着类的加载而存在于方法区。
2,实例变量随着对象的建立而存在于堆内存中。

生命周期
1,类变量生命周期最长,随着类的消失而消失。
2,实例变量生命周期随着对象的消失而消失。


【 静态使用注意事项 】
1. 静态方法只能访问静态成员。
    非静态方法即可以访问静态成员,也可以访问非静态成员。
2. 静态方法中不可以定义this,super关键字。
    因为静态优先于对象的存在,所以静态方法中不可以出现this。
3. 主函数是静态的。
    
静态利于弊
利处:对对象的共享数据进行单独空间存储,节省空间。
         可以直接被类名调用。    
弊端:生命周期过长。
         访问出现局限性(只有静态才能访问静态)。


什么时候使用静态函数?
当静态函数只访问静态成员时,没有访问到非静态成员。(就是对象的特有数据)
例子:
class ren
{    
     String name;
     
     public static void shuo()
     {
          System.out.println("xiaoxiao")
     }

}

class  
{
     public static void main(String[] args)
     {
         
           ren.shuo();   //静态函数没有调用非静态成员,直接用[类名.静态成员]来调用。     
     }                       //这样就不需要建立对象。

}



静态代码块

例子:

static
{
     System.out.println("xxxxxxx")
}





main主函数(主函数格式是固定的作为程序的入口,被jvm识别。)

public :代表该函数访问权限是最大的。
static :代表主函数随着类的加载就已经存在了。
void   :主函数没有具体的返回值。
main   :不是关键字,但是是一个特殊的单词,可以被jvm识别。
(string[]  args): 函数的参数,参数类型是一个数组,该数组中的元素是字符串。


1.什么时候使用静态?
   静态修饰的是成员变量和成员函数。
2.什么时候定义静态变量(类变量)
   对象出现共享数据时,用静态修饰,存在于方法区
   对象中的特有数据要定义成非静态。存在于堆内存
3.什么时候定义静待函数
   功能内部没有访问到非静态数据(就是对象的特有数据)
   那么该功能可以定义成静态     



1.类加载到内存中。
2.静态代码块运行。
3.在堆内存中开辟空间,并分配内存地址值。
4.在堆内存中建立对象的特有属性,并进行默认初始化。
5.对特有属于进行显示初始化。
6.对构造代码块初始化。
7.对对象进行对应的构造函数初始化。
8.将内存地址赋给栈内存中的变量。



posted on 2012-03-24 01:01  小小雷利  阅读(181)  评论(0编辑  收藏  举报

导航