黑马程序员-面向对象三大特性之封装

来源:互联网 发布:胸肌锻炼方法 知乎 编辑:程序博客网 时间:2024/05/16 14:29
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

第一讲封装

一、封装的概念:

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。(private只是封装的一种表现形式)


二、封装的好处:

1)将变化隔离;

2)便于使用;

3)提高复用性;

4)提高安全性。


三、封装的原则:

1)将不需要对外提供的内容隐藏起来;

2)把属性都隐藏,提供公共方法对其访问。

实例:

package com.shengsiyuan;class Pig{//封装age变量private int age;//定义一个方法来设置age值public void setAge(int a){if(a>0 && a<9){age = a;grow();}elseSystem.out.println("输入的年龄有误");}//获取age值public int getAge(){return age;}void grow(){System.out.println("age="+age);}}public class Demo{public static void main(String[] args){Pig p = new Pig();p.setAge(7);}}

补充:构造函数

1) 特点:

        a) 构造函数名字必须和类名完全相同;

b)不能有返回值,注意不要写void,也不能写return 语句;

c)不能被子类继承;

d)可以重载但不能被子类所覆盖。


2)作用: 给对象进行初始化。


3)构造函数的小细节:   当一个类中没有定义构造函数时,那么系统就会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。


4)构造函数和一般函数在写法上有不同。

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


5)什么时候定义构造函数?

        当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。


6)构造代码块

       作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数运行。

和构造函数的区别: 构造代码块是给所有对象进行初始化; 而构造函数是给对应的对象初始化。

构造代码块中定义的是不同对象共性的初始化内容。



补充:this关键字

this代表本类对象,即它所在函数所属对象的引用。 

this的应用: 当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。只要是本类功能内部使用到了本类对象,都用this表示。

this语句: 用于构造函数之间进行互相调用。如:this(name);

        this语句只能定义在构造函数的第一行。因为初始化要先执行。

实例:

 package com.shengsiyuan;class Person1{private int age;private String name;Person1(int age){this.age = age;//this表示调用构造方法的对象}Person1(String name){this.name = name;}Person1(String name,int age){this.name = name;this.age = age;}public void speak(){System.out.println("name="+name+",age="+age);show();}public void show(){System.out.println(this.name);}}public class Demo{public static void main(String[] args){Person1 p = new Person1("lisi");Person1 p1 = new Person1("wangwu",20);p.speak();p1.speak();}}

结果:




补充:static关键字

用于修饰成员变量和成员方法。当成员被static修饰后,出了可以被对象调用外还可以直接被类名调用。类名.静态成员。

static特点:

        1、随着类的加载而加载,随着类的消失而消失。

        2、优先于对象存在。

        3、被所有对象所共享。

        4、可以直接被类名所调用。


实例变量和类变量的区别:

1、存放位置:

类变量随着累的加载而存在于方法区。

实例变量随着对象的建立而存在于堆内存中。

2、生命周期:

类变量生命周期最长,随着类的消失而消失。

实例变量生命周期随着对象的小时而消失。


静态的利弊:

利:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存一份,可以直接被类名调用。

弊:生命周期过长。访问出现局限性(静态只能访问静态)。


注意:静态方法只能访问静态成员;非静态方法既可以访问静态也可以访问非静态。

    静态方法中不可以写super,this关键字;因为静态优先于对象存在。

    主函数数静态的。


问题:

1、什么使用静态?

        从两方面下手: 因为静态修饰的内容有成员变量和函数。

2、什么时候定义静态变量(类变量)呢?

        当对象中出现共享数据时,该数据被静态所修饰。

        对象中的特有数据要定义成非静态存在于堆内存中。

3、什么时候定义静态函数呢?

        当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。


静态代码块:

       格式:

              static

              {

                           静态代码块中的语句。

              }

特点:随着类的加载而执行,执行一次。并优先于主函数。用于给类进行初始化。

对象的初始化过程:

        1、把类名.class文件加载到内存中。

        2、执行该类中的static代码块,如果有得话,给该类进行初始化。

        3、在堆内存中开辟空间,分配内存地址。给对象

        4、在堆内存中建立对象的特有属性。并进行默认初始化。

        5、对属性进行显示初始化。

        6、对对象进行构造代码块初始化。

        7、对对象进行对应构造函数初始化。

        8、将内存地址赋给栈内存中的对象名变量。


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0
原创粉丝点击