黑马程序员_Java基础[8]_封装、构造函数、this

时间:2021-08-24 11:47:05
---------- android培训 java培训、期待与您交流! ----------


【【封装】】

就是隐藏对象的属性和实现细节,仅仅对外提供公共访问方式。

好处就是:将变化隔离,方便使用,提高重要性,提高安全性。


封装的原则】:将不需要对外提供的内容都隐藏起来。
                                把属性都隐藏,提供公共方法对其访问。


封装是面向对象的三大特征之一,前面我们讨论的时候,其实就体现了封装
比如电饭煲具体有什么属性啊,什么主板啊,导线啊,是怎么做饭的等等,
我们不知道,都封装起来了,只知道它具备做饭和熬粥的功能。

方法/函数,就是最小的封装。


小提了一下修饰符,public,private,前者是公共的,后者是私有的。
私有的只在本类中有效。想要使用私有的属性,必须通过访问器来读写。
get读 对应读取的类型   set写无返回类型void。   
私有仅仅是封装的一种体现形式。而【不是说】封装就是私有

之所以提供对外访问方式,是因为在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码的健壮性。


----------------------------------------------------------------------------------------


【【构造函数】】【this关键字】

特点】,
构造函数名与类名相同,不用定义返回值类型,不可以写return。
对象一建立,就会调用与之对应的构造函数。
【构造函数的作用】,

可以用于给对象进行初始化


什么时候写构造函数:
分析事物时,该事物存在具备一些特性或者行为,那么就将这些内容定义在构造函数中。
(比如初始化的时候就要有姓名,而姓名是未知的,那么。。。。)

【小细节】:

当一个类中没有定义构造函数时,系统会默认添加一个空参数构造函数。
方便该类进行初始化。

当,在类中自定义构造函数后,默认的构造函数就没有了。
class stu{
            //stu(){};// 其实这里默认写了空参数构造函数               
}

构造函数间不可直接调用,调用必须用this。    (因为this是引用,)
[this 语句用于构造函数间的调用。]
如果要调用,比如下列【a】处
person(String name,int age){
this(name);// 等于  对象名.(name);  相当与 nw person(name);
this.age=age;
}
构造函数有时候对外可能只有一个,而内部却可能是多个,而内部就用到了很多调用,这得用this(),内部初始化作用。
this只能放在构造函数第一行。执行初始化。

构造函数具备函数的特性:重载。

也就是说,当我们定义一个类的时候,没有写构造函数
系统会默认添加一个空参数的构造函数,这种情况下该类才能new出对象,才能调用。
而当我们写一个参数的时候,系统就不再使用默认空参数构造函数,而使用我们定义的构造函数
构造函数可以有多个,但必须是同名,无返回类型(这不是废话嘛)这也就是重载

重载就是参数的不同,
比如【a】
person(){}//系统默认
person(String name){}//带一个参数
person(String name,int age){}//带两个参数
这种情况下,当我们new person()一个无参对象时,系统自动匹配默认构造函数,
如果new person("王小丫")系统会匹配一个参数的构造函数
如果new person("王小丫", 1 )系统会匹配两个参数的构造函数

【【构造函数】和【函数】区别】


构造函数 :同类名,无返回类型
       在对象一建立的时候就运行,给对象初始化
       一个对象建立,构造函数只运行一次
一般函数 :方法不同与类名,有返回类型,类名小写。
       对象调用的时候才执行,给是对象添加对象具备的功能。
       可以被该对象多次调用。

【】
老师提到:【构造代码块
{
    System.out.println("没有名字的函数,开发不用,面试常考");
}
【作用】给对象进行初始化,而【且优先于构造函数执行】

【区别】,构造代码块是给【所有对象】进行统一初始化
      构造函数是给【对应对象】进行初始化。

构造代码块,可以调用所有构造函数的共性函数。比如上面的【a】代码,假设他们都有个哭的函数,
这个时候我们就不用分别调用,而在代码块中调用一次即可。

目前所学中,构造函数不能进行私有化,(private) 一私有, 对象就不能创建了,对象不能私有化。

                     
----------------------------------------------------------------------------------------
关于之前产生的误区:构造函数和get、set
------------------------------------------
构造函数是用来给类实例化的,
重写或者重载构造函数,确实可以在实例化过程中对成员属性赋值,
省去了get、set的麻烦。

其实get、set就是为了让其它对象可以操作这个类的对象的私有化的属性,
降低代码的耦合度,

----------------------------------------------------------------------------------------

【【this关键字】】
回顾一下:
成员变量,有初始值,不赋值可以调用,全类中可用。
局部变量,无初始值,不可以直接调用,且只作用与局部

person(String name){
      this.name=name;  //把传递过来的name赋值给引用对象的那么。
}
this 2大作用
1
this,看上去用于区*部变量和成员变量同名的情况
2
用于   构造函数间   的相互调用。

this,为什么可以解决这个问题呢
this,代表在函数所属对象的引用。
【this,的应用】,当定义类中函数时,该函数内部,要调用该函数的对象时,
                  这时,用this来表示这个对象
                 但凡本类功能内部使用到了本类对象,都用this表示。
(记住:变量出现同名时,必须加this。 调用都是对象进行的。)




---------- android培训、 java培训、期待与您交流!----------
黑马官网: http://edu.csdn.net/heima